llvm / llvm/llvm-project

[Attributor] AAPointerInfo mistreats ptrtoaddr as pointer-preserving cast

Open
#221,852 0 comments 0 reactions 0 assignees View on GitHub
confirmed crash-on-valid llvm::Attributor
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.