[PATCH] D136554: Implement CWG2631

Jordan Rupprecht via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 14 10:29:15 PST 2022


rupprecht added a comment.

Ugh, I left cvise running overnight and forgot to include the validity check by building with a previous clang, so my reduction is invalid. I'm going to run it again, but here's the invalid crasher in the meantime:

  struct SourceLocation {
    static SourceLocation current(const char * = __builtin_FILE()) {
      struct Metadata {
        Metadata(SourceLocation = current());
        namespace struct {
          int x = z(x, Metadata())
        } y {
        }

stack trace:

  clang: /home/rupprecht/src/llvm-project/clang/include/clang/AST/Type.h:752: const ExtQualsTypeCommonBase *clang::QualType::getCommonPtr() const: Assertion `!isNull() && "Cannot retrieve a NULL type pointer"' failed.
  PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
  Stack dump:
  0.      Program arguments: bin/clang -c /tmp/repro.cc -std=c++17 -o /tmp/repro.o
  1.      <eof> parser at end of file
  2.      /tmp/repro.cc:1:1: parsing struct/union/class body 'SourceLocation'
  3.      /tmp/repro.cc:2:66: parsing function body 'SourceLocation::current'
  4.      /tmp/repro.cc:2:66: in compound statement ('{}')
   #0 0x00005645aaceaaba llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/rupprecht/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:567:11
   #1 0x00005645aaceac6b PrintStackTraceSignalHandler(void*) /home/rupprecht/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:641:1
   #2 0x00005645aace92f6 llvm::sys::RunSignalHandlers() /home/rupprecht/src/llvm-project/llvm/lib/Support/Signals.cpp:104:5
   #3 0x00005645aacea3ae llvm::sys::CleanupOnSignal(unsigned long) /home/rupprecht/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:367:1
   #4 0x00005645aac01187 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/rupprecht/src/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
   #5 0x00005645aac015dc CrashRecoverySignalHandler(int) /home/rupprecht/src/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:398:1
   #6 0x00007f34de23daa0 (/lib/x86_64-linux-gnu/libc.so.6+0x3daa0)
   #7 0x00007f34de28957c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
   #8 0x00007f34de23da02 gsignal ./signal/../sysdeps/posix/raise.c:27:6
   #9 0x00007f34de228469 abort ./stdlib/abort.c:81:7
  #10 0x00007f34de228395 _nl_load_domain ./intl/loadmsgcat.c:1177:9
  #11 0x00007f34de236ab2 (/lib/x86_64-linux-gnu/libc.so.6+0x36ab2)
  #12 0x00005645ab1dae17 clang::QualType::getCommonPtr() const /home/rupprecht/src/llvm-project/clang/include/clang/AST/Type.h:0:5
  #13 0x00005645ab1dada5 clang::QualType::getTypePtr() const /home/rupprecht/src/llvm-project/clang/include/clang/AST/Type.h:6622:26
  #14 0x00005645ab1da995 clang::QualType::operator->() const /home/rupprecht/src/llvm-project/clang/include/clang/AST/Type.h:794:5
  #15 0x00005645b071fe92 clang::computeDependence(clang::CXXThisExpr*) /home/rupprecht/src/llvm-project/clang/lib/AST/ComputeDependence.cpp:312:43
  #16 0x00005645aed30c16 clang::CXXThisExpr::CXXThisExpr(clang::SourceLocation, clang::QualType, bool) /home/rupprecht/src/llvm-project/clang/include/clang/AST/ExprCXX.h:1154:19
  #17 0x00005645af7f7c53 clang::Sema::BuildCXXThisExpr(clang::SourceLocation, clang::QualType, bool) /home/rupprecht/src/llvm-project/clang/lib/Sema/SemaExprCXX.cpp:1400:30
  #18 0x00005645af7d46a8 clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::RebuildCXXThisExpr(clang::SourceLocation, clang::QualType, bool) /home/rupprecht/src/llvm-project/clang/lib/Sema/TreeTransform.h:3196:22
  #19 0x00005645af7b09ae clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::TransformCXXThisExpr(clang::CXXThisExpr*) /home/rupprecht/src/llvm-project/clang/lib/Sema/TreeTransform.h:12139:23
  #20 0x00005645af7a9ec5 clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::TransformExpr(clang::Expr*) /home/rupprecht/src/llvm-build/dev/tools/clang/include/clang/AST/StmtNodes.inc:907:1
  #21 0x00005645af7b5097 clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::TransformMemberExpr(clang::MemberExpr*) /home/rupprecht/src/llvm-project/clang/lib/Sema/TreeTransform.h:11224:34
  #22 0x00005645af7aa857 clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::TransformExpr(clang::Expr*) /home/rupprecht/src/llvm-build/dev/tools/clang/include/clang/AST/StmtNodes.inc:1249:1
  #23 0x00005645af7b945a clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::TransformRecoveryExpr(clang::RecoveryExpr*) /home/rupprecht/src/llvm-project/clang/lib/Sema/TreeTransform.h:10929:36
  #24 0x00005645af7aade4 clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::TransformExpr(clang::Expr*) /home/rupprecht/src/llvm-build/dev/tools/clang/include/clang/AST/StmtNodes.inc:1431:1
  #25 0x00005645af71b9fe clang::TreeTransform<EnsureImmediateInvocationInDefaultArgs>::TransformInitializer(clang::Expr*, bool) /home/rupprecht/src/llvm-project/clang/lib/Sema/TreeTransform.h:4006:25
  #26 0x00005645af533e03 clang::Sema::BuildCXXDefaultInitExpr(clang::SourceLocation, clang::FieldDecl*) /home/rupprecht/src/llvm-project/clang/lib/Sema/SemaExpr.cpp:6090:19
  #27 0x00005645af995bcf (anonymous namespace)::InitListChecker::FillInEmptyInitForField(unsigned int, clang::FieldDecl*, clang::InitializedEntity const&, clang::InitListExpr*, bool&, bool) /home/rupprecht/src/llvm-project/clang/lib/Sema/SemaInit.cpp:688:32
  #28 0x00005645af98aac1 (anonymous namespace)::InitListChecker::FillInEmptyInitializations(clang::InitializedEntity const&, clang::InitListExpr*, bool&, clang::InitListExpr*, unsigned int, bool) /home/rupprecht/src/llvm-project/clang/lib/Sema/SemaInit.cpp:832:9
  #29 0x00005645af972d8f (anonymous namespace)::InitListChecker::InitListChecker(clang::Sema&, clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType&, bool, bool, bool) /home/rupprecht/src/llvm-project/clang/lib/Sema/SemaInit.cpp:979:28
  #30 0x00005645af97ebe3 clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) /home/rupprecht/src/llvm-project/clang/lib/Sema/SemaInit.cpp:8555:27
  #31 0x00005645af0b1a67 clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*, bool) /home/rupprecht/src/llvm-project/clang/lib/Sema/SemaDecl.cpp:13027:33
  #32 0x00005645aec9bb4a clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseDecl.cpp:0:15
  #33 0x00005645aec99a98 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseDecl.cpp:2196:9
  #34 0x00005645aec98ae1 clang::Parser::ParseSimpleDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, bool, clang::Parser::ForRangeInit*, clang::SourceLocation*) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseDecl.cpp:1893:10
  #35 0x00005645aec98719 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseDecl.cpp:1821:12
  #36 0x00005645aec356d9 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:247:16
  #37 0x00005645aec3503b clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:115:20
  #38 0x00005645aec3dca2 clang::Parser::ParseCompoundStatementBody(bool) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:1185:11
  #39 0x00005645aec3f3a4 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:2449:21
  #40 0x00005645aecbb1b9 clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:0:3
  #41 0x00005645aecbac69 clang::Parser::LexedMethod::ParseLexedMethodDefs() /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:275:1
  #42 0x00005645aecb9c5a clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:527:33
  #43 0x00005645aec6b83f clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:3629:5
  #44 0x00005645aec69a34 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:2103:7
  #45 0x00005645aeca0586 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseDecl.cpp:4225:23
  #46 0x00005645aec05f12 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) /home/rupprecht/src/llvm-project/clang/include/clang/Parse/Parser.h:2417:5
  #47 0x00005645aebff146 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /home/rupprecht/src/llvm-project/clang/lib/Parse/Parser.cpp:1120:7
  #48 0x00005645aebfec6f clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /home/rupprecht/src/llvm-project/clang/lib/Parse/Parser.cpp:1222:12
  #49 0x00005645aebfe53f clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) /home/rupprecht/src/llvm-project/clang/lib/Parse/Parser.cpp:1037:14
  #50 0x00005645aebfc406 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /home/rupprecht/src/llvm-project/clang/lib/Parse/Parser.cpp:743:12
  #51 0x00005645aebfbac0 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /home/rupprecht/src/llvm-project/clang/lib/Parse/Parser.cpp:591:8
  #52 0x00005645aebf6f48 clang::ParseAST(clang::Sema&, bool, bool) /home/rupprecht/src/llvm-project/clang/lib/Parse/ParseAST.cpp:161:15
  #53 0x00005645ac094226 clang::ASTFrontendAction::ExecuteAction() /home/rupprecht/src/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1164:1
  #54 0x00005645ac270234 clang::CodeGenAction::ExecuteAction() /home/rupprecht/src/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1170:5
  #55 0x00005645ac093c4c clang::FrontendAction::Execute() /home/rupprecht/src/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1059:7
  #56 0x00005645abfc5b5c clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/rupprecht/src/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1046:23
  #57 0x00005645ac25ad37 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/rupprecht/src/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:264:8
  #58 0x00005645a741eb00 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/rupprecht/src/llvm-project/clang/tools/driver/cc1_main.cpp:251:13
  #59 0x00005645a740ca55 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) /home/rupprecht/src/llvm-project/clang/tools/driver/driver.cpp:353:5
  #60 0x00005645abe88bd5 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1::operator()() const /home/rupprecht/src/llvm-project/clang/lib/Driver/Job.cpp:428:34
  #61 0x00005645abe88ba5 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1>(long) /home/rupprecht/src/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
  #62 0x00005645a992ab49 llvm::function_ref<void ()>::operator()() const /home/rupprecht/src/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
  #63 0x00005645aac00f9a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/rupprecht/src/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:434:3
  #64 0x00005645abe8838b clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/rupprecht/src/llvm-project/clang/lib/Driver/Job.cpp:428:7
  #65 0x00005645abe2890f clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/rupprecht/src/llvm-project/clang/lib/Driver/Compilation.cpp:199:15
  #66 0x00005645abe28b17 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/rupprecht/src/llvm-project/clang/lib/Driver/Compilation.cpp:253:13
  #67 0x00005645abe41d58 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/rupprecht/src/llvm-project/clang/lib/Driver/Driver.cpp:1817:7
  #68 0x00005645a740c4df clang_main(int, char**) /home/rupprecht/src/llvm-project/clang/tools/driver/driver.cpp:555:9


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136554/new/

https://reviews.llvm.org/D136554



More information about the cfe-commits mailing list