diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-02-08 10:55:14 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-02-08 10:55:14 +0000 |
commit | e9624ed67a6d25c1bfbf69834e98a92ef7f2bbe6 (patch) | |
tree | 14fb1f806786563be05626035000f81c0d9f8d08 | |
parent | 29d39d54e7398610126f15f1f3fb97f9575a80f9 (diff) | |
download | bcm5719-llvm-e9624ed67a6d25c1bfbf69834e98a92ef7f2bbe6.tar.gz bcm5719-llvm-e9624ed67a6d25c1bfbf69834e98a92ef7f2bbe6.zip |
Sema: Don't give attribute alias vars with struct type an init expr
We'd give the VarDecl a CXXConstructExpr even though it is annotated
with an alias attribute. This would make us trip over sanity checking
asserts.
This fixes PR22493.
llvm-svn: 228523
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx11-gnu-attrs.cpp | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index a5ce9a0277d..f187ee2474b 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -9259,6 +9259,8 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl, Var->setInvalidDecl(); return; } + } else { + return; } // The variable can not have an abstract class type. diff --git a/clang/test/SemaCXX/cxx11-gnu-attrs.cpp b/clang/test/SemaCXX/cxx11-gnu-attrs.cpp index 9f182249a3e..ac9cc55b9fc 100644 --- a/clang/test/SemaCXX/cxx11-gnu-attrs.cpp +++ b/clang/test/SemaCXX/cxx11-gnu-attrs.cpp @@ -15,6 +15,9 @@ void aliasb [[gnu::alias("_Z6alias1v")]] (); void alias1() {} void aliasa [[gnu::alias("_Z6alias1v")]] (); +extern struct PR22493Ty { +} PR22493 [[gnu::alias("_ZN7pcrecpp2RE6no_argE")]]; + [[gnu::aligned(8)]] int aligned; void aligned_fn [[gnu::aligned(32)]] (); struct [[gnu::aligned(8)]] aligned_struct {}; |