[Attributor] AAPointerInfo mistreats ptrtoaddr as pointer-preserving cast
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
reproducer:
```llvm
; opt -passes=attributor %s
define void @foo() {
entry:
%0 = alloca i8
%1 = ptrtoaddr ptr %0 to i64
br label %exit
exit:
phi i64 [ %1, %entry ]
ret void
}
```
backtrace:
```
opt: /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/Support/Casting.h:572: decltype(auto) llvm::cast(From *) [To = llvm::PointerType, From = llvm::Type]: Assertion `isa(Val) && "cast() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: /usr/WS1/moyasarda1/gpu-kernel-versioning/install-tioga-testing/bin/opt -passes=attributor reproducer4.ll
1. Running pass "attributor" on module "reproducer4.ll"
#0 0x00000000046d43ab llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Support/Unix/Signals.inc:931:13
#1 0x00000000046d1c44 llvm::sys::RunSignalHandlers() /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Support/Signals.cpp:109:18
#2 0x00000000046d4de0 SignalHandler(int, siginfo_t*, void*) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Support/Unix/Signals.inc:474:38
#3 0x0000155555116990 __restore_rt (/lib64/libpthread.so.0+0x12990)
#4 0x0000155553b855af raise (/lib64/libc.so.6+0x4e5af)
#5 0x0000155553b58ee5 abort (/lib64/libc.so.6+0x21ee5)
#6 0x0000155553b58db9 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21db9)
#7 0x0000155553b7df06 (/lib64/libc.so.6+0x46f06)
#8 0x00000000006dfd3e llvm::Type::getContainedType(unsigned int) const /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/IR/Type.h:398:5
#9 0x00000000006dfd3e llvm::Type::getScalarType() const /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/IR/Type.h:370:14
#10 0x00000000006dfd3e llvm::Type::getPointerAddressSpace() const /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/IR/DerivedTypes.h:824:28
#11 0x00000000023ceb60 llvm::DataLayout::getIndexSizeInBits(unsigned int) const /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/IR/DataLayout.h:510:12
#12 0x00000000023ceb60 (anonymous namespace)::AAPointerInfoFloating::updateImpl(llvm::Attributor&)::$_0::operator()(llvm::Use const&, bool&) const /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:1679:14
#13 0x00000000023ceb60 bool llvm::function_ref::callback_fn<(anonymous namespace)::AAPointerInfoFloating::updateImpl(llvm::Attributor&)::$_0>(long, llvm::Use const&, bool&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#14 0x0000000002350a8c llvm::function_ref::operator()(llvm::Use const&, bool&) const /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#15 0x0000000002350a8c llvm::Attributor::checkForAllUses(llvm::function_ref, llvm::AbstractAttribute const&, llvm::Value const&, bool, llvm::DepClassTy, bool, llvm::function_ref) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:1926:10
#16 0x00000000023cae4f (anonymous namespace)::AAPointerInfoFloating::updateImpl(llvm::Attributor&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:0:0
#17 0x000000000234b547 llvm::AbstractAttribute::update(llvm::Attributor&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:1138:3
#18 0x000000000235467d llvm::Attributor::updateAA(llvm::AbstractAttribute&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:2759:13
#19 0x0000000000bdf8b6 llvm::AAPointerInfo const* llvm::Attributor::getOrCreateAAFor(llvm::IRPosition, llvm::AbstractAttribute const*, llvm::DepClassTy, bool, bool) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/Transforms/IPO/Attributor.h:1625:13
#20 0x00000000023de94b (anonymous namespace)::AAAllocationInfoImpl::updateImpl(llvm::Attributor&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:13517:10
#21 0x000000000234b547 llvm::AbstractAttribute::update(llvm::Attributor&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:1138:3
#22 0x000000000235467d llvm::Attributor::updateAA(llvm::AbstractAttribute&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:2759:13
#23 0x0000000002380147 llvm::AAAllocationInfo const* llvm::Attributor::getOrCreateAAFor(llvm::IRPosition, llvm::AbstractAttribute const*, llvm::DepClassTy, bool, bool) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/Transforms/IPO/Attributor.h:1625:13
#24 0x000000000237ffe0 bool llvm::function_ref::callback_fn(long, llvm::Instruction&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#25 0x000000000235cfc6 checkForAllInstructionsImpl(llvm::Attributor*, llvm::DenseMap*, llvm::DenseMapInfo, llvm::detail::DenseMapPair*>>&, llvm::function_ref, llvm::AbstractAttribute const*, llvm::AAIsDead const*, llvm::ArrayRef, bool&, bool, bool) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:0:0
#26 0x000000000235cfc6 llvm::Attributor::identifyDefaultAbstractAttributes(llvm::Function&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:3716:13
#27 0x000000000235fa80 runAttributorOnFunctions(llvm::InformationCache&, llvm::SetVector, llvm::DenseSet>, 0u>&, llvm::CallGraphUpdater&, llvm::AnalysisManager&, bool, bool) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:3947:20
#28 0x000000000235ef24 llvm::AttributorPass::run(llvm::Module&, llvm::AnalysisManager&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/lib/Transforms/IPO/Attributor.cpp:4107:7
#29 0x00000000022853ad llvm::detail::PassModel>::runImpl(llvm::detail::PassConcept>&, llvm::Module&, llvm::AnalysisManager&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/IR/PassManagerInternal.h:128:5
#30 0x00000000044c290b llvm::PassManager>::run(llvm::Module&, llvm::AnalysisManager&) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/IR/PassManagerImpl.h:80:8
#31 0x00000000004ae163 llvm::SmallPtrSetImplBase::~SmallPtrSetImplBase() /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/ADT/SmallPtrSet.h:91:9
#32 0x00000000004ae163 llvm::PreservedAnalyses::~PreservedAnalyses() /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/include/llvm/IR/Analysis.h:112:7
#33 0x00000000004ae163 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef, llvm::ArrayRef>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool, bool) /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/tools/opt/NewPMDriver.cpp:580:3
#34 0x00000000004a4181 optMain /usr/workspace/moyasarda1/gpu-kernel-versioning/llvm-project-testing/llvm/tools/opt/optdriver.cpp:0:10
#35 0x0000155553b71865 __libc_start_main (/lib64/libc.so.6+0x3a865)
#36 0x00000000004a145e _start (/usr/WS1/moyasarda1/gpu-kernel-versioning/install-tioga-testing/bin/opt+0x4a145e)
```
Contributor guide
Research direction
Start in llvm/lib/Transforms/IPO/AttributorAttributes.cpp, at AAPointerInfoFloating::updateImpl around the reported line 1679, and inspect how the Attributor handles ptrtoaddr uses. Run opt -passes=attributor on the supplied reproducer. Done means the reproducer no longer triggers the incompatible PointerType cast or crashes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 72/100