hokein created this revision. hokein added a reviewer: sammccall. Herald added a project: clang.
crash stack: lang: tools/clang/include/clang/AST/AttrImpl.inc:1490: unsigned int clang::AlignedAttr::getAlignment(clang::ASTContext &) const: Assertion `!isAlignmentDependent()' failed. PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script. Stack dump: 0. Program arguments: ./bin/clang -cc1 -std=c++1y -ast-dump -frecovery-ast -fcxx-exceptions /tmp/t4.cpp 1. /tmp/t4.cpp:3:31: current parser token ';' #0 0x0000000002530cff llvm::sys::PrintStackTrace(llvm::raw_ostream&) llvm-project/llvm/lib/Support/Unix/Signals.inc:564:13 #1 0x000000000252ee30 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:69:18 #2 0x000000000253126c SignalHandler(int) llvm-project/llvm/lib/Support/Unix/Signals.inc:396:3 #3 0x00007f86964d0520 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x13520) #4 0x00007f8695f9ff61 raise /build/glibc-oCLvUT/glibc-2.29/signal/../sysdeps/unix/sysv/linux/raise.c:51:1 #5 0x00007f8695f8b535 abort /build/glibc-oCLvUT/glibc-2.29/stdlib/abort.c:81:7 #6 0x00007f8695f8b40f _nl_load_domain /build/glibc-oCLvUT/glibc-2.29/intl/loadmsgcat.c:1177:9 #7 0x00007f8695f98b92 (/lib/x86_64-linux-gnu/libc.so.6+0x32b92) #8 0x0000000004503d9f llvm::APInt::getZExtValue() const llvm-project/llvm/include/llvm/ADT/APInt.h:1623:5 #9 0x0000000004503d9f clang::AlignedAttr::getAlignment(clang::ASTContext&) const llvm-project/build/tools/clang/include/clang/AST/AttrImpl.inc:1492:0 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D78085 Files: clang/lib/AST/DeclBase.cpp clang/test/AST/ast-dump-recovery.cpp clang/test/SemaCXX/invalid-aligned-attr.cpp Index: clang/test/SemaCXX/invalid-aligned-attr.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/invalid-aligned-attr.cpp @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -frecovery-ast -verify %s +// RUN: %clang_cc1 -verify %s + +struct alignas(invalid()) Foo {}; // expected-error {{use of undeclared identifier}} + +constexpr int k = alignof(Foo); Index: clang/test/AST/ast-dump-recovery.cpp =================================================================== --- clang/test/AST/ast-dump-recovery.cpp +++ clang/test/AST/ast-dump-recovery.cpp @@ -97,4 +97,9 @@ void test(int x) { foo.abc; foo->func(x); -} \ No newline at end of file +} + +// CHECK: |-AlignedAttr {{.*}} alignas +// CHECK-NEXT:| `-RecoveryExpr {{.*}} contains-errors +// CHECK-NEXT:| `-UnresolvedLookupExpr {{.*}} 'invalid' +struct alignas(invalid()) Aligned {}; Index: clang/lib/AST/DeclBase.cpp =================================================================== --- clang/lib/AST/DeclBase.cpp +++ clang/lib/AST/DeclBase.cpp @@ -396,8 +396,10 @@ const AttrVec &V = getAttrs(); ASTContext &Ctx = getASTContext(); specific_attr_iterator<AlignedAttr> I(V.begin()), E(V.end()); - for (; I != E; ++I) - Align = std::max(Align, I->getAlignment(Ctx)); + for (; I != E; ++I) { + if (!I->isAlignmentDependent()) + Align = std::max(Align, I->getAlignment(Ctx)); + } return Align; }
Index: clang/test/SemaCXX/invalid-aligned-attr.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/invalid-aligned-attr.cpp @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -frecovery-ast -verify %s +// RUN: %clang_cc1 -verify %s + +struct alignas(invalid()) Foo {}; // expected-error {{use of undeclared identifier}} + +constexpr int k = alignof(Foo); Index: clang/test/AST/ast-dump-recovery.cpp =================================================================== --- clang/test/AST/ast-dump-recovery.cpp +++ clang/test/AST/ast-dump-recovery.cpp @@ -97,4 +97,9 @@ void test(int x) { foo.abc; foo->func(x); -} \ No newline at end of file +} + +// CHECK: |-AlignedAttr {{.*}} alignas +// CHECK-NEXT:| `-RecoveryExpr {{.*}} contains-errors +// CHECK-NEXT:| `-UnresolvedLookupExpr {{.*}} 'invalid' +struct alignas(invalid()) Aligned {}; Index: clang/lib/AST/DeclBase.cpp =================================================================== --- clang/lib/AST/DeclBase.cpp +++ clang/lib/AST/DeclBase.cpp @@ -396,8 +396,10 @@ const AttrVec &V = getAttrs(); ASTContext &Ctx = getASTContext(); specific_attr_iterator<AlignedAttr> I(V.begin()), E(V.end()); - for (; I != E; ++I) - Align = std::max(Align, I->getAlignment(Ctx)); + for (; I != E; ++I) { + if (!I->isAlignmentDependent()) + Align = std::max(Align, I->getAlignment(Ctx)); + } return Align; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits