forked from OSchip/llvm-project
When we generate a redeclaration for an
elaborated-type-specifier, place it in the correct context. llvm-svn: 208799
This commit is contained in:
parent
f662f0a65e
commit
a16fc89206
|
@ -10981,7 +10981,15 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
|
|||
}
|
||||
|
||||
// Okay, this is definition of a previously declared or referenced
|
||||
// tag PrevDecl. We're going to create a new Decl for it.
|
||||
// tag. We're going to create a new Decl for it.
|
||||
}
|
||||
|
||||
// Okay, we're going to make a redeclaration. If this is some kind
|
||||
// of reference, make sure we build the redeclaration in the same DC
|
||||
// as the original, and ignore the current access specifier.
|
||||
if (TUK == TUK_Friend || TUK == TUK_Reference) {
|
||||
SearchDC = PrevTagDecl->getDeclContext();
|
||||
AS = AS_none;
|
||||
}
|
||||
}
|
||||
// If we get here we have (another) forward declaration or we
|
||||
|
|
|
@ -43,3 +43,12 @@ int test_funcparam_scope(struct S5 * s5) {
|
|||
if (s5 == s5_2) return 1; // expected-error {{comparison of distinct pointer types ('struct S5 *' and 'struct S5 *')}}
|
||||
return 0;
|
||||
}
|
||||
|
||||
namespace test5 {
|
||||
struct A {
|
||||
class __attribute__((visibility("hidden"))) B {};
|
||||
|
||||
void test(class __attribute__((visibility("hidden"), noreturn)) B b) { // expected-warning {{'noreturn' attribute only applies to functions and methods}}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -288,3 +288,11 @@ namespace test10 {
|
|||
::test10::f10_d(z);
|
||||
}
|
||||
}
|
||||
|
||||
namespace test11 {
|
||||
class __attribute__((visibility("hidden"))) B;
|
||||
|
||||
class A {
|
||||
friend class __attribute__((visibility("hidden"), noreturn)) B; // expected-warning {{'noreturn' attribute only applies to functions and methods}}
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue