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

    <tr>
        <th>Summary</th>
        <td>
            Crash on -O0 when naked C++ function has non-trivial return type
        </td>
    </tr>

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

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

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

<pre>
    It does work in GCC.

```
struct TestType {
        // Implementing any one of these functions causes clang to crash with -O0.
        // Explicitly deleting both the copy and the move constructor also causes a crash.
        TestType(const TestType& other) { }
        TestType(TestType&& other) { }
        ~TestType() { }
};

__attribute__((naked))
TestType testFunc() { }
```

`clang++ -O0` results in:
```
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: /usr/bin/clang++ -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name clang_crash_test.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/home/user/ClangCrash -resource-dir /usr/lib/clang/17 -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1 -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/x86_64-pc-linux-gnu -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/backward -internal-isystem /usr/lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../x86_64-pc-linux-gnu/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O0 -fdeprecated-macro -fdebug-compilation-dir=/home/user/ClangCrash -ferror-limit 19 -stack-protector 2 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/clang_crash_test-6a4591.o -x c++ clang_crash_test.cpp
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'clang_crash_test.cpp'.
4.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@_Z8testFuncv'
 #0 0x00007ff014f75933 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/libLLVM-17.so+0x775933)
 #1 0x00007ff014f72bcf llvm::sys::RunSignalHandlers() (/usr/lib/libLLVM-17.so+0x772bcf)
 #2 0x00007ff014f72d1d (/usr/lib/libLLVM-17.so+0x772d1d)
 #3 0x00007ff01425a770 (/usr/lib/libc.so.6+0x3c770)
 #4 0x00007ff015aac86c llvm::SDNode::print_details(llvm::raw_ostream&, llvm::SelectionDAG const*) const (/usr/lib/libLLVM-17.so+0x12ac86c)
 #5 0x00007ff015aad5c4 llvm::SDNode::print(llvm::raw_ostream&, llvm::SelectionDAG const*) const (/usr/lib/libLLVM-17.so+0x12ad5c4)
 #6 0x00007ff015aad8c4 llvm::SDNode::printrFull(llvm::raw_ostream&, llvm::SelectionDAG const*) const (/usr/lib/libLLVM-17.so+0x12ad8c4)
 #7 0x00007ff015ab8425 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/usr/lib/libLLVM-17.so+0x12b8425)
 #8 0x00007ff015abcca9 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/usr/lib/libLLVM-17.so+0x12bcca9)
 #9 0x00007ff018d50e58 (/usr/lib/libLLVM-17.so+0x4550e58)
#10 0x00007ff015ab4abc llvm::SelectionDAGISel::DoInstructionSelection() (/usr/lib/libLLVM-17.so+0x12b4abc)
#11 0x00007ff015abfb5c llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/usr/lib/libLLVM-17.so+0x12bfb5c)
#12 0x00007ff015ac2e5e llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/usr/lib/libLLVM-17.so+0x12c2e5e)
#13 0x00007ff015ac4a6e (/usr/lib/libLLVM-17.so+0x12c4a6e)
#14 0x00007ff018d58367 (/usr/lib/libLLVM-17.so+0x4558367)
#15 0x00007ff0154790a5 (/usr/lib/libLLVM-17.so+0xc790a5)
#16 0x00007ff0151130d9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/libLLVM-17.so+0x9130d9)
#17 0x00007ff015113424 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/libLLVM-17.so+0x913424)
#18 0x00007ff015113dac llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/libLLVM-17.so+0x913dac)
#19 0x00007ff01dd9d43b clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/usr/lib/libclang-cpp.so.17+0x139d43b)
#20 0x00007ff01e103878 (/usr/lib/libclang-cpp.so.17+0x1703878)
#21 0x00007ff01cefbdf2 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/libclang-cpp.so.17+0x4fbdf2)
#22 0x00007ff01e7c44f9 clang::FrontendAction::Execute() (/usr/lib/libclang-cpp.so.17+0x1dc44f9)
#23 0x00007ff01e7b0df7 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/libclang-cpp.so.17+0x1db0df7)
#24 0x00007ff01e893c92 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/libclang-cpp.so.17+0x1e93c92)
#25 0x000063ac962c1c18 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang+++0xec18)
#26 0x000063ac962c710f (/usr/bin/clang+++0x1410f)
#27 0x000063ac962c7c2e clang_main(int, char**, llvm::ToolContext const&) (/usr/bin/clang+++0x14c2e)
#28 0x000063ac962bdd54 main (/usr/bin/clang+++0xad54)
#29 0x00007ff014243cd0 (/usr/lib/libc.so.6+0x25cd0)
#30 0x00007ff014243d8a __libc_start_main (/usr/lib/libc.so.6+0x25d8a)
#31 0x000063ac962bdd95 _start (/usr/bin/clang+++0xad95)
clang++: error: unable to execute command: Segmentation fault (core dumped)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 17.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/clang_crash_test-6a5db5.cpp
clang++: note: diagnostic msg: /tmp/clang_crash_test-6a5db5.sh
clang++: note: diagnostic msg: 

********************
```

/tmp/clang_crash_test-6a5db5.sh :

```
# Crash reproducer for clang version 17.0.6
# Driver args: "--driver-mode=g++" "-O0" "clang_crash_test.cpp"
# Original command: "/usr/bin/clang++" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-obj" "-mrelax-all" "-dumpdir" "a-" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "clang_crash_test.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debugger-tuning=gdb" "-fcoverage-compilation-dir=/home/user/ClangCrash" "-resource-dir" "/usr/lib/clang/17" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/x86_64-pc-linux-gnu" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/backward" "-internal-isystem" "/usr/lib/clang/17/include" "-internal-isystem" "/usr/local/include" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../x86_64-pc-linux-gnu/include" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-O0" "-fdeprecated-macro" "-fdebug-compilation-dir=/home/user/ClangCrash" "-ferror-limit" "19" "-stack-protector" "2" "-fgnuc-version=4.2.1" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-o" "/tmp/clang_crash_test-6a4591.o" "-x" "c++" "clang_crash_test.cpp"
 "/usr/bin/clang++" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-obj" "-mrelax-all" "-dumpdir" "a-" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "clang_crash_test.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debugger-tuning=gdb" "-fcoverage-compilation-dir=/home/user/ClangCrash" "-O0" "-fdeprecated-macro" "-fdebug-compilation-dir=/home/user/ClangCrash" "-ferror-limit" "19" "-stack-protector" "2" "-fgnuc-version=4.2.1" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c++" "clang_crash_test-6a5db5.cpp"
```

/tmp/clang_crash_test-6a5db5.cpp :

```
# 1 "<built-in>"
# 1 "clang_crash_test.cpp"
struct TestType {
        // Implementing any one of these functions causes clang to crash with -O0.
        // Explicitly deleting both the copy and the move constructor also causes a crash.
        TestType(const TestType& other) { }
        TestType(TestType&& other) { }
        ~TestType() { }
};

__attribute__((naked))
TestType testFunc() { }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWktv47qS_jXKhqChly17kYVjx-kMum-CTubemdkYFFmSeVsiNRSVx2Z--4DUw6LjOE6fg_MA-iA4bfFR9bFYrCrxE6lrnguAS2965U3XF6TRO6ku_wPqGq6auiTiIpXs9fJWIyahRs9S_UBcoJvVauL5a89fdv-f-d2ffay1aqhGj1Drx9cKkJdc9aMXXrjxwg26LasCShCaixwR8YqkACQzpHdQA8oaQTWXokaUNDXUiBZE5EhLRBWpd-iZ6x3Cd_7kUOz1S1VwynXxihgUYKWnUu-MXERl9YqIYPahlE-mRbRYpUKkqGWvjrR69uL7pXjh3M5B-4YZknoHygsXZp3IS9bHZo3Gn5zyf6M5b_uTtRddjQ2_3RKtFU8bDdutnTIX5AcwL1yYPztm2AYNtd40gh4V7e7g0GgN74VXXnhlDO7NfKSgbgpdIy686Pj-33-9Xj5co7pJS64RQWmTIwWVVNps4U7rqjZT7ZblXO-adEJl6YWbonjq_8GVkv8Gqr1ww-u6gdpsr9k8LmjRMGh31HpDSugPrQgFL1yhSkGlJDUezFAtG9U2m5mkriXlRANDqhGopopXutvjB03oD8SashoW5U-Q_e9eyVyREhGVN8ZjDXbkhZumVl64Sbnwwo1jJkoDhLXiVQHoZT7bzmJcUVxw0bzgXDQIQ8k1lum_ES4VFOQFk6JA2ChnXCGCEWa8JmkBOFMACNMCiMKk1jiFTCrAZsUg2H6ctdgTKJ5xULaZEsXwEykawIKUUCNcEi5wxou2oT1SW2vBrfGMCa2qFpCkxBw-XEoGBao4RbjiFBfwBAUK2wde44oDwmWmSAm4klxoUF60tkvJSqJ3GJQSEuEsqzCVwuyQ9qK1FAhnQmIlG8G4yLEZi3A5OouYFJyYc4izRjxzwbA2q6y9aB0irInKQWNaNca6eBYjrBsBtiEHAcoAZpA2eQ7KdHGRe9E6ZynCGZVPoEgOmMqy4kW7UMYNci_c7GQJdmfN4dysjIVW1sWwgtaXzNj95hc83W_-JkgQtmYQpMC8fq01lIeOMpm002ax8X1KvXBzxEWMsGgSToJ-xsH_ujNgdLdON0z48xEcl_eXwGWOzTNR7BSYwy3dyzw5S1JSnDf091zt8SlvQcCL-UHHYM4a1CIeht75CGcMKgXURFFcEqqkbUqb_LMnKgOlpMIFNzkiWCBcmxBswr4Gm5BDhLNcNNTEtZpL4UXruHXxjL68YHihULVFAs6cByoLqTDjJBey1pyaNsKYqnmO8Hq7vVmttl-W_7zerv-1_L4Jt6vN7Xb58M2L1gHC0qxbl1XvBKMIiWckni6CiUT4BXXudTSMtvkj6PKHF61AZl50jSqialCIaGSCt8yQicbt4LAbvJIM2ihmDdl2Rl3n90aYYIYqUtfIC5NNVyahe9PwjQiSGzMnSApUStYUYEYdRRgmXeKL35H9X_MZWi9vsBddr5c36LYLzkbbAxRgf3Wq-mrNTPNif_s_877SeDItVg3ywshH_ovv-36SZX4QZ8l0EUXIpvxo6UXL-rVuf9wrLrRNyI9tVp_vBynyvJW1VkBKW0qtEBfaVjOmqHHOcMHTr1__-Q0HyaSWXnjlvyRW5VAYGUzBAaYwpdkxTN8b8cBzQYovRLACVN0XUWepNVIdteGhWhawc2WxgDmyIkdWOCVJ4h-XRSe1nMysnIgmie-IicdipoTQ-YyOLPGw_odk0P6uzAZtGWjCi_qD7RlJ6N3G-JPN9l64NDZsK-pzVh-EFpaDe3qAm01pfAr3H4zXwHHwzg7xzk_jVZumKP5o0PMD0IkLOp3H4fQdrbcPULStKyKE1P8Nuu121tAts8V2Hiqr1EE1P0BFKVl8iKptNXF2JcvSBLHjsFaoEfbtmCG6I2pkzFHPJ4JPEFp8zgIW4wXM2dSH6fwsYfHUjh2EmUjmH1gjJin90BprOYrso8B-dnALQqvIQRIcIMnS6cdIzI7cgFgKdl1yvV7efA6E0eGACF0QNIQpnOkcy6K4IjWnV4WkP9wAN6Tczh1m50O0CByI0QHEmMzgXGFmrCMsPvCleTRLzvUlM9YR5gbVOFn4ZHqWMGqHOrLcgBcEkc_Gp3Rzb6qXvnhpA1wj7kRv6aPm_4ThF1ahgyg5RBSH8RmIvtmSysHTN30GTRzGDpr5IRpGxqelgJzQ164y2uO6LatiwPabMTHiHh4nMDG2YHGUtqVuq8Mc0av2EuKu0VVjgvuoe72vva9FzgV0eWo05AsQBuoBiKK7u650358pZ2gXGT4Y9WivBT4Y9JWI_NiQUVzQiov8O2Ruc2_U5YHAzgjLzivHU26FVk3Nn-A7ZCuh77XyotW--ynrSssNL-DBvnJ50bURUWvW9jSC_28D2-pgpsn_1bPiGrZ9FTCaxCAjTWHKswI0fDAxurY63_ETu05Mq8rUjeZV2ISeyDrD2FtCJ_NA4Efz5J00dlRiYic4Ep0MQiFLWRaOzX5v3qSWD4-u2z1ASboNTaUs9v9-Yn2x1eWAcTIJJDSOs8UYzEZJofdO0B6QF6CNhlM57KgtmJXuqI9c9anPssQ9Hua9G5RJ5ERQcAD0jjl_H--JQHEcokXgQHRyD8wXEV0429WB2SN96u4YXWBvVnKiPDwKDaxmB1qfyWYRoYtZSAMazBGlwbYk3I2bS6XIqzn40cot-NpT-aYIfJKcHUH45kLYQgMauB4-O8CVBH52hpwgDvzMEZQcCqJhf7nbLdEWqe0CLN6lG6cepSxWxiNe9LtVzXtgaOgUIeHcBZMyNo2RgXGGNMKmTmIMF-6LbRxR9vGLbTilzB-LObh2COOIzQnabs20ba2J0ts3AI8LZnPiCA7eLHYxRa3Is5a72NdJ485oiezVmPnRCJIWgLRE0B4hRGVZEmFiPXqAvASh7UFCNugjy08psEQGsA_Ft7Ra1sWDXjbKCC-AIdZYzbW99zCimxoQfrJtAIiPTvFYD-ru61CQTPzJrCOhbHY2Oo_dWbZDdgoIQ5Z1MAMrWfOXtssGhKIAtubqDftybIVCmtS3RPtLQFTWuZ3abd9v-BsxZB3TtXx8XK6-oMcv12hz9_Xr3b9u_3GDNrdfrx_Q451tvvrPG_T9-v7u--PAL90fY6rmtTl677JVwwAFyPI0wBDRg8jzrXDijnPK0un-FvP3E1nvfm6rfq8NO8pwfgwa7VnOo3LCCLU32nY7WUNBoUwq9P5ZMFPWij-BQkTlHZ0YYsxsm6XdvGg9xIrQ9t753a_j17nhXvSd4jk3J3YUKsyAE-GoVUFp0P9s2cvu6SjL0I7rmcz-ec9n9i0dq9k9Ejy0jxjOAcA7POfhHIftHHUecp4DKof5PG3HYRkOC9p1VJz2QwZGtGsIxx0tOzpIO8KR9n0jpnRoOuRLh45D1nRQcIQ7HSa9YVCHPR541P0-41k8dHecavfcMauDtY_xq4POn2NZ--ljrrVrO0HPtXMO-bbDeX8Ux_jXQnNc3l8MY8_KngvsfYb2bAkuW_tnWOQkc_sG0AE1uwf26QkOo_smt7xld0cdn-Z4h7kjprdrCxZ95wHrexhNjzLA-zjj8MB7fW-b3nDCQ0_HDPfPp_nhfpTcW_QDrrif8dKnHSfnnkzmv7L2r6z998nav4LIZ4PIeSFh_EY2lPk_9S5Dq-qMl5nAhp1olTa80JgLe_0VHvSfjFu_Pv_9-37-e8EuI7aIFuQCLoMkiMIgjObBxe5yOs-mDLKULHzIggVJCIsgmlLm-2yaJNEFvwz9MPbjYBr6wSIOJv4s9adZ5Cc-BPOUZV7sQ0l4MTGJYCJVfmE_7L2cz5P57KIgKRS1_RA9DAU8I9tpfGq6vlCXNnmkTV57sV_wWtd7KZrrAi7bd3Ap7FdqzzsQyFoCrbrvtIaPlHakRkIKkyyfOCmQAt0ogfRrBReNKi5__vNku5D_DwAA__96SR4I">