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

    <tr>
        <th>Summary</th>
        <td>
            UBSAN errors in TableGen (GlobalISelEmitter.cpp:6154:17: runtime error: downcast of address 0x60c514b0 which does not point to an object of type 'RuleMatcher')
        </td>
    </tr>

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

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

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

<pre>
    Noticed the following UBSAN errors in `llvm-tblgen` when building on amd64 (multilib build, so -m32/x86). Motivated by investigating a miscompiled `llvm-tblgen` on PPC with GCC 12 but not necessarily related.

```
[1606/2838] cd /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86 && /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen -gen-global-isel -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AArch64 -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/include -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/include -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AArch64/AArch64.td --write-if-changed -o lib/Target/AArch64/AArch64GenGlobalISel.inc -d lib/Target/AArch64/AArch64GenGlobalISel.inc.d
FAILED: lib/Target/AArch64/AArch64GenGlobalISel.inc /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/lib/Target/AArch64/AArch64GenGlobalISel.inc
cd /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86 && /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen -gen-global-isel -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AArch64 -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/include -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/include -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AArch64/AArch64.td --write-if-changed -o lib/Target/AArch64/AArch64GenGlobalISel.inc -d lib/Target/AArch64/AArch64GenGlobalISel.inc.d
/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6154:17: runtime error: downcast of address 0x60c514b0 which does not point to an object of type 'RuleMatcher'
0x60c514b0: note: object is of type '*N12_GLOBAL__N_113SwitchMatcherE'
 41 00 00 00  fc f4 ab 58 b0 4e 44 60 c0 4e 44 60 c0 4e 44 60  30 2b 4d 60 00 00 00 00  00 00 00 00
 ^~~~~~~~~~~
              vptr for '*N12_GLOBAL__N_113SwitchMatcherE'
 #0 0x5784adf4 in emit /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6154
 #1 0x5784c76f in emit /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6287
 #2 0x5781e2ea in buildTable /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:690
 #3 0x57820fae in buildMatchTable /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:5639
 #4 0x578a5f45 in run /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:5976
 #5 0x578a5f45 in llvm::EmitGlobalISel(llvm::RecordKeeper&, llvm::raw_ostream&) /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6301
 #6 0x57e16d04 in LLVMTableGenMain /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/TableGen.cpp:249
 #7 0x5821614d in llvm::TableGenMain(char const*, bool (*)(llvm::raw_ostream&, llvm::RecordKeeper&)) /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/TableGen/Main.cpp:122
 #8 0x566d2dd6 in main /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/TableGen.cpp:291
 #9 0xf73f04d8  (/usr/lib/libc.so.6+0x1f4d8)
    #10 0xf73f05ab in __libc_start_main (/usr/lib/libc.so.6+0x1f5ab)
    #11 0x566d8baa in _start (/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen+0x16bbaa)
```

```
[1607/2838] cd /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86 && /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen -gen-global-isel -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/X86 -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/include -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/include -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/X86/X86.td --write-if-changed -o lib/Target/X86/X86GenGlobalISel.inc -d lib/Target/X86/X86GenGlobalISel.inc.d
FAILED: lib/Target/X86/X86GenGlobalISel.inc /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/lib/Target/X86/X86GenGlobalISel.inc
cd /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86 && /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen -gen-global-isel -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/X86 -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/include -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/include -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/X86/X86.td --write-if-changed -o lib/Target/X86/X86GenGlobalISel.inc -d lib/Target/X86/X86GenGlobalISel.inc.d
/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6154:17: runtime error: downcast of address 0x66f89d70 which does not point to an object of type 'RuleMatcher'
0x66f89d70: note: object is of type '*N12_GLOBAL__N_113SwitchMatcherE'
 41 00 00 00  fc 24 b6 58 20 9e 9f 66 2c 9e 9f 66 30 9e 9f 66  f0 af de 66 00 00 00 00  00 00 00 00
 ^~~~~~~~~~~
              vptr for '*N12_GLOBAL__N_113SwitchMatcherE'
 #0 0x578eddf4 in emit /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6154
 #1 0x578ef76f in emit /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6287
 #2 0x578c12ea in buildTable /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:690
 #3 0x578c3fae in buildMatchTable /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:5639
 #4 0x57948f45 in run /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:5976
 #5 0x57948f45 in llvm::EmitGlobalISel(llvm::RecordKeeper&, llvm::raw_ostream&) /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6301
 #6 0x57eb9d04 in LLVMTableGenMain /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/TableGen.cpp:249
 #7 0x582b914d in llvm::TableGenMain(char const*, bool (*)(llvm::raw_ostream&, llvm::RecordKeeper&)) /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/TableGen/Main.cpp:122
 #8 0x56775dd6 in main /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/TableGen.cpp:291
 #9 0xf73e84d8  (/usr/lib/libc.so.6+0x1f4d8)
    #10 0xf73e85ab in __libc_start_main (/usr/lib/libc.so.6+0x1f5ab)
    #11 0x5677bbaa in _start (/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen+0x16bbaa)
```

```
[1626/2838] cd /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86 && /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen -gen-global-isel -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AMDGPU -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/include -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/include -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AMDGPU/AMDGPUGISel.td --write-if-changed -o lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc -d lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc.d
FAILED: lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc
cd /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86 && /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen -gen-global-isel -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AMDGPU -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/include -I/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/include -I /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/Target/AMDGPU/AMDGPUGISel.td --write-if-changed -o lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc -d lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc.d
/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6154:17: runtime error: downcast of address 0x6e698660 which does not point to an object of type 'RuleMatcher'
0x6e698660: note: object is of type '*N12_GLOBAL__N_113SwitchMatcherE'
 41 00 00 00  fc 94 aa 58 b0 d6 b5 6c bc d6 b5 6c c0 d6 b5 6c  90 11 b4 6c 00 00 00 00  00 00 00 00
 ^~~~~~~~~~~
              vptr for '*N12_GLOBAL__N_113SwitchMatcherE'
 #0 0x57834df4 in emit /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6154
 #1 0x5783676f in emit /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6287
 #2 0x578082ea in buildTable /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:690
 #3 0x5780afae in buildMatchTable /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:5639
 #4 0x5788ff45 in run /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:5976
 #5 0x5788ff45 in llvm::EmitGlobalISel(llvm::RecordKeeper&, llvm::raw_ostream&) /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/GlobalISelEmitter.cpp:6301
 #6 0x57e00d04 in LLVMTableGenMain /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/TableGen.cpp:249
 #7 0x5820014d in llvm::TableGenMain(char const*, bool (*)(llvm::raw_ostream&, llvm::RecordKeeper&)) /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/lib/TableGen/Main.cpp:122
 #8 0x566bcdd6 in main /var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm/utils/TableGen/TableGen.cpp:291
 #9 0xf741e4d8  (/usr/lib/libc.so.6+0x1f4d8)
    #10 0xf741e5ab in __libc_start_main (/usr/lib/libc.so.6+0x1f5ab)
    #11 0x566c2baa in _start (/var/tmp/portage.notmp/portage/sys-devel/llvm-15.0.6/work/llvm_build-abi_x86_32.x86/bin/llvm-tblgen+0x16bbaa)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW91y4joSfhpx0wUlybZsX3BBJkNqapPZqTN7tuaO0k8btGssyhb5udln35JxMMnZ2Uz2JODZgXKCZNOtr7ulxv1ZyKaxywpxSpILklyO5NavXD31K2zkOvyNlDMP08_OW40G_AqhcGXp7my1hN8vvs4-A9a1qxuwFRBBy_J2PfaqXGJFBIW7FVagtrY04fOuArk2IgbCs_W29La0aneV8A_QOBivI074_D4ThOcTuHHe3kqPBtQD2OoWG2-X0gdVEta20W69sSWa_zCwq-DLlw9wZ_0Krj58AMZBbT1UzkOFGptG1rZ8gBrLoH9C6CWhs-6_oN2x6yYXTFBB-JxnUUaSS9AGCJ_fyprwuV9vCJ9vXO3lEieVe9InfN48NGODt1gSPm8hsmRCJ0Hbnav_2Z1ctD4YS2UX95lYRHxynwkgXBAujjEU4XNlq0exnRNhvMRqvCydkuXYNljC-NMbYwlvVhE-_5usl-gJn89mtV6JGMafjmO1rXS5Nfjm4z1R_b5eO1ZM-tbEGxiP72rrcWyLsV7JaokGxg5ekrzC6qqdUJ--YjmxlYaxeb3QxOwW5nz26frjJYlm_8O4x5ler8a1M-ycX8755ZxfTp5f3tzwrbdl02JRJV5hWBD9yB_X1nusJ3qzIdFMsCQm0YylIb3V28rbNe5utMIJ4-4qLRsPrgBpTI1NA_ReUJ2wWIWbLqtXYBw27f3OxtnKg3cgK3DqH6hbOf-wQSA8_W1b4o30eoU14enO8l5XGK1yHsN7J2ubQ3HCZ58ZX1xd__Vidr1YfF4wFn29s16vOqUf91ohZkBpd0ChoYhBKkgyUBRihDgGQUF_pw0RBa4gNqFDD47DTjcQST7-a__qzj153W58DYWrX2sB4REFep-kWSxNEYd7Xlzbd1gjr50qe3isg6dTUQwDHs8OvMd38BhylAFemzdbLacFmdMeY7TDyGkhcY-xnQunB5qIKO-RxjukMiniJCCtt9Vp0eWp6NElz9C1-qIZiWZBqtdBeNZf-g21q81fEDchH4lQF_YXa3m3cI2vUa7ba_lpJ01EWW-taK1FJgxt88L19d9vHpXcSHucwDw2O4Q8PpgsaQCYcSZYbJ6G4xAm4ZleyRq0qxpP-CwEQDlXhpK97eZPwvU8IofR-kMo83eJ2OP3-94JwYzOAYzz3gFZcIAQhhsjggPWp4pKfjBtcqD3RRoVNDYZ7Jw83zb13q7SKj1pXBjogt6zIjZZcOT-Oy2kfPqoI5EqGLZYBKlF42XtF52VL-lNpPqDXtY5LFOyTdY7jZ2yU9QMO6xCKSn3YJ-zNd-ncNIzhXOEEutbJs7l1YDKq2-tp75l4ofLqr3Ej5RT3__wizTNfxnnJPTM9_GcaZlzzjjnjCPmjJPX06-lXkSR5SZ9G-ql0_Wu1AuPQQlIMuAUcoS8ACGA674dHZyHgoIswGDonJ56QTNo6gWLQVMvmg2fetHRT0K95HE2YOqlR_dLUC8qHzj1ovJfm3pJ02SA1Atmf556wexdqJc0Vf8X1As_7545ytPtm8urL7-fK6kBVVK7kOwbV22h88PPt58J_8jT7RdEXt4789KYp9k58wKqM0FzziznzDKIzHLyevy11A2KPBPibaibTte7Ujd5DFJ2u2aMAJWA0KB039YH5yGnwBioOHROT91E8aCpm0gMmrqh2fCpGyp_Euomy4oBUzc9ul-CuqF04NQNpb82dSOUHh51EzP809RNzPB9ds1o_lNQNyMzjUwe5XKEUyZSmuVxkmaj1RQLZDziSmGqUlqw2EiqmdCa0kSJiI7slFPOGWcRZZwn2YQxGUcpp7JQLE9VTmKKa2nLScAycfVyZJtmi9Mkj7NkVEqFZfP4s7N62gJW22VDYlraxje9mLe-xOnzH5s9zo_g2cFto-b5aFuX05X3myasaz4nfL60frVVE-3WB-swmL2pXdAXypPgobAQWif9OwAA___bYX-X">