[llvm-bugs] [Bug 47138] New: _alignof with incomplete field causes crashes

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Aug 12 08:58:11 PDT 2020


https://bugs.llvm.org/show_bug.cgi?id=47138

            Bug ID: 47138
           Summary: _alignof with incomplete field causes crashes
           Product: clang
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: allight at google.com
                CC: htmldeveloper at gmail.com, llvm-bugs at lists.llvm.org,
                    neeilans at live.com, richard-llvm at metafoo.co.uk

Created attachment 23848
  --> https://bugs.llvm.org/attachment.cgi?id=23848&action=edit
diagnostic file

```
struct b;
struct a {
    b c;
};
static_assert(__alignof(a)== 8 , "");
```

Crashes the compiler.

```
% $HOME/misc/llvm-project/build/bin/clang++ out-new.cc
out-new.cc:3:5: error: field has incomplete type 'b'
  b c;
    ^
out-new.cc:1:8: note: forward declaration of 'b'
struct b;
       ^
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:
/usr/local/google/home/allight/misc/llvm-project/build/bin/clang-12 -cc1
-triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all --mrelax-relocations
-disable-free -disable-llvm-verifier -discard-value-names -main-file-name
out-new.cc -mrelocation-model static -mframe-pointer=all -fmath-errno
-fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64
-fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir
/usr/local/google/home/allight/misc/llvm-project/build/lib/clang/12.0.0
-internal-isystem /usr/lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9
-internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/9/../../../../include/x86_64-linux-gnu/c++/9
-internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/9/../../../../include/x86_64-linux-gnu/c++/9
-internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/backward
-internal-isystem /usr/local/include -internal-isystem
/usr/local/google/home/allight/misc/llvm-project/build/lib/clang/12.0.0/include
-internal-externc-isystem /usr/include/x86_64-linux-gnu
-internal-externc-isystem /include -internal-externc-isystem /usr/include
-fdeprecated-macro -fdebug-compilation-dir
/usr/local/google/home/allight/trees/aosp-1 -ferror-limit 19
-fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics
-faddrsig -o /tmp/out-new-f874ac.o -x c++ out-new.cc
1.      <eof> parser at end of file
 #0 0x000055985c69e50a llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/usr/local/google/home/allight/misc/llvm-project/llvm/lib/Support/Unix/Signals.inc:567:3
 #1 0x000055985c69c604 llvm::sys::RunSignalHandlers()
/usr/local/google/home/allight/misc/llvm-project/llvm/lib/Support/Signals.cpp:68:20
 #2 0x000055985c69cead SignalHandler(int)
/usr/local/google/home/allight/misc/llvm-project/llvm/lib/Support/Unix/Signals.inc:405:1
 #3 0x00007f8729ace110 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x14110)
 #4 0x000055985ed50792 clang::Decl::getKind() const
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/DeclBase.h:433:51
 #5 0x000055985ed50792 clang::CXXRecordDecl::classof(clang::Decl const*)
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/DeclCXX.h:1808:58
 #6 0x000055985ed50792 llvm::isa_impl<clang::CXXRecordDecl, clang::RecordDecl,
void>::doit(clang::RecordDecl const&)
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/Support/Casting.h:58:23
 #7 0x000055985ed50792 llvm::isa_impl_cl<clang::CXXRecordDecl,
clang::RecordDecl const*>::doit(clang::RecordDecl const*)
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/Support/Casting.h:105:36
 #8 0x000055985ed50792 llvm::isa_impl_wrap<clang::CXXRecordDecl,
clang::RecordDecl const*, clang::RecordDecl const*>::doit(clang::RecordDecl
const* const&)
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/Support/Casting.h:131:40
 #9 0x000055985ed50792 llvm::isa_impl_wrap<clang::CXXRecordDecl,
clang::RecordDecl const* const, clang::RecordDecl
const*>::doit(clang::RecordDecl const* const&)
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/Support/Casting.h:122:60
#10 0x000055985ed50792 bool llvm::isa<clang::CXXRecordDecl, clang::RecordDecl
const*>(clang::RecordDecl const* const&)
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/Support/Casting.h:143:74
#11 0x000055985ed50792 llvm::cast_retty<clang::CXXRecordDecl, clang::RecordDecl
const*>::ret_type llvm::dyn_cast<clang::CXXRecordDecl, clang::RecordDecl
const>(clang::RecordDecl const*)
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/Support/Casting.h:345:16
#12 0x000055985ed50792 clang::ASTContext::getASTRecordLayout(clang::RecordDecl
const*) const
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/RecordLayoutBuilder.cpp:3215:49
#13 0x000055985ed51741 clang::Redeclarable<clang::TagDecl>::getMostRecentDecl()
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/Redeclarable.h:226:12
#14 0x000055985ed51741 clang::RecordDecl::getMostRecentDecl()
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/Decl.h:3833:28
#15 0x000055985ed51741 clang::CXXRecordDecl::getMostRecentDecl()
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/DeclCXX.h:511:31
#16 0x000055985ed51741 clang::CXXRecordDecl::getMostRecentDecl() const
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/DeclCXX.h:516:63
#17 0x000055985ed51741 clang::CXXRecordDecl::dataPtr() const
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/DeclCXX.h:428:22
#18 0x000055985ed51741 clang::CXXRecordDecl::data() const
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/DeclCXX.h:433:23
#19 0x000055985ed51741 clang::CXXRecordDecl::isEmpty() const
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/AST/DeclCXX.h:1130:38
#20 0x000055985ed51741 ComputeEmptySubobjectSizes
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/RecordLayoutBuilder.cpp:218:28
#21 0x000055985ed51741 EmptySubobjectMap
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/RecordLayoutBuilder.cpp:172:33
#22 0x000055985ed51741 clang::ASTContext::getASTRecordLayout(clang::RecordDecl
const*) const
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/RecordLayoutBuilder.cpp:3216:50
#23 0x000055985ea84de0 clang::ASTContext::getPreferredTypeAlign(clang::Type
const*) const
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ASTContext.cpp:2464:15
#24 0x000055985ec0c515 GetAlignOfType((anonymous namespace)::EvalInfo&,
clang::QualType, clang::UnaryExprOrTypeTrait) (.isra.0)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:8484:1
#25 0x000055985ec3d902 Success
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:10229:19
#26 0x000055985ec3d902 Success
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:10233:19
#27 0x000055985ec3d902 VisitUnaryExprOrTypeTraitExpr
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:12527:21
#28 0x000055985ec3d902 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous
namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*)
/usr/local/google/home/allight/misc/llvm-project/build/tools/clang/include/clang/AST/StmtNodes.inc:1373:1
#29 0x000055985ec30b40 Evaluate(clang::APValue&, (anonymous
namespace)::EvalInfo&, clang::Expr const*)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:13993:46
#30 0x000055985ec36b59 EvaluateAsRValue((anonymous namespace)::EvalInfo&,
clang::Expr const*, clang::APValue&)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:14101:5
#31 0x000055985ec39e01 clang::Expr::isCXX11ConstantExpr(clang::ASTContext
const&, clang::APValue*, clang::SourceLocation*) const
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:15008:30
#32 0x000055985ec3a3c3 EvaluateCPlusPlus11IntegralConstantExpr
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:14921:30
#33 0x000055985ec3a3c3
EvaluateCPlusPlus11IntegralConstantExpr(clang::ASTContext const&, clang::Expr
const*, llvm::APSInt*, clang::SourceLocation*)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:14911:13
#34 0x000055985ec3a51a clang::Expr::getIntegerConstantExpr(clang::ASTContext
const&, clang::SourceLocation*, bool) const
/usr/local/google/home/allight/misc/llvm-project/clang/lib/AST/ExprConstant.cpp:14958:5
#35 0x000055985e1d1d12 llvm::Optional<llvm::APSInt>::hasValue() const
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/ADT/Optional.h:259:51
#36 0x000055985e1d1d12 llvm::Optional<llvm::APSInt>::operator bool() const
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/ADT/Optional.h:258:52
#37 0x000055985e1d1d12 AnalyzeComparison
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Sema/SemaChecking.cpp:10941:21
#38 0x000055985e1d1d12 AnalyzeImplicitConversions
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Sema/SemaChecking.cpp:12228:31
#39 0x000055985e1d1d12 AnalyzeImplicitConversions(clang::Sema&, clang::Expr*,
clang::SourceLocation, bool) (.constprop.0)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Sema/SemaChecking.cpp:12293:31
#40 0x000055985e1d931c clang::Sema::CheckCompletedExpr(clang::Expr*,
clang::SourceLocation, bool)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Sema/SemaChecking.cpp:13473:3
#41 0x000055985e511cc4 clang::Sema::ActOnFinishFullExpr(clang::Expr*,
clang::SourceLocation, bool, bool)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Sema/SemaExprCXX.cpp:8362:19
#42 0x000055985e33a39a
clang::Sema::BuildStaticAssertDeclaration(clang::SourceLocation, clang::Expr*,
clang::StringLiteral*, clang::SourceLocation, bool)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:15985:5
#43 0x000055985e08cfa1
clang::Parser::ParseStaticAssertDeclaration(clang::SourceLocation&)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:928:46
#44 0x000055985e08340a
clang::Parser::ParseDeclaration(clang::DeclaratorContext,
clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&,
clang::SourceLocation*)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Parse/ParseDecl.cpp:1630:46
#45 0x000055985e05580e
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) (.localalias)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Parse/Parser.cpp:889:79
#46 0x000055985e056375 clang::AttributePool::~AttributePool()
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/Sema/ParsedAttr.h:719:41
#47 0x000055985e056375 clang::ParsedAttributes::~ParsedAttributes()
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/Sema/ParsedAttr.h:914:7
#48 0x000055985e056375
clang::Parser::ParsedAttributesWithRange::~ParsedAttributesWithRange()
/usr/local/google/home/allight/misc/llvm-project/clang/include/clang/Parse/Parser.h:1556:10
#49 0x000055985e056375
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Parse/Parser.cpp:680:46
#50 0x000055985e049e19 clang::ParseAST(clang::Sema&, bool, bool)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Parse/ParseAST.cpp:157:56
#51 0x000055985cec27c1 clang::FrontendAction::Execute()
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Frontend/FrontendAction.cpp:950:21
#52 0x000055985ce7af6b llvm::Error::operator bool()
/usr/local/google/home/allight/misc/llvm-project/llvm/include/llvm/Support/Error.h:236:22
#53 0x000055985ce7af6b
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:984:42
#54 0x000055985cf7cd40
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/usr/local/google/home/allight/misc/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:279:43
#55 0x000055985a8a7b10 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*)
/usr/local/google/home/allight/misc/llvm-project/clang/tools/driver/cc1_main.cpp:240:40
#56 0x000055985a8a57cb ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
/usr/local/google/home/allight/misc/llvm-project/clang/tools/driver/driver.cpp:330:20
#57 0x000055985a803d4e main
/usr/local/google/home/allight/misc/llvm-project/clang/tools/driver/driver.cpp:407:26
#58 0x00007f872959ee0b __libc_start_main
/build/glibc-M65Gwz/glibc-2.30/csu/../csu/libc-start.c:342:3
#59 0x000055985a8a537a _start
(/usr/local/google/home/allight/misc/llvm-project/build/bin/clang-12+0xdff37a)
clang-12: error: unable to execute command: Segmentation fault
clang-12: error: clang frontend command failed due to signal (use -v to see
invocation)
clang version 12.0.0 (https://github.com/llvm/llvm-project.git
d04f3e028d3287e43d4b84efcc33c2816ac9d3d6)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/google/home/allight/misc/llvm-project/build/bin
clang-12: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-12: note: diagnostic msg: /tmp/out-new-12811d.cpp
clang-12: note: diagnostic msg: /tmp/out-new-12811d.sh
clang-12: note: diagnostic msg:

********************
```

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200812/8c28e88f/attachment-0001.html>


More information about the llvm-bugs mailing list