Merge existing attributes before processing pragmas in friend template
declarations. Fixes pr13662. llvm-svn: 162360
This commit is contained in:
parent
4d520640ba
commit
0c6c405e23
|
@ -1104,6 +1104,9 @@ Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
|
|||
if (Attr)
|
||||
ProcessDeclAttributeList(S, NewClass, Attr);
|
||||
|
||||
if (PrevClassTemplate)
|
||||
mergeDeclAttributes(NewClass, PrevClassTemplate->getTemplatedDecl());
|
||||
|
||||
AddPushedVisibilityAttribute(NewClass);
|
||||
|
||||
if (TUK != TUK_Friend)
|
||||
|
@ -1138,8 +1141,6 @@ Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
|
|||
NewTemplate->setInvalidDecl();
|
||||
NewClass->setInvalidDecl();
|
||||
}
|
||||
if (PrevClassTemplate)
|
||||
mergeDeclAttributes(NewClass, PrevClassTemplate->getTemplatedDecl());
|
||||
|
||||
ActOnDocumentableDecl(NewTemplate);
|
||||
|
||||
|
|
|
@ -21,3 +21,10 @@ void f() {
|
|||
#pragma GCC visibility push(protected)
|
||||
#pragma GCC visibility pop
|
||||
}
|
||||
|
||||
namespace pr13662 {
|
||||
#pragma GCC visibility push(hidden)
|
||||
template<class T> class __attribute__((__visibility__("default"))) foo;
|
||||
class bar { template<class T> friend class foo; };
|
||||
#pragma GCC visibility pop
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue