[PATCH] D129973: [clang] Pass FoundDecl to DeclRefExpr creator for operator overloads
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 4 02:39:13 PDT 2022
kadircet added a comment.
Reverting for @bgraur as he's having some issues with his commit access ATM. To sum up the reproducer attached by @joanahalili triggers a crash https://reviews.llvm.org/rG4e94f6653150511de434fa7e29b684ae7f0e52b6 with stack trace and error:
$ ~/repos/llvm/build/bin/clang -xc++ -c a.cc
a.cc:3:38: error: cannot compile this l-value expression yet
template <class c> void ad(c p1) { ab(d()(p1)); }
^~
Unexpected placeholder builtin type!
UNREACHABLE executed at /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenTypes.cpp:641!
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: /usr/local/google/home/kadircet/repos/llvm/build/bin/clang -xc++ -c a.cc
1. <eof> parser at end of file
2. Per-file LLVM IR generation
3. a.cc:3:27: Generating code for declaration 'b<f<l<int, int>::n>::j<l<int, int>::n>>::ad'
#0 0x00000000064fb563 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/Unix/Signals.inc:569:13
#1 0x00000000064f92fe llvm::sys::RunSignalHandlers() /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/Signals.cpp:104:18
#2 0x000000000645f823 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/CrashRecoveryContext.cpp:76:5
#3 0x000000000645f9de CrashRecoverySignalHandler(int) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/CrashRecoveryContext.cpp:390:1
#4 0x00007f8c235bf200 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12200)
#5 0x00007f8c2302c8a1 raise ./signal/../sysdeps/unix/sysv/linux/raise.c:50:1
#6 0x00007f8c23016546 abort ./stdlib/abort.c:81:7
#7 0x0000000006465531 (/usr/local/google/home/kadircet/repos/llvm/build/bin/clang+0x6465531)
#8 0x000000000689b09f (/usr/local/google/home/kadircet/repos/llvm/build/bin/clang+0x689b09f)
#9 0x00000000068be0f1 clang::CodeGen::CodeGenFunction::EmitUnsupportedLValue(clang::Expr const*, char const*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExpr.cpp:1250:22
#10 0x00000000068b4703 clang::CodeGen::CodeGenFunction::EmitLValue(clang::Expr const*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExpr.cpp:0:19
#11 0x00000000068d3fab isSimple /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGValue.h:265:41
#12 0x00000000068d3fab getPointer /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGValue.h:338:5
#13 0x00000000068d3fab clang::CodeGen::CodeGenFunction::EmitCallee(clang::Expr const*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExpr.cpp:5131:31
#14 0x00000000068d3c72 isBuiltin /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGCall.h:151:12
#15 0x00000000068d3c72 clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExpr.cpp:5014:14
#16 0x00000000069e0518 getInt /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/PointerIntPair.h:62:57
#17 0x00000000069e0518 isScalar /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGValue.h:54:37
#18 0x00000000069e0518 getScalarVal /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGValue.h:62:5
#19 0x00000000069e0518 (anonymous namespace)::ScalarExprEmitter::VisitCallExpr(clang::CallExpr const*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExprScalar.cpp:578:36
#20 0x00000000069e1338 Visit /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExprScalar.cpp:408:52
#21 0x00000000069e1338 (anonymous namespace)::ScalarExprEmitter::VisitExprWithCleanups(clang::ExprWithCleanups*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExprScalar.cpp:2447:14
#22 0x00000000069d1128 Visit /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExprScalar.cpp:408:52
#23 0x00000000069d1128 clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExprScalar.cpp:4874:8
#24 0x00000000068b3a47 PointerIntPair /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/PointerIntPair.h:49:12
#25 0x00000000068b3a47 RValue /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGValue.h:39:7
#26 0x00000000068b3a47 get /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGValue.h:90:12
#27 0x00000000068b3a47 clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExpr.cpp:217:12
#28 0x00000000068b39d1 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGExpr.cpp:206:1
#29 0x00000000068f2755 GetInsertBlock /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/IR/IRBuilder.h:173:47
#30 0x00000000068f2755 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGStmt.cpp:123:42
#31 0x00000000068ff680 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CGStmt.cpp:496:22
#32 0x00000000068e26fd clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenFunction.cpp:0:5
#33 0x00000000068e341e getLangOpts /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenFunction.h:1991:51
#34 0x00000000068e341e clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenFunction.cpp:1443:7
#35 0x0000000006844ca5 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenModule.cpp:5234:3
#36 0x000000000683d0cc clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenModule.cpp:0:9
#37 0x000000000682dea0 __normal_iterator /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_iterator.h:1027:20
#38 0x000000000682dea0 begin /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:821:16
#39 0x000000000682dea0 empty /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:1008:16
#40 0x000000000682dea0 clang::CodeGen::CodeGenModule::EmitDeferred() /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenModule.cpp:2675:26
#41 0x000000000682decc __normal_iterator /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_iterator.h:1027:20
#42 0x000000000682decc begin /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:821:16
#43 0x000000000682decc empty /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:1008:16
#44 0x000000000682decc clang::CodeGen::CodeGenModule::EmitDeferred() /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenModule.cpp:2677:7
#45 0x000000000682ba4a clang::CodeGen::CodeGenModule::Release() /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenModule.cpp:525:3
#46 0x0000000007169194 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/ModuleBuilder.cpp:287:11
#47 0x000000000716660e clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/CodeGen/CodeGenAction.cpp:306:13
#48 0x000000000842759a __normal_iterator /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_iterator.h:1027:20
#49 0x000000000842759a begin /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:812:16
#50 0x000000000842759a finalize<std::vector<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback> >, std::allocator<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback> > > > > /usr/local/google/home/kadircet/repos/llvm/clang/include/clang/Sema/TemplateInstCallback.h:54:16
#51 0x000000000842759a clang::ParseAST(clang::Sema&, bool, bool) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Parse/ParseAST.cpp:205:3
#52 0x000000000708bff0 clang::FrontendAction::Execute() /usr/local/google/home/kadircet/repos/llvm/clang/lib/Frontend/FrontendAction.cpp:1041:10
#53 0x0000000006ffd11f getPtr /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/Support/Error.h:271:42
#54 0x0000000006ffd11f operator bool /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/Support/Error.h:234:16
#55 0x0000000006ffd11f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /usr/local/google/home/kadircet/repos/llvm/clang/lib/Frontend/CompilerInstance.cpp:1035:23
#56 0x000000000715ff73 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /usr/local/google/home/kadircet/repos/llvm/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:266:25
#57 0x000000000409958a cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /usr/local/google/home/kadircet/repos/llvm/clang/tools/driver/cc1_main.cpp:250:15
#58 0x0000000004096e30 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) /usr/local/google/home/kadircet/repos/llvm/clang/tools/driver/driver.cpp:317:12
#59 0x0000000006e75bc2 operator() /usr/local/google/home/kadircet/repos/llvm/clang/lib/Driver/Job.cpp:407:30
#60 0x0000000006e75bc2 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::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
#61 0x000000000645f737 operator() /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#62 0x000000000645f737 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/CrashRecoveryContext.cpp:425:3
#63 0x0000000006e75600 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::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:407:7
#64 0x0000000006e37329 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:200:15
#65 0x0000000006e3760e 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:254:13
#66 0x0000000006e543c0 empty /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/SmallVector.h:73:47
#67 0x0000000006e543c0 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:1738:23
#68 0x000000000409644f clang_main(int, char**) /usr/local/google/home/kadircet/repos/llvm/clang/tools/driver/driver.cpp:513:21
#69 0x00007f8c230177fd __libc_start_main ./csu/../csu/libc-start.c:332:16
#70 0x00000000040938ba _start (/usr/local/google/home/kadircet/repos/llvm/build/bin/clang+0x40938ba)
Whereas the same code fragment at previous commit https://reviews.llvm.org/rG0538e5431afdb1fa05bdcedf70ee502ccfcd112a yields an diagnostics and crash free compile.
A little bit adjusted reproducer to get rid of warnings:
$ cat a.cc
template <class a> struct b {
template <class c> void ab(c);
template <class c> void ad(c p1) { ab(d()(p1)); }
a d();
};
template <typename e> struct f {
using aa = e;
template <class g> struct j {
g ag;
template <class... h> auto operator()(h... p1) -> decltype(ag(p1...));
};
using ai = b<j<aa>>;
template <class c> void ad(c p1) { i.ad(p1); }
ai i;
};
template <typename c, typename> struct l {
void k(const c &);
struct n {
int operator()(const c &) const;
};
using m = f<n>;
m aj;
};
template <typename c, typename al> void l<c, al>::k(const c &p1) { aj.ad(p1); }
template <typename c, typename al>
int l<c, al>::n::operator()(const c &) const {
return 0;
}
template class l<int, int>;
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D129973/new/
https://reviews.llvm.org/D129973
More information about the cfe-commits
mailing list