kadircet wrote: hi folks!
this seems to be triggering crashes on some valid code, e.g: a.cc: ``` template <class a, class... b> bool c = __is_constructible(a, b...); struct d { int q : 1; }; struct i { virtual void g() { (void)c<d, int>; } }; i n; ``` ``` clang -xc++ -std=c++20 -fsyntax-only a.cc clang: /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/Support/Casting.h:662: decltype(auto) llvm::dyn_cast(From *) [To = clang::ParenExpr, From = clang::Expr]: Assertion `detail::isPresent(Val) && "dyn_cast on a non-existent value"' 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: ./clang -xc++ a.cc -fsyntax-only -std=c++20 1. <eof> parser at end of file 2. a.cc:3:6: instantiating variable definition 'c<d, int>' 3. a.cc:3:6: instantiating variable definition 'c<d, int>' #0 0x0000560886f8bd57 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/Unix/Signals.inc:723:13 #1 0x0000560886f8993e llvm::sys::RunSignalHandlers() /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/Signals.cpp:106:18 #2 0x0000560886ef3698 HandleCrash /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/CrashRecoveryContext.cpp:73:5 #3 0x0000560886ef3698 CrashRecoverySignalHandler(int) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/CrashRecoveryContext.cpp:390:51 #4 0x00007f1b0b05a510 (/lib/x86_64-linux-gnu/libc.so.6+0x3c510) #5 0x00007f1b0b0a80fc __pthread_kill_implementation ./nptl/./nptl/pthread_kill.c:44:76 #6 0x00007f1b0b05a472 raise ./signal/../sysdeps/posix/raise.c:27:6 #7 0x00007f1b0b0444b2 abort ./stdlib/./stdlib/abort.c:81:7 #8 0x00007f1b0b0443d5 _nl_load_domain ./intl/./intl/loadmsgcat.c:1177:9 #9 0x00007f1b0b0533a2 (/lib/x86_64-linux-gnu/libc.so.6+0x353a2) #10 0x0000560889b511f5 clang::IgnoreParensSingleStep(clang::Expr*) /usr/local/google/home/kadircet/repos/llvm/clang/include/clang/AST/IgnoreExpr.h:0:0 #11 0x000056088a369e5b IgnoreExprNodes<clang::Expr *(&)(clang::Expr *)> /usr/local/google/home/kadircet/repos/llvm/clang/include/clang/AST/IgnoreExpr.h:36:12 #12 0x000056088a369e5b clang::Expr::IgnoreParens() /usr/local/google/home/kadircet/repos/llvm/clang/lib/AST/Expr.cpp:3012:10 #13 0x00005608895e4285 IgnoreParens /usr/local/google/home/kadircet/repos/llvm/clang/include/clang/AST/Expr.h:892:38 #14 0x00005608895e4285 GetExprRange(clang::ASTContext&, clang::Expr const*, unsigned int, bool, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaChecking.cpp:13498:10 #15 0x00005608895e4341 GetExprRange(clang::ASTContext&, clang::Expr const*, unsigned int, bool, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaChecking.cpp:0:0 #16 0x00005608895e4341 GetExprRange(clang::ASTContext&, clang::Expr const*, unsigned int, bool, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaChecking.cpp:0:0 #17 0x00005608895d5970 AnalyzeBitFieldAssignment(clang::Sema&, clang::FieldDecl*, clang::Expr*, clang::SourceLocation) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaChecking.cpp:14337:11 #18 0x0000560889b37c84 getKind /usr/local/google/home/kadircet/repos/llvm/clang/include/clang/Sema/Initialization.h:441:39 #19 0x0000560889b37c84 clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaInit.cpp:9424:34 #20 0x0000560889b4ee9b TryOrBuildParenListInitialization(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::ArrayRef<clang::Expr*>, clang::InitializationSequence&, bool, clang::ActionResult<clang::Expr*, true>*)::$_12::operator()(clang::InitializedEntity const&, clang::InitializationKind const&, clang::Expr*, clang::Expr**) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaInit.cpp:0:0 #21 0x0000560889b3078b TryOrBuildParenListInitialization(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::ArrayRef<clang::Expr*>, clang::InitializationSequence&, bool, clang::ActionResult<clang::Expr*, true>*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaInit.cpp:0:14 #22 0x0000560889b35de0 clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaInit.cpp:9395:7 #23 0x0000560889a6787c EvaluateBooleanTypeTrait /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaExprCXX.cpp:5505:30 #24 0x0000560889a6787c clang::Sema::BuildTypeTrait(clang::TypeTrait, clang::SourceLocation, llvm::ArrayRef<clang::TypeSourceInfo*>, clang::SourceLocation) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaExprCXX.cpp:5634:19 #25 0x0000560889eac70e RebuildTypeTrait /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/TreeTransform.h:3393:22 #26 0x0000560889eac70e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTypeTraitExpr(clang::TypeTraitExpr*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/TreeTransform.h:12923:23 #27 0x0000560889e96bee clang::Sema::SubstInitializer(clang::Expr*, clang::MultiLevelTemplateArgumentList const&, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaTemplateInstantiate.cpp:4085:23 #28 0x0000560889eef9e7 clang::Sema::InstantiateVariableInitializer(clang::VarDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:5417:14 #29 0x0000560889ef5079 getLangOpts /usr/local/google/home/kadircet/repos/llvm/clang/include/clang/Sema/Sema.h:1676:51 #30 0x0000560889ef5079 clang::Sema::CompleteVarTemplateSpecializationDecl(clang::VarTemplateSpecializationDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:5254:7 #31 0x0000560889ef5703 clang::Sema::InstantiateVariableDefinition(clang::SourceLocation, clang::VarDecl*, bool, bool, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:0:11 #32 0x0000560889ef65f9 clang::Sema::PerformPendingInstantiations(bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:6466:3 #33 0x000056088950e895 ~TimeTraceScope /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/Support/TimeProfiler.h:155:9 #34 0x000056088950e895 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/Sema.cpp:1082:3 #35 0x000056088950f03c clang::Sema::ActOnEndOfTranslationUnit() /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/Sema.cpp:1123:9 #36 0x00005608893d236c clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Parse/Parser.cpp:0:13 #37 0x00005608893cce2e clang::ParseAST(clang::Sema&, bool, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Parse/ParseAST.cpp:162:5 #38 0x0000560887b57360 clang::FrontendAction::Execute() /usr/local/google/home/kadircet/repos/llvm/clang/lib/Frontend/FrontendAction.cpp:1074:10 #39 0x0000560887ac4d8f getPtr /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/Support/Error.h:276:42 #40 0x0000560887ac4d8f operator bool /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/Support/Error.h:239:16 #41 0x0000560887ac4d8f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Frontend/CompilerInstance.cpp:1045:23 #42 0x0000560887c3f8d7 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:272:25 #43 0x00005608849d9d99 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /usr/local/google/home/kadircet/repos/llvm/clang/tools/driver/cc1_main.cpp:294:15 #44 0x00005608849d60b1 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /usr/local/google/home/kadircet/repos/llvm/clang/tools/driver/driver.cpp:0:12 #45 0x0000560887922da9 operator() /usr/local/google/home/kadircet/repos/llvm/clang/lib/Driver/Job.cpp:440:30 #46 0x0000560887922da9 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) /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12 #47 0x0000560886ef33db operator() /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12 #48 0x0000560886ef33db llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/CrashRecoveryContext.cpp:426:3 #49 0x0000560887922490 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Driver/Job.cpp:440:7 #50 0x00005608878df438 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Driver/Compilation.cpp:199:15 #51 0x00005608878df6f7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&, bool) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Driver/Compilation.cpp:253:13 #52 0x00005608878ffd87 empty /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/SmallVector.h:94:46 #53 0x00005608878ffd87 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Driver/Driver.cpp:1884:23 #54 0x00005608849d534e clang_main(int, char**, llvm::ToolContext const&) /usr/local/google/home/kadircet/repos/llvm/clang/tools/driver/driver.cpp:542:21 #55 0x00005608849e6b41 main /usr/local/google/home/kadircet/repos/llvm/build/tools/clang/tools/driver/clang-driver.cpp:15:3 #56 0x00007f1b0b0456ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3 #57 0x00007f1b0b045785 call_init ./csu/../csu/libc-start.c:128:20 #58 0x00007f1b0b045785 __libc_start_main ./csu/../csu/libc-start.c:347:5 #59 0x00005608849d24a1 _start (./clang+0x58ca4a1) clang: error: clang frontend command failed with exit code 134 (use -v to see invocation) clang version 18.0.0 (g...@github.com:llvm/llvm-project.git 01263c6c6fb495a94fe0ccbb1420bb1ec8460748) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/local/google/home/kadircet/repos/tmp/clang_crash/. clang: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: clang: note: diagnostic msg: /tmp/a-7923c9.cpp clang: note: diagnostic msg: /tmp/a-7923c9.sh clang: note: diagnostic msg: ******************** ``` https://github.com/llvm/llvm-project/pull/69049 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits