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

    <tr>
        <th>Summary</th>
        <td>
            [AVR] clang crashes with fatal error on reading object from flash address_space
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    Compile with `-target avr -S -Os -mmcu=atmega2560` the following test case:
```c++
typedef struct { char a, b, c[7]; } abc_t;

#ifdef __clang__
#define __flash __attribute__((__address_space__(1)))
#endif

#define T abc_t

T get_T (const __flash T *p)
{
    return *p;
}

void copy_T (const __flash T *p, T *dest)
{
    *dest = *p;
}
```

```
fatal error: error in backend: cannot lower memory intrinsic in address space 1
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang-16 --target=avr foo.c -S -Os -mmcu=atmega2560
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'foo.c'.
4.      Running pass 'AVR DAG->DAG Instruction Selection' on function '@get_T'
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  libLLVM-16.so.1 0x00007fad07a4e326 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 54
1  libLLVM-16.so.1    0x00007fad07a4c460 llvm::sys::RunSignalHandlers() + 80
2  libLLVM-16.so.1    0x00007fad07a4d9c4 llvm::sys::CleanupOnSignal(unsigned long) + 244
3  libLLVM-16.so.1 0x00007fad0798c90e
4  libLLVM-16.so.1    0x00007fad0798c8cb
5 libLLVM-16.so.1    0x00007fad07a48d67 llvm::sys::Process::Exit(int, bool) + 39
6  clang-16           0x00005610113c32b4
7  libLLVM-16.so.1 0x00007fad0799a3fb llvm::report_fatal_error(llvm::Twine const&, bool) + 299
8  libLLVM-16.so.1    0x00007fad0820924c llvm::SelectionDAG::getMemcpy(llvm::SDValue, llvm::SDLoc const&, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::Align, bool, bool, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo, llvm::AAMDNodes const&, llvm::AAResults*) + 2348
9  libLLVM-16.so.1    0x00007fad081cb4ee llvm::SelectionDAGBuilder::visitIntrinsicCall(llvm::CallInst const&, unsigned int) + 29710
10 libLLVM-16.so.1    0x00007fad0819d4cb llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) + 459
11 libLLVM-16.so.1    0x00007fad0822fee6 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) + 326
12 libLLVM-16.so.1 0x00007fad0822f987 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 5047
13 libLLVM-16.so.1    0x00007fad0822d9b1 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 1825
14 libLLVM-16.so.1    0x00007fad07dd1c2b llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 635
15 libLLVM-16.so.1    0x00007fad07b845ad llvm::FPPassManager::runOnFunction(llvm::Function&) + 653
16 libLLVM-16.so.1    0x00007fad07b8a203 llvm::FPPassManager::runOnModule(llvm::Module&) + 51
17 libLLVM-16.so.1 0x00007fad07b84c65 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 965
18 libclang-cpp.so.16 0x00007fad0fac8c32 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) + 4034
19 libclang-cpp.so.16 0x00007fad0fe2514f
20 libclang-cpp.so.16 0x00007fad0ebaa832 clang::ParseAST(clang::Sema&, bool, bool) + 850
21 libclang-cpp.so.16 0x00007fad107c8a75 clang::FrontendAction::Execute() + 85
22 libclang-cpp.so.16 0x00007fad107465e4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 724
23 libclang-cpp.so.16 0x00007fad10840d94 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 660
24 clang-16           0x00005610113c2c4e cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2302
25 clang-16           0x00005610113bffb0
26 libclang-cpp.so.16 0x00007fad10425f42
27 libLLVM-16.so.1 0x00007fad0798c8ac llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 140
28 libclang-cpp.so.16 0x00007fad10425663 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const + 355
29 libclang-cpp.so.16 0x00007fad103f0e12 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 866
30 libclang-cpp.so.16 0x00007fad103f106e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 142
31 libclang-cpp.so.16 0x00007fad1040b89d clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 349
32 clang-16           0x00005610113bf665 clang_main(int, char**) + 11541
33 libc.so.6          0x00007fad06567d90
34 libc.so.6 0x00007fad06567e40 __libc_start_main + 128
35 clang-16 0x00005610113bc60e _start + 46
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Ubuntu clang version 16.0.0 (++20230118052744+29d25f9e9a4c-1~exp1~20230118172840.512)
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWU1zpDjS_jX4orADxPfBB1xl9_SE_bbD9tsRuxdCSElZ0yCxkqi29zC_fUMgqqD8Qc8cNrajw8ZSSvkoP55MAdGa7wTApRdfefH2jPTmWapL3SkuDChdnVWSvV5uZNvxBtBPbp6Rl_jnhqgdGET2Cp0_ovNvGp23Le29cEtMCzuC48T3Eh-ZZ0C1bBr5k4sdMqANokSDFxaev_X8whvEvMSnHr6y_4dR89oBgxppo3pqkJdeIfpMFCIe3qDK_qBefJV68dYLr5CXbhGpaGm80K13P3HIa7tNWdKGiF1ZHsYZ1FwAKsu6IfoZlSUxRvGqN1CWHs48nJUlYUyB1qXuCB2HAw_n7v-0EQjG6xOlbvMnB2o2-YR2YMon5OGMSqHNAYAdKrrjxqk7CEIIKTC9EqPA4YDpdr7vXnKGqOxeP9t7Mz4x0OZ9RW4SeeH2I22TtxYnXg7WxJAGgVJSeWExPiAuUEXoDxDMjlEihDSokT9BoRZaqV4RF0ZxoTm1ss70aDA9CsaN72-vi8drpPuq5QYRVPU7pKCTyiAj0bMxnbZhhW88fLPj5rmvLqhsPXzTNPvp13mn5B9AjYdvuNY9aA_fICIY4oI2PYMhXqmyZrN4jSIUrOU6BZ2SFLQGhrTs1ThsVxKtJeXEAEOqF0hTxTtzMUJ-NIT-QKxvu0PA-xeen98ruVOkRUTt-haE0YNVbIyeBwk6d9llk2mvUC3lBf0ky4ZtA7utF25A1l54jTqiNChEDALBkKxRzRsYJbGV3EgGaAcCFDFcinEmtDMPvRA2VTuiNfJwetMLakXQvR24I4LsQHk4RVKgVrK-ASs1YPRw6s4dvbdT8f0BbYsv5154vS2-oK9izG679yM0MDy5jetJqYdTL_KHpLGPJ0Yd6Ej2BunXtpINEqQFqyoDoXsF6FX26JnsAQ2uH4X4v2EIx1fZK3RfPP2GpEIazOB5EHuupLAuQXuiLNPd3n6_Kx__cXf17fbrP68fSrtkIDaJOsnFEHt8SKiDhxFqeGXXnQfJhZYXAfJffN_305owPyURhDgZINklYaFf9fhwbzl3ON3TGHfZUUiRn6XURgFpPZzY2OPCakUevkJx5ILgrWaETpTTKPHfU_7Qi0e-E6T5jQjWgNIDDY77Zy7I8C_sz3Iavbf_pgEi-u6b0-LhrBdD6WGokWI3qcKRO0v4uRXzjOa-i-hoFVae0YxWo3S8foaMJen7DhooYPzj-sW6PRvcsEGVlM10htCRa4KOOX38N6qKk8APgpCGuHIHTlcOnJOwrmaoRuorB7otR7qdB8zTT1uDhkrgAmYOEecOY7Zmuwz7OY7oTPEhWbfFl3FkB-YOWtq9LhA8br-Tph94cj54K-kC1uqCXx0sGr4Tx4O-_X0UvSP0mQu4l0OT81XU8q_NF8Xd9v8kA_3BSYriAXTfGO3h4mDyMMpGm-erNg9oFQF8YPOrnjcM1Dix55qbr1Pt3JCmWfjADliiXeA8JN6MQnCeBlMp8Vfh5Syi1S_DWyCa0_4R1Agiil1UBsFqVOIaIPkAwtdHaOajV0RzetVI-mMBhTdcm5IbWwRts7I5nWJgCHc7CcmglJ3VoBeiswNZ49ak0bB4sM2ZF14vxozqwY39r-EZs-XgkxAnzif4M36yDsmz9BcdUjTN0Sd64ZRDv3EaHLEfuQYgCNejg-VVsApG9eKbcLk-6V2AeTN3QBNkOHZoorWCwlhAcfWWXqZtbWc1A_QukncgJOGEYLWkVVkUEzZDcHNvlU7d3N_QHYdOd7Kum2A__AXdd0M3ubS_GzoGgbsLBOmnxbLKIprEM50N7Ah9dVX8qP1r2x1D4XPNeTJZO7Oqx8JOu25Qnsy114RmNMRj7Xe9QsvN1Xj_-dabrreUOJvecrITUhtO9bXYcQGOqGcivwFhoB6BKPr8bcz6BafPRG1v_wXEitTTcMVYEbolYveeyCyxbOXZPUB9UkCd-YqTDZ0RigM9acPGmV7wf_VQdmZJfLbv7X4qbqCcut_ZIgY16RtLjA0YWFkYXg8M50qNH05Nc77mT8BxELlLPvZXpKEiJFt6_95exorHp6XTH6Eli85s2aFl8dR0B59rDPyUZiSN5xpvlBTmaGfXrwLtDczbehfRGK9qiJIYomWQDS-ElK02RFBY6Jjcm30M6ZhYKXaOwOEajCzyWb6A4RQe0ewlJW-Vv0F7bMuS6QaNo_VuHdMIEKVB2RK-5ItCKfJq0yDcDG-qXLYUrqgux6YiPG8OfexgxKswqrquJtDJms0iHNfRtPfnrGlvSWTe6W8U0c8PQOUe1OvG-u_FHG-LpIZm2fFP1_ZSDYYY3kqN8TbLvCCasK8Q6YA9ScK5v5ni-6lobDbBRrYtEew0wN91y4E0xqaJNAu6OPKYo4kZy5QlfXkJgvGPyvYtllK4xTQ4eyFsB0qjCDd6mj7ZjjSNDdKhw5vmrUhxpIAhLsa3eEMPFk-ZusJVgR_WPgT4Q5MNeUDekMJkx0XSnCy0Ah_ViU9Ei5Pb5_FUWeI6y3CFU-2pAj-Bv3qq32WlPz7S77K65Sc3o1k8tKRpvgM10jUJx_jpCLeucxf_X7WCc_IHtgimFA1X2T7yqyxnH-ndzp4X5PgOK35kw_-iLdwdI3L3vqlufkp-SeIocmLhSfuQisWMVYMgjlzDGI7FxdozOd15YL8kTlKWO2oKo5n0iRBEPipLO11qQ5QZUIzqsLvghzMOX4KniQ9oXDe2IS4FJssd35sPI6h2VRNRZ8Oa8AbY-B0GXrgNXwYo9S3P9hrQ-R4ZiTQA4rNa6Mz7_1UvTO-23oPS9p4VJBf-hT_y9JWHr7CPQz8IMj_GaRTZgZzhuM4hJxE9D_6Ely74cxIKUpxF_kUc4OMnheXngDN2GbI8zMkZXAZJGoV5FMX52fNlnDNGmTV6EPkJjQhhVZJDGKeUpVnun_HLUQvGQRhGQX4BNMIB0CqlVU1ZEHqRDy3hzYUN1QupdmfDO_3LxMd-fNaQCho9fddSl8M74KrfaS_y7W1aH5cZbprhC1jx_cGLt85Aw2cA0KOtZ181kBRIAWFc7JCs_gBqrJtaNH5tWXw1OutVc_n3v0wMB_lPAAAA___2QUQU">