<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/87856>87856</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [attributor] Crash on `null_pointer_is_valid` function
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          lanza
      </td>
    </tr>
</table>

<pre>
    With

```
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-none-linux-android28"

; Function Attrs: null_pointer_is_valid
define i64 @foo() #0 {
  call fastcc void @bar(ptr null)
  ret i64 0
}

define fastcc void @bar(ptr %0) {
  store i16 0, ptr %0, align 2
  ret void
}

attributes #0 = { null_pointer_is_valid }
```

and running

```
opt -passes=attributor file.ll
```

we crash with

```
opt: llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:5901: virtual ChangeStatus (anonymous namespace)::AANoCaptureImpl::updateImpl(Attributor &): Assertion `F && "Expected a function!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: opt -passes=attributor reduced.ll
 #0 0x000000000165bf38 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (llvm-project/build/Release/bin/opt+0x165bf38)
 #1 0x0000000001659a40 llvm::sys::RunSignalHandlers() (llvm-project/build/Release/bin/opt+0x1659a40)
 #2 0x000000000165c938 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f3ec923e6f0 __restore_rt (/lib64/libc.so.6+0x3e6f0)
 #4 0x00007f3ec928b94c __pthread_kill_implementation (/lib64/libc.so.6+0x8b94c)
 #5 0x00007f3ec923e646 gsignal (/lib64/libc.so.6+0x3e646)
 #6 0x00007f3ec92287f3 abort (/lib64/libc.so.6+0x287f3)
 #7 0x00007f3ec922871b _nl_load_domain.cold (/lib64/libc.so.6+0x2871b)
 #8 0x00007f3ec9237386 (/lib64/libc.so.6+0x37386)
 #9 0x0000000002f2a65b (anonymous namespace)::AANoCaptureImpl::updateImpl(llvm::Attributor&) AttributorAttributes.cpp:0:0
#10 0x0000000002ec8492 llvm::AbstractAttribute::update(llvm::Attributor&) (llvm-project/build/Release/bin/opt+0x2ec8492)
#11 0x0000000002ed3b83 llvm::Attributor::updateAA(llvm::AbstractAttribute&) (llvm-project/build/Release/bin/opt+0x2ed3b83)
#12 0x0000000002eec289 llvm::AANoCapture const* llvm::Attributor::getOrCreateAAFor<llvm::AANoCapture>(llvm::IRPosition, llvm::AbstractAttribute const*, llvm::DepClassTy, bool, bool) Attributor.cpp:0:0
#13 0x0000000002f1ab57 (anonymous namespace)::AANoAliasCallSiteArgument::updateImpl(llvm::Attributor&) AttributorAttributes.cpp:0:0
#14 0x0000000002ec8492 llvm::AbstractAttribute::update(llvm::Attributor&) (llvm-project/build/Release/bin/opt+0x2ec8492)
#15 0x0000000002ed3b83 llvm::Attributor::updateAA(llvm::AbstractAttribute&) (llvm-project/build/Release/bin/opt+0x2ed3b83)
#16 0x0000000002efba19 llvm::AANoAlias const* llvm::Attributor::getOrCreateAAFor<llvm::AANoAlias>(llvm::IRPosition, llvm::AbstractAttribute const*, llvm::DepClassTy, bool, bool) Attributor.cpp:0:0
#17 0x0000000002ede880 void llvm::Attributor::checkAndQueryIRAttr<(llvm::Attribute::AttrKind)20, llvm::AANoAlias>(llvm::IRPosition const&, llvm::AttributeSet) (llvm-project/build/Release/bin/opt+0x2ede880)
#18 0x0000000002edd545 llvm::Attributor::identifyDefaultAbstractAttributes(llvm::Function&) (llvm-project/build/Release/bin/opt+0x2edd545)
#19 0x0000000002ee0800 runAttributorOnFunctions(llvm::InformationCache&, llvm::SetVector<llvm::Function*, llvm::SmallVector<llvm::Function*, 0u>, llvm::DenseSet<llvm::Function*, llvm::DenseMapInfo<llvm::Function*, void>>, 0u>&, llvm::AnalysisGetter&, llvm::CallGraphUpdater&, bool, bool) Attributor.cpp:0:0
#20 0x0000000002edfc41 llvm::AttributorPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (llvm-project/build/Release/bin/opt+0x2edfc41)
#21 0x0000000002b6fcdd llvm::detail::PassModel<llvm::Module, llvm::AttributorPass, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
#22 0x0000000001853e56 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (llvm-project/build/Release/bin/opt+0x1853e56)
#23 0x0000000002afaa4b llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (llvm-project/build/Release/bin/opt+0x2afaa4b)
#24 0x0000000001622f36 optMain (llvm-project/build/Release/bin/opt+0x1622f36)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWF9z4jgS_zTiRQVly_8feHBI2Evd5iYX5vYeKdmSQTdCcknyzHCf_kqyAQsImWVvqiYFOJZb3b_u_qktNdaabQSlc5A8gORxgjuzlWrOsfgvnlSS7Of_ZmYLgkcQlMNvGgwfd2uw2lADCTaY473sDATRIwQI0ekORCWdshxEpf1GaMrCFESl-7F3aQyiMo2nLERWIET5VESoH1vZMYQ8I0axltODAYxVvU3jqZCCTjkT3fcpFkRJRkYzh9_oAS47URsmBSyNURpEJRQd5-tWMmGoWjO9_oo5I_0EQhsmKGRpDEEcNFICq7OAAEUBBNlDLwVhjTmHDdamruFXyYiVrrACKG-NcgYAKg7CihqncYgcyB7HGAeT7yoDKAkchJN1baSikIUpDABawJPUAmLONgKisWmr8qplbIxiVWeoHvyz8c0erscHnib7RBh0CQJVJwQTmxukka2B0xZrTTWIHg_2pYIN43TG-Q0D3yisFdZb-O02L2VrbI45_7qbtkr-h9YGoKW9tRdWAbT8rLDQjVQ7DdDy-fUTQMvyCKU8BmVWty2IyqQIQqvxK1Omwxwutlhs6Mpg09m45VhIsd_JTkOBd1S3uKY291EJorIs_yEXuDWdos-7lveDXUuw6e9RfjIMAUr7ibDUmirHWZAGy_5Baqn_9L2ltaEEYtgMtAYotKRHGWww45TM-jC8_v5Urp6g7qodMxDDqttARVupDDQSbo1p7VIAaAnQcsPMtqtmtdyNIuXHj2ndURsuaBPNRM07QqHZHpJS4fqLUbimg_mVwfUXSLqdjWA_FMyg-3tVcqPwDmK16XZUGLck3yWGoqSrKTlyo2dq8D04_IVpUjVR7hLex1fvdf_Pq2LCOCSflctKfhJS-NtaaqMo3rnwLiATpl_p-ZnvVcc4AWj5RjnFmtoRJgBaWqahh-D7gOC04AGKwjOIBY6DaxDfOrFiG4H537AgnCp9rDd3oLBGPBToDEVdRDn07AGUD373wwfSB-57VBQNirImonWBIpo2AVyvFXWVaK0MdLjt-krj_lrPtJylDpoT94DFvr68KuIartet2SqKyfoL43zNdi2nliC4Xwk3DLj5noHkAnCcwo12Pn6ENU49VamvCuVZE0FcyQ-cdnKeouxCUVjBteBrLjFZE7nDTMxqyclHesPK05uf-ZpFeXrbRyvhqSjGREENwmlS_fXaduL7qcr1RQ7eqLcj6tmF5C12ROs8LtBoJZWVtnXHHNWMcdzG8OfX2GD-GDqLL_TxkajKI3jV6ghYWfrQLpy4H6ED4CFEPkJao7wYIzzlEdZSaANQecOBDTWf1EJR58XSji6u6gLRk-fj89ur1Kx_Yy1uJfAIwpd7pO2CY60_7-14JSU_Xcd8us6iyCd4iKsk-xGCl5xhvcCcr5ih5fDG-llUj39xqie_PNVTH2FT4fCc6i6j_xeiO02_Fs2zswzRPA_6I8X7ftZbWn8pBflnR9X--c0-BtHiKp_o6fbvTBCAChScuflxXA6Op2czDzZW9M592OCvR4j8LCAkiZMbsWCECsOa_SNtcMfNRdK059PyuAW_n8IWkIe4OKvWQR4E9mR1gvpJHAz7cJ6FPdO43dIC11t6EeIVNX_Q2pxR-eTFGRVXO8z5xxOCzuXaJ7HQLo8_ZMdJv-DW4r81w51jo6fB2mD2nEUC871m-jdqDFUXj20l_03hdvsvV5sOAn9ymaGzPQlp6ji8yqpXrIeNvuqEl6wXSTp-maID_hcs8Ib6cR-mDF7fyTcLdcw35O9fqrSpybhaEGowGzZ31psXSSi_BuvqYh4icIeL9vOT4mYhPdhIUfXKWsqZeOeFjPzzU55ENElHRl083jf4a3l9x4myd9hji7-Pwg3GcTUCpDphg3IIq-fDyigmNm-08X14x7XPrvP3guut01Nee_o7qxRWe1s3-m3YuZSU_FNn2s4sGb-i5C89fsedUim8t6PjXLiY8G7DxEWpHMlrQ_qxY2snWvTtwHEYR-w9NIyeLrTK1qyNLWburveif2O_L_UHVaxhVB3k_KL4o9e7ylLPI49osd-6QKiJUihb84KZuKs74jScTByahhMyj0gRFXhC52EWoigtijSZbOdZ1UQVzbIir8I8RlmWVXWW13Ue0KyK62jC5ihAcRAHaYDCAiWzPCEkK0gQJw2JmygEcUB3mPGZxTqTajNxXbR5nuVJOuG4oly79jtCgn6D7iFACCSPEzV3_lXdRoM44EwbfdJimOGub39qk4HkES5cI67vGV7vcKfBsWs46RSf398FdC78LwAA__-XiU6z">