diff options
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 2 | ||||
-rw-r--r-- | clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 8e2bac6ed0f..5f6f81de148 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3441,7 +3441,7 @@ void Sema::CheckAlignasUnderalignment(Decl *D) { Ty = VD->getType(); else Ty = Context.getTagDeclType(cast<TagDecl>(D)); - if (Ty->isDependentType()) + if (Ty->isDependentType() || Ty->isIncompleteType()) return; // C++11 [dcl.align]p5, C11 6.7.5/4: diff --git a/clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp b/clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp index 8cf5b266bb2..e7885774807 100644 --- a/clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp +++ b/clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp @@ -81,3 +81,6 @@ enum alignas(O) alignas(P) Y<M,N,O,P>::E : char { e }; int y1848 = Y<1,8,4,8>::e; // FIXME: We should reject this. int y1248 = Y<1,2,4,8>::e; + +// Don't crash here. +alignas(4) struct Incomplete incomplete; // expected-error {{incomplete type}} expected-note {{forward declaration}} |