Open
Description
The following program triggers the compiler crash with the error "fatal error: error in backend: Invalid size request on a scalable vector.":
$ cat test.ii
typedef __SVInt64_t s_t;
void bar(s_t a);
void foo() {
s_t a;
bar(a);
}
$ clang -cc1 -triple aarch64-grtev4-linux-gnu -emit-obj -fsanitize=local-bounds -target-feature +sve2-aes test.ii
fatal error: error in backend: Invalid size request on a scalable vector.
Backtrace:
clang: /home/denik/storage/llvm-project/llvm/lib/Analysis/MemoryBuiltins.cpp:1142: llvm::SizeOffsetValue llvm::ObjectSizeOffsetEvaluator::visitAllocaInst(llvm::AllocaInst&): Assertion `I.isArrayAllocation()' 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: /home/denik/storage/llvm_build/bin/clang -cc1 -triple aarch64-grtev4-linux-gnu -emit-obj -fsanitize=local-bounds -target-feature +sve2-aes test.ii
1. <eof> parser at end of file
2. Optimizer
#0 0x00007fb376068e81 __interceptor_backtrace.part.0 /build/gcc-13-Hz7jz6/gcc-13-13.2.0/build/x86_64-linux-gnu/libsanitizer/asan/../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:4434:28
#1 0x000055ea2bc465c9 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/denik/storage/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
#2 0x000055ea2bc46928 PrintStackTraceSignalHandler(void*) /home/denik/storage/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
#3 0x000055ea2bc3ce7c llvm::sys::RunSignalHandlers() /home/denik/storage/llvm-project/llvm/lib/Support/Signals.cpp:105:20
#4 0x000055ea2bc3f55d SignalHandler(int) /home/denik/storage/llvm-project/llvm/lib/Support/Unix/Signals.inc:403:31
#5 0x00007fb37597b510 (/lib/x86_64-linux-gnu/libc.so.6+0x3c510)
#6 0x00007fb3759c916c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#7 0x00007fb37597b472 raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007fb3759654b2 abort ./stdlib/abort.c:81:7
#9 0x00007fb3759653d5 _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007fb3759743a2 (/lib/x86_64-linux-gnu/libc.so.6+0x353a2)
#11 0x000055ea27ed6b61 llvm::ObjectSizeOffsetEvaluator::visitAllocaInst(llvm::AllocaInst&) /home/denik/storage/llvm-project/llvm/lib/Analysis/MemoryBuiltins.cpp:1148:7
#12 0x000055ea27ef6f0c llvm::InstVisitor<llvm::ObjectSizeOffsetEvaluator, llvm::SizeOffsetValue>::visitAlloca(llvm::AllocaInst&) /home/denik/storage/llvm-project/llvm/include/llvm/IR/Instruction.def:171:1
#13 0x000055ea27ef6f0c llvm::InstVisitor<llvm::ObjectSizeOffsetEvaluator, llvm::SizeOffsetValue>::visit(llvm::Instruction&) /home/denik/storage/llvm-project/llvm/include/llvm/IR/Instruction.def:171:1
#14 0x000055ea27ee615f llvm::ObjectSizeOffsetEvaluator::compute_(llvm::Value*) /home/denik/storage/llvm-project/llvm/lib/Analysis/MemoryBuiltins.cpp:1117:19
#15 0x000055ea27eeac75 llvm::ObjectSizeOffsetEvaluator::compute(llvm::Value*) /home/denik/storage/llvm-project/llvm/lib/Analysis/MemoryBuiltins.cpp:1061:36
#16 0x000055ea3176b19a getBoundsCheckCond(llvm::Value*, llvm::Value*, llvm::DataLayout const&, llvm::TargetLibraryInfo&, llvm::ObjectSizeOffsetEvaluator&, llvm::IRBuilder<llvm::TargetFolder, llvm::IRBuilderDefau
ltInserter>&, llvm::ScalarEvolution&) /home/denik/storage/llvm-project/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp:64:51
#17 0x000055ea31772ae4 addBoundsChecking(llvm::Function&, llvm::TargetLibraryInfo&, llvm::ScalarEvolution&) /home/denik/storage/llvm-project/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp:161:32
#18 0x000055ea317756e5 llvm::BoundsCheckingPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/denik/storage/llvm-project/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp:229:3
#19 0x000055ea2c6578c7 llvm::detail::PassModel<llvm::Function, llvm::BoundsCheckingPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /hom
e/denik/storage/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:3
#20 0x000055ea2a4ba20c llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/denik/storage/llvm-project/llvm/include/llvm/IR/PassManager.h:228:20
#21 0x000055ea21ad9651 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/denik/storage/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:0
#22 0x000055ea2a49b0ba llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/denik/storage/llvm-project/llvm/lib/IR/PassManager.cpp:128:19
#23 0x000055ea21adafcb llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/denik/storage/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:0
#24 0x000055ea2a4b6bae llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/denik/storage/llvm-project/llvm/include/llvm/IR/PassManager.h:228:20
#25 0x000055ea2c647c14 llvm::SmallPtrSetImplBase::isSmall() const /home/denik/storage/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:196:33
#26 0x000055ea2c647c14 llvm::SmallPtrSetImplBase::~SmallPtrSetImplBase() /home/denik/storage/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:84:17
#27 0x000055ea2c647c14 llvm::SmallPtrSetImpl<llvm::AnalysisKey*>::~SmallPtrSetImpl() /home/denik/storage/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:321:7
#28 0x000055ea2c647c14 llvm::SmallPtrSet<llvm::AnalysisKey*, 2u>::~SmallPtrSet() /home/denik/storage/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:427:7
#29 0x000055ea2c647c14 llvm::PreservedAnalyses::~PreservedAnalyses() /home/denik/storage/llvm-project/llvm/include/llvm/IR/Analysis.h:109:7
#30 0x000055ea2c647c14 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) /home/denik/storage/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1133:12
#31 0x000055ea2c64ce37 RunCodegenPipeline /home/denik/storage/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1143:23
#32 0x000055ea2c64ce37 EmitAssembly /home/denik/storage/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1199:21
#33 0x000055ea2c64ce37 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/denik/storage/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1360:25
#34 0x000055ea2de8ff90 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /home/denik/storage/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:391:20
#35 0x000055ea353a5c7a void clang::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>>>>>(std::vector<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>, std::allocator<std::unique_ptr<clang::TemplateInstantiationCallback, std::default_delete<clang::TemplateInstantiationCallback>>>>&, clang::Sema const&) /home/denik/storage/llvm-project/clang/include/clang/Sema/TemplateInstCallback.h:54:3
#36 0x000055ea353a5c7a clang::ParseAST(clang::Sema&, bool, bool) /home/denik/storage/llvm-project/clang/lib/Parse/ParseAST.cpp:183:11
#37 0x000055ea2e974b13 clang::ASTFrontendAction::ExecuteAction() /home/denik/storage/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1191:1
#38 0x000055ea2de8ad4c clang::CodeGenAction::ExecuteAction() /home/denik/storage/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1180:37
#39 0x000055ea2e97d4e7 clang::FrontendAction::Execute() /home/denik/storage/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1075:21
#40 0x000055ea2e70ddce llvm::Error::getPtr() const /home/denik/storage/llvm-project/llvm/include/llvm/Support/Error.h:276:42
#41 0x000055ea2e70ddce llvm::Error::operator bool() /home/denik/storage/llvm-project/llvm/include/llvm/Support/Error.h:239:22
#42 0x000055ea2e70ddce clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/denik/storage/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1062:42
#43 0x000055ea2ed3804f clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/denik/storage/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:278:38
#44 0x000055ea20af7188 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/denik/storage/llvm-project/clang/tools/driver/cc1_main.cpp:232:40
#45 0x000055ea20ad7620 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/denik/storage/llvm-project/clang/tools/driver/driver.cpp:215:20
#46 0x000055ea20aded50 clang_main(int, char**, llvm::ToolContext const&) /home/denik/storage/llvm-project/clang/tools/driver/driver.cpp:256:26
#47 0x000055ea20b32e0b main /home/denik/storage/llvm_build/tools/clang/tools/driver/clang-driver.cpp:17:20
#48 0x00007fb3759666ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#49 0x00007fb375966785 call_init ./csu/../csu/libc-start.c:128:20
#50 0x00007fb375966785 __libc_start_main ./csu/../csu/libc-start.c:347:5
#51 0x000055ea20ad65a1 _start (/home/denik/storage/llvm_build/bin/clang+++0x3fc95a1)