"caching potentially capturing/offset of allocation" crash
- Dominant language
- LLVM
- Stars
- 1.7k
- Forks
- 188
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 26
Description
I'm getting a crash when compiling a test program I wrote. The test is available at https://github.com/evouga/enzymetest and requires as a dependency this library: https://github.com/evouga/libshell/
Here is the error:
```
freeing without malloc %23 = load i8*, i8** %22, align 8, !tbaa !54
freeing without malloc %23 = load i8*, i8** %22, align 8, !tbaa !54
freeing without malloc %91 = load i8*, i8** %90, align 8, !tbaa !45
freeing without malloc %89 = load i8*, i8** %88, align 8, !tbaa !60
freeing without malloc %45 = load i8*, i8** %44, align 8, !tbaa !56
ld.lld: error: :0:0: in function preprocess__ZN8LibShell12ElasticShellINS_26MidedgeAngleSinFormulationEE13elasticEnergyERKNS_16MeshConnectivityERKN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEERKNS7_IdLin1ELi1ELi0ELin1ELi1EEERKNS_13MaterialModelIS1_EERKNS_9RestStateEiPSB_PSt6vectorINS6_7TripletIdiEESaISO_EE double (%"class.LibShell::MeshConnectivity"*, %"class.Eigen::Matrix.17"*, %"class.Eigen::Matrix.26"*, %"class.LibShell::MaterialModel"*, %"class.LibShell::MaterialModel"*, i32, %"class.Eigen::Matrix.26"*, %"class.std::vector"*): Enzyme: Cannot create nofree of instruction-created value: %128 = load double (%"class.LibShell::MaterialModel"*, %"class.LibShell::MeshConnectivity"*, %"class.Eigen::Matrix.17"*, %"class.LibShell::MaterialModel"*, i32, %"class.Eigen::Matrix.20"*, %"class.Eigen::Matrix.29"*)*, double (%"class.LibShell::MaterialModel"*, %"class.LibShell::MeshConnectivity"*, %"class.Eigen::Matrix.17"*, %"class.LibShell::MaterialModel"*, i32, %"class.Eigen::Matrix.20"*, %"class.Eigen::Matrix.29"*)** %126, align 8
freeing without malloc %229 = load %"class.Eigen::Triplet"*, %"class.Eigen::Triplet"** %107, align 8, !tbaa !59
ld.lld: error: :0:0: in function preprocess__ZN8LibShell12ElasticShellINS_26MidedgeAngleSinFormulationEE13elasticEnergyERKNS_16MeshConnectivityERKN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEERKNS7_IdLin1ELi1ELi0ELin1ELi1EEERKNS_13MaterialModelIS1_EERKNS_9RestStateEiPSB_PSt6vectorINS6_7TripletIdiEESaISO_EE double (%"class.LibShell::MeshConnectivity"*, %"class.Eigen::Matrix.17"*, %"class.Eigen::Matrix.26"*, %"class.LibShell::MaterialModel"*, %"class.LibShell::MaterialModel"*, i32, %"class.Eigen::Matrix.26"*, %"class.std::vector"*): Enzyme: Cannot create nofree of instruction-created value: %400 = load double (%"class.LibShell::MaterialModel"*, %"class.LibShell::MeshConnectivity"*, %"class.Eigen::Matrix.17"*, %"class.Eigen::Matrix.26"*, %"class.LibShell::MaterialModel"*, i32, %"class.Eigen::Matrix.66"*, %"class.Eigen::Matrix.76"*)*, double (%"class.LibShell::MaterialModel"*, %"class.LibShell::MeshConnectivity"*, %"class.Eigen::Matrix.17"*, %"class.Eigen::Matrix.26"*, %"class.LibShell::MaterialModel"*, i32, %"class.Eigen::Matrix.66"*, %"class.Eigen::Matrix.76"*)** %399, align 8
freeing without malloc %465 = load %"class.Eigen::Triplet"*, %"class.Eigen::Triplet"** %316, align 8, !tbaa !59
freeing without malloc %539 = load %"class.Eigen::Triplet"*, %"class.Eigen::Triplet"** %316, align 8, !tbaa !59
ld.lld: ../Enzyme/GradientUtils.cpp:9170: bool GradientUtils::needsCacheWholeAllocation(const llvm::Value*) const: Assertion `false && "caching potentially capturing/offset of allocation"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: /usr/lib/llvm-12/bin/ld.lld -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o libshellexample /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/10/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/10 -L/usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/usr/lib/x86_64-linux-gnu/../../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/10/../../.. -L/usr/lib/llvm-12/bin/../lib -L/lib -L/usr/lib -mllvm -load=/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so CMakeFiles/libshellexample.dir/main.cpp.o /u/evouga/projects/libshell/lib/liblibshell.a /usr/lib/x86_64-linux-gnu/libOpenGL.so libimguizmo.a libimgui.a _deps/glfw-build/src/libglfw3.a -lpthread /usr/lib/x86_64-linux-gnu/librt.so -lm _deps/glad-build/libglad.a -ldl -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/10/crtend.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crtn.o
1. Running pass 'Enzyme Pass' on module 'ld-temp.o'.
#0 0x00007f9baf0fcef3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xbd8ef3)
#1 0x00007f9baf0fb210 llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xbd7210)
#2 0x00007f9baf0fd55f (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xbd955f)
#3 0x00007f9bb3cf8420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f9bae02700b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#5 0x00007f9bae006859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
#6 0x00007f9bae006729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8
#7 0x00007f9bae006729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34
#8 0x00007f9bae017fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#9 0x00007f9badb49d5b GradientUtils::needsCacheWholeAllocation(llvm::Value const*) const (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0xb56d5b)
#10 0x00007f9bad95d8df AdjointGenerator::visitCallInst(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x96a8df)
#11 0x00007f9bad8da3a4 llvm::InstVisitor, void>::delegateCallInst(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x8e73a4)
#12 0x00007f9bad82d219 llvm::InstVisitor, void>::visitCall(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x83a219)
#13 0x00007f9bad81def5 llvm::InstVisitor, void>::visit(llvm::Instruction&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x82aef5)
#14 0x00007f9bad80f3cd llvm::InstVisitor, void>::visit(llvm::Instruction*) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x81c3cd)
#15 0x00007f9bad7ee466 EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (.localalias) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x7fb466)
#16 0x00007f9bad9f70a1 AdjointGenerator::recursivelyHandleSubfunction(llvm::CallInst&, llvm::Function*, std::vector > const&, bool, DIFFE_TYPE, bool) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0xa040a1)
#17 0x00007f9bad963892 AdjointGenerator::visitCallInst(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x970892)
#18 0x00007f9bad8da3a4 llvm::InstVisitor, void>::delegateCallInst(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x8e73a4)
#19 0x00007f9bad82d219 llvm::InstVisitor, void>::visitCall(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x83a219)
#20 0x00007f9bad81def5 llvm::InstVisitor, void>::visit(llvm::Instruction&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x82aef5)
#21 0x00007f9bad80f3cd llvm::InstVisitor, void>::visit(llvm::Instruction*) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x81c3cd)
#22 0x00007f9bad7ee466 EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (.localalias) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x7fb466)
#23 0x00007f9bad9f70a1 AdjointGenerator::recursivelyHandleSubfunction(llvm::CallInst&, llvm::Function*, std::vector > const&, bool, DIFFE_TYPE, bool) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0xa040a1)
#24 0x00007f9bad963892 AdjointGenerator::visitCallInst(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x970892)
#25 0x00007f9bad8da3a4 llvm::InstVisitor, void>::delegateCallInst(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x8e73a4)
#26 0x00007f9bad82d219 llvm::InstVisitor, void>::visitCall(llvm::CallInst&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x83a219)
#27 0x00007f9bad81def5 llvm::InstVisitor, void>::visit(llvm::Instruction&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x82aef5)
#28 0x00007f9bad80f3cd llvm::InstVisitor, void>::visit(llvm::Instruction*) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x81c3cd)
#29 0x00007f9bad7ee466 EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (.localalias) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x7fb466)
#30 0x00007f9bad779905 (anonymous namespace)::EnzymeBase::HandleAutoDiff(llvm::Instruction*, unsigned int, llvm::Value*, llvm::Type*, llvm::SmallVectorImpl&, std::map, std::allocator > > const&, std::vector > const&, llvm::Function*, DerivativeMode, (anonymous namespace)::EnzymeBase::Options&, bool, llvm::SmallVectorImpl&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x786905)
#31 0x00007f9bad77b4a4 (anonymous namespace)::EnzymeBase::HandleAutoDiffArguments(llvm::CallInst*, DerivativeMode, bool, llvm::SmallVectorImpl&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x7884a4)
#32 0x00007f9bad77f9e4 (anonymous namespace)::EnzymeBase::lowerEnzymeCalls(llvm::Function&, std::set, std::allocator >&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x78c9e4)
#33 0x00007f9bad780ba1 (anonymous namespace)::EnzymeBase::run(llvm::Module&) (/u/evouga/tools/enzyme/enzyme/build/Enzyme/LLDEnzyme-12.so+0x78dba1)
```
Here's my clang version:
```
Ubuntu clang version 12.0.0-3ubuntu1~20.04.5
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-12/bin
```
And here's my CMakeCache in case it's helpful:
[CMakeCache.txt](https://github.com/EnzymeAD/Enzyme/files/13340613/CMakeCache.txt)
Contributor guide
Assessment
This issue has not been assessed yet.