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

    <tr>
        <th>Summary</th>
        <td>
            clang crashes in CodeGen when a compound assignment operator's operands are elements of bool vectors
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:codegen,
            crash-on-valid
      </td>
    </tr>

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

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

<pre>
    $ cat test.c
```
typedef __attribute__((__ext_vector_type__(4))) _Bool BoolVector;

BoolVector vec;

void f(int i, int j) {
  vec[i] |= vec[j];
}
```

$ clang test.c
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  clang-18 0x00000001078353e0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 80
1  clang-18                 0x0000000107835944 PrintStackTraceSignalHandler(void*) + 28
2  clang-18 0x0000000107833ac4 llvm::sys::RunSignalHandlers() + 152
3  clang-18 0x0000000107836b78 SignalHandler(int) + 276
4 libsystem_platform.dylib 0x00000001916fda24 _sigtramp + 56
5 libsystem_pthread.dylib  0x00000001916cecc0 pthread_kill + 288
6 libsystem_c.dylib        0x00000001915dea50 abort + 180
7 libsystem_c.dylib        0x00000001915ddd6c err + 0
8  clang-18 0x000000010496ec94 decltype(auto) llvm::cast<llvm::VectorType, llvm::Type>(llvm::Type*) + 100
9  clang-18 0x00000001067631f4 llvm::ExtractElementInst::ExtractElementInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*) + 56
10 clang-18 0x000000010676337c llvm::ExtractElementInst::ExtractElementInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*) + 60
11 clang-18 0x00000001049edf30 llvm::ExtractElementInst::Create(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*) + 64
12 clang-18 0x00000001049ec628 llvm::IRBuilderBase::CreateExtractElement(llvm::Value*, llvm::Value*, llvm::Twine const&) + 152
13 clang-18                 0x0000000108446f08 clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(clang::CodeGen::LValue, clang::SourceLocation) + 1164
14 clang-18 0x00000001084fd90c (anonymous namespace)::ScalarExprEmitter::EmitLoadOfLValue(clang::CodeGen::LValue, clang::SourceLocation) + 104
15 clang-18 0x00000001084edaa0 (anonymous namespace)::ScalarExprEmitter::EmitCompoundAssignLValue(clang::CompoundAssignOperator const*, llvm::Value* ((anonymous namespace)::ScalarExprEmitter::*)((anonymous namespace)::BinOpInfo const&), llvm::Value*&) + 1596
16 clang-18 0x0000000108502044 (anonymous namespace)::ScalarExprEmitter::EmitCompoundAssign(clang::CompoundAssignOperator const*, llvm::Value* ((anonymous namespace)::ScalarExprEmitter::*)((anonymous namespace)::BinOpInfo const&)) + 136
17 clang-18 0x00000001084f5e08 (anonymous namespace)::ScalarExprEmitter::VisitBinOrAssign(clang::CompoundAssignOperator const*) + 56
18 clang-18                 0x00000001084f1f10 clang::StmtVisitorBase<std::__1::add_pointer, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*) + 728
19 clang-18                 0x00000001084f1c20 (anonymous namespace)::ScalarExprEmitter::Visit(clang::Expr*)::'lambda0'()::operator()() const + 40
20 clang-18                 0x00000001084f1bec void llvm::function_ref<void ()>::callback_fn<(anonymous namespace)::ScalarExprEmitter::Visit(clang::Expr*)::'lambda0'()>(long) + 24
21 clang-18                 0x0000000105b9e1a4 llvm::function_ref<void ()>::operator()() const + 32
22 clang-18 0x00000001084f1aa0 clang::runWithSufficientStackSpace(llvm::function_ref<void ()>, llvm::function_ref<void ()>) + 88
23 clang-18 0x00000001084e9614 (anonymous namespace)::ScalarExprEmitter::Visit(clang::Expr*) + 156
24 clang-18 0x00000001084e9524 clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) + 200
25 clang-18                 0x00000001084462d4 clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) + 156
26 clang-18 0x0000000108447e90 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) + 96
27 clang-18                 0x00000001086d1e08 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) + 676
28 clang-18 0x00000001086dc7a4 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) + 908
29 clang-18 0x00000001087a46fc clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) + 140
30 clang-18                 0x00000001087a5274 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) + 1648
31 clang-18 0x00000001087d3940 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) + 488
32 clang-18                 0x00000001087ca014 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) + 648
33 clang-18                 0x00000001087cf050 clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) + 1648
34 clang-18                 0x00000001087c86a0 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) + 232
35 clang-18                 0x00000001089d270c (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) + 168
36 clang-18                 0x000000010878b490 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) + 212
37 clang-18                 0x000000010cdae208 clang::ParseAST(clang::Sema&, bool, bool) + 640
38 clang-18                 0x0000000108f32a40 clang::ASTFrontendAction::ExecuteAction() + 304
39 clang-18 0x0000000108789fb8 clang::CodeGenAction::ExecuteAction() + 92
40 clang-18 0x0000000108f32200 clang::FrontendAction::Execute() + 124
41 clang-18                 0x0000000108e50be4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 936
42 clang-18                 0x000000010904b208 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 964
43 clang-18                 0x00000001048ff86c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1440
44 clang-18 0x00000001048deb38 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) + 500
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWd1u2zoSfhrlhmggUdTfhS9sJ-kJkKJFHfRg90agyJGtViINinLrffqFRCqWfaRE8XYPdovAtfkz_Oab4cyQpHVdbAXAwglWTnB3Qxu9k2pBd1RTQX_cZJIfFw4miFGNNNT6ljnuneMundC1f91PfdwDhxylKdVaFVmjIU0dHDs4TlP4pdMDMC1V2o7rOoiDE_OH0pWUJWo_vnWDHH9l1-g-Tx3oAOyi8yALjnIHx4XQqHDwGrVfvrdinciORN28YFU4wR1yorXj39mW705wdxIY3Y2qZj9bDkoqtmcsbDRlPxBvqj36WeidbDSqj1UmSyRoBTVycAyibhSgo2zQjh4AleWh-mAGFf8ChQrR9in0Zfn8B5IK1aCR3gECcSiUFBUIjQ5UISd0n56-fUo3__i0-vz0-M_7r2k7xQldpCXay1ZvLVGhW1Z9i9pFBvQHL0buL9f889wo9gMf3A5LO9Zf1sfafPmiCqE7tZ4VZeDg-DRI0Z-prLUCWjk4tGR3VOMVii1d3mDJy38XEBJC0MV6m2IraPkHFbwE5eC4ta-Dl_0iODaL4Em9fMrImF5fG3Emu-6c00j1AmzE-pNiwyyK0SW4gfY4Co0Igsoiq4-1hirdl1TnUlW3_FgW2UBi4oU5p5igtC62WtFq3wkJrIxgKEPvFFBuRZzLYMCYi-yI9EdRlpYky1I4kMN6CZeWSLyAAw1cRDOptOGjt2U0VwDnIUOgVDfdTo7HySRJCCwhiAMr22jg4Jg2WrZEnszGaK0df31qMAHguRu_HgzsWvz7Mzc1o158xnMtoGQcUBiFvpcPneb-l1aU6fsS2t33KFosE-3Ddb_RsjELDxGOtz7_LAQgJjsZ4XlfK1g1TBdSDNToncNzJ7XwI_a_rkUfVD1vwjmA5747Q4u1Aqrh70ROLHI8hZyFOB6K-bpqipKDWtEahqDPVfptKlzEMs-fFYdjQsLcjc1Yi1Jy-Aji7MdDIwwhxihVoZ8k5Z_zJ4stnprfD1gPV9jIRjF4kowaki1074VjMspxTHKeuKzNqlRIcaxkU5tEu-9SVWKlM1pSdf9rr1qcGtR_FbTbYw4mMAOn1P0PMK9ltZeN4MuuVBvHPhzxeQ-KttWSdY0JZ0KmOrsClNkUb09fFeLz_lHkcuikU549cOCkj3ThOKOBi11Cfhuj_89cWsr8nrFoat8E4MZXMvatqAvdrq-u4usie8Uzo1Lu5X2ms-h0pTso0gbUda256UpTz3yhnKddJdyWZ-v36zvum_79gIhz7VtQAy2jvj71ktlqMnxtcBjB046xLmXdKypplXHqOjgyFa_pkNZQts3Uwp3ROkWITdPYna1HBgx1p7ETg7lNGqmC3PHXXW8P4r4v9Moyo-xHmgvHX_-9PHRVoxTblxreRnLszVI6yBLwKHmfvm_w7tvkjceLjJbnNpkMNFWN-LPQu02T5wUrwJ6lNvvLs9vr2M4c_42h9rjXn8T8qbSXhN61QfpVi9osYQMKnioVIAn6vveUNSdEf13_LAtkUpYvntMfMXAwu-jC_Ap0S3GcAW1K7HK77YLappT6UoUToRNZl5AIEvf9kB-3Qirgb8I2MPrcj6N5RIbcg2uqVxO4L0P5RJpfKkWPX7vNMJiw1HqA_7Qzwv4qAMfjTIacRfQK4_eptkX6p7lt2jC5nygGh_qEJ2vP9Q5rDrff5sm4LhElYc7er0vfspL8-KodrHf2CcmfmZAiGuDonRx_BNEGZ2g7zzF9LGVGyztg5bljvMx_fd-tP_YDLys4o1xILMv--Kk4jrifkDf33ifJmxJOHBvU_dJ3kBeiMGjn6GbaTwW6wUr6uO_jmYZg1PXeNMQ49N8D-cTuzBNxxHI3uJLtaaB_sTWZiyYO6bvRPMv9ExzArj3EZFpON6p9yeHPTF0Jx9HbZ3ALyxQ7j9W-NM3m7vR1cB-VbPZttH2hrGcsnMlYnJHzTLWi7AcIvpaibqq-yLgGC_Z6tublJ8Yp4PP89IWqGpab54uoBxW9iNPD7By-xL-Z56fcx_Q8Yiw3zw9KCg2CL4fB-BewRoNtOt2J-_29hj8V-eMkz8Yy7xzpiaWRjF9mtvCxewb_FezDm_y-hifzavgYAjeDi_BU7YsS1KOoNRUMxhWZRnaK60l_LCfzYmXikuzCWeyyJ0yHl-uny5x_hnlYUPWMzIt-JM7zOGSIMS-taCHODhHDQmhHL6qfNTpvw2t08Xrjkd6NyXjVTmIOmR-jXu2199xtggGETUVL-xxowsoIkhcLBK57wxc-T_yE3sDCi7pF_Ci52S08n3AvCJOM-RDjjGKPB-CRiEchBsjim2KBXex7nhe6voeD5JbSzPMTylzs-WEGoUNcqGhR3rbobqXa3hR13cAiwiSMb0qaQVl376oY97ZiksMWhIOxg9dtu6L17oMUHw60bKnCTnB3oxbdG2HWbGuHuGVR6_q0hC50CQvzEtnNhhoVAtm9h37uQCCKmC0CkXnf7R4RT0fPqDY_BK8RVYDA3ETXSOZd1EHmsba-aVS52Gm9797Q8IODH7aF3jXZLZOVgx86q5j_PuyV_A5MO_ihI6F28EPHw78DAAD__7Z71y4">