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

    <tr>
        <th>Summary</th>
        <td>
            [FMV] The compiler crashes in the absence of default target version.
        </td>
    </tr>

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

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

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

<pre>
    I can only reproduce this if a declaration if followed by a definition as below:

fmv.c
```
int __attribute__((target_version("sm4"))) def(void);
int __attribute__((target_version("sha1"))) def(void) { return 1; }
```
$ clang --target=aarch64-linux-gnu --rtlib=compiler-rt fmv.c -S -o -
```
llvm-project/clang/lib/CodeGen/CodeGenFunction.cpp:2796: void clang::CodeGen::CodeGenFunction::EmitAArch64MultiVersionResolver(llvm::Function*, llvm::ArrayRef<clang::CodeGen::CodeGenFunction::MultiVersionResolverOption>): Assertion `Options.back().Conditions.Features.size() == 0 && "Default case must be last"' failed.
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: ./bin/clang --target=aarch64-linux-gnu --rtlib=compiler-rt ../llvm-project/fmv.c -S -o -
1.      <eof> parser at end of file
2.      Per-file LLVM IR generation
 #0 0x00005644724ee8df llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./bin/clang+0x81cb8df)
 #1 0x00005644724ec41c llvm::sys::CleanupOnSignal(unsigned long) (./bin/clang+0x81c941c)
 #2 0x0000564472425dc8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f8dfd333420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f8dfcdd000b raise /build/glibc-wuryBv/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f8dfcdaf859 abort /build/glibc-wuryBv/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f8dfcdaf729 get_sysdep_segment_value /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007f8dfcdaf729 _nl_load_domain /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007f8dfcdc0fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #9 0x0000564472950e53 clang::CodeGen::CodeGenFunction::EmitAArch64MultiVersionResolver(llvm::Function*, llvm::ArrayRef<clang::CodeGen::CodeGenFunction::MultiVersionResolverOption>) (./bin/clang+0x862de53)
#10 0x000056447285f3c7 clang::CodeGen::CodeGenModule::emitMultiVersionFunctions() (./bin/clang+0x853c3c7)
#11 0x0000564472861d01 clang::CodeGen::CodeGenModule::Release() (./bin/clang+0x853ed01)
#12 0x0000564472d9c352 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) ModuleBuilder.cpp:0:0
#13 0x0000564472d9bb85 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (./bin/clang+0x8a78b85)
#14 0x0000564474eff8d9 clang::ParseAST(clang::Sema&, bool, bool) (./bin/clang+0xabdc8d9)
#15 0x0000564472d9b418 clang::CodeGenAction::ExecuteAction() (./bin/clang+0x8a78418)
#16 0x00005644732bafa9 clang::FrontendAction::Execute() (./bin/clang+0x8f97fa9)
#17 0x0000564473234c2e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (./bin/clang+0x8f11c2e)
#18 0x00005644733b2796 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (./bin/clang+0x908f796)
#19 0x000056446f6ab256 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (./bin/clang+0x5388256)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcV01z4ywS_jXk0mWXBPo8-OA4492peqfeqUl2ri4ELZsdBC5ATrK_fgvkJFYmma-9bZUTW43gebp5uqG592pvEFekvCaUat45ZZATSkl5c8XHcLBu9WS96qx8XH0EwQ1Yox_B4dFZOQqEcFAeVA8cJArNHQ_Kmmjordb2HiV0j2mwV0alMe6hQ23vCVuT7IZk5__9cFqKs6HKzp_0qEyA3Y6H4FQ3BtztCG0IbQJ3ewy7EzqvrEk26ociekDb6RNhCW1OVsloYNe_v-CB5--vCKS-BodhdAZywq6B1DdvukBoAUJzs4fFYoIh7IZzJw5VsdDKjA-LvRlhsXBBq46wG2GHo9LoFi5AigwsbmFhYfHm8lqfhsXR2X-jCIRuExKh27gU3W6sxH-gefm1HY2IO7EUxyNha1q3FWFriD5NJOPOsPXTvMuHp6mT8cOgwnqdnPg06qC-TpH7gt7qEzpCm0hsevd5Jl0TuoGXgbVz_PEL9oRtfgv8LcS_j9P4h7Tba1h7jy6JjlTZNOiXHRff0ua2y401Uk3WLfIwOvRLr_6D0zAQdkPYDWRAaEVoBYTSG-z5qAMI7hGG0QfoEDT3IYmkhp4rjXI5bcvnvz6sbz-AH7tBBeDQjfuYOdYFCBYOIRx99IVuCd3uVTiM3VLYIW5cjM70dbGtyvsRPaFb4EaCMkKPMiYggnDcHyA6FhwXGAN8TCkq0HuU4O3oJnOcyb23QvGAEtxowAunjuFM-TZw8Q3kOByf0zNbkqz97Oze8QG4248DmhCJw5LQbafMk-L-RNvL5fd-vqH3PHIgbIO2J-wDHLnz6IAHQCPB9tArjdObNLFFt4gm-Ouvr5_g4xfYo8GpNE1vAaEsg-why7KsrIqipgViI_sLXfpHP_347JQJKS53U3AvVO34_c764JAPSSMbUCYk6dDmVXQIvc4emlx0jeyjPJ955K94iCIXb_HYaORmPP5tbtXecE1oM5pUwyVoG9f_EWpb5GKGSueotJSigU3U0RcU9oTucYL5JzdSp1w-ezZ7Z2NNwIdwriRZ-nuGYGeIum9kLxljBc1gt3Pog3W4cwFSnp3L1ENT7S4FMw0cw8Ehl0tvl1nyJS8Kms08KS5hhJRZlnXguPIIMRaj0jLml1adWNyP7vH69PxIlywndOvPAd0mNfpHL_EY82w06mEynBIbM8bHtPRSELYuc8LW-QuTcs6E903ZAu9s8vTXmAQ5RSPNSiBNBKlfQKrXIDVtIZ5bE--dx31M0N2J6_GXI6BMiP5ry-Xg94JP0GXMuXXzgl2_hb0zehcn7qQduDL_G2RbRxGx4gWzmWOKrJfVLwhHRMlUSTKM9bKaSaadib8tMyzZ_9HR924dqKjEkj2HIhafeRVsyp6J-meh-GTlqHEy4aDCJZ8npv7pDH2HSskEE_WMyrwQNlUus_x3qHxBjdzjT4FRZvkMeF4LZStYSeN8bqx5HOzowfAB_TFV_3aGH08V6z4ORz2Zp3J557jxOp03_zIqENpcuLG-vTuXzXRktDD5cB1zBt33pTQyZK8Ydl1TXobmmotvaOTGGj8O6P6cy3tR43XTNeUsasUlpwL7vpHtJafP8ZBe397NEW9x4OejsrNWv3y_i807KRrZzrDL1_Eo8uYNqawvM_YBxRjwbPqxRnjdFHkzQ6wuERnteM9n3m5djKORb0D-BKxv657P3avnYKwQFOfuTTeoj8YHbgS-7eH77H68132eC4ozQs2MEOtiz3BJ6Az9wutkBf-exne8Y0V8l0ibNX3sTS6JXFbuqq94R8sKhMh38eiZVd3L4nrgDoQ18Za-TiVyA3Mb3cDU0v2IT8mahpYXfJ6asCu5YrJlLb_CVV5nbVWUTdteHVa0pyxrs7zrsaCMF7zKeI91W9VF0ZecXqkVzWiRsazMGWvydlnmZdHXOc17zLvYaxYZDlzpZXRsad3-KnUBq6bI8vJK8w61P7fwBu8hDZ57eLdK9-pu3HtSZFr54F9WCSro1PtvP30l5Q3cxS7ivDtTO4EelEndBe88GoHxni3P7c90z4dzq7y8Gp1e_Xk_k5z5bwAAAP__hVz98g">