diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 12 | ||||
-rw-r--r-- | clang/test/Sema/attr-alias-elf.c | 3 |
2 files changed, 10 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 82d28fa0827..13a77f15eb2 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -8897,11 +8897,13 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl, if (Var->isInvalidDecl()) return; - if (RequireCompleteType(Var->getLocation(), - Context.getBaseElementType(Type), - diag::err_typecheck_decl_incomplete_type)) { - Var->setInvalidDecl(); - return; + if (!Var->hasAttr<AliasAttr>()) { + if (RequireCompleteType(Var->getLocation(), + Context.getBaseElementType(Type), + diag::err_typecheck_decl_incomplete_type)) { + Var->setInvalidDecl(); + return; + } } // The variable can not have an abstract class type. diff --git a/clang/test/Sema/attr-alias-elf.c b/clang/test/Sema/attr-alias-elf.c index 04d13924ac1..f14514dccd2 100644 --- a/clang/test/Sema/attr-alias-elf.c +++ b/clang/test/Sema/attr-alias-elf.c @@ -64,3 +64,6 @@ void test3_foo() __attribute__((alias("test3_bar"))); __attribute__((section("test"))) void test4_bar() { } void test4_foo() __attribute__((section("test"))); void test4_foo() __attribute__((alias("test4_bar"))); + +int test5_bar = 0; +extern struct incomplete_type test5_foo __attribute__((alias("test5_bar"))); |