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

    <tr>
        <th>Summary</th>
        <td>
            UBSAN is sensitive to "compact returns"
        </td>
    </tr>

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

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

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

<pre>
    In lack of a better name than "*compact returns*", it seems clang with UBSAN is sensitive to a syntax like
`enum { a, b, c } func (args)`. Perfectly legal C-code. 
This a little GNU-makefile with the flag `-fsanitize=undefined` that shows the problem:
<details>
 <summary>ubsan-crash.mak</summary>

```
#
# A rewrite of libcurl's 'lib/content_encoding.c' for
# the issue:
# https://github.com/curl/curl/issues/12618
#
CC     = clang-cl
CFLAGS = -nologo -fsanitize=undefined

default: crash

crash: ubsan_crash.c FORCE
        $(CC) -c $(CFLAGS) $<

no_crash: ubsan_no_crash.c FORCE
        $(CC) -c $(CFLAGS) $<

ubsan_crash.c: $(MAKEFILELISTS)
        $(info Generating $@)
        $(file > $@, $(ubsan_crash_c))

ubsan_no_crash.c: $(MAKEFILELISTS)
        $(info Generating $@)
        $(file > $@, $(ubsan_no_crash_c))

FORCE: ;
clean:
        rm -f ubsan_crash.c    ubsan_crash.obj \
         ubsan_no_crash.c ubsan_no_crash.obj

#
# This is similar to this "crash-point"
# https://github.com/curl/curl/blob/master/lib/content_encoding.c#L372
#
# where it seems clang + UBSAN is sensitive to a syntax like
# "enum { a, b, c } func (args)"
#
define ubsan_crash_c
  enum {
 GZIP_OK,
    GZIP_BAD,
    GZIP_UNDERFLOW
  } check_gzip_header (unsigned char const *data, size_t len, size_t *headerlen)
  {
 (void) data;
    (void) len;
    (void) headerlen;
    return (GZIP_OK);
  }
endef

#
# A rewrite into a typedef'ed 'gzip_status' works fine.
#
define ubsan_no_crash_c
  typedef enum {
    GZIP_OK,
    GZIP_BAD,
    GZIP_UNDERFLOW
  } gzip_status;

  gzip_status check_gzip_header (unsigned char const *data, size_t len, size_t *headerlen)
  {
    (void) data;
 (void) len;
    (void) headerlen;
    return (GZIP_OK);
 }
endef
```
</details>


Running `make -f ubsan-crash.mak`, gives me:
```
Generating ubsan_crash.c
clang-cl -c -nologo -fsanitize=undefined ubsan_crash.c
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associa
ted run script.
Stack dump:
0. Program arguments: clang-cl -c -nologo -fsanitize=undefined ubsan_crash.c
1.      <eof> parser at end of file
2. ubsan_crash.c:5:5: LLVM IR generation of declaration 'check_gzip_header'
3.      ubsan_crash.c:5:5: Generating code for declaration 'check_gzip_header'
Exception Code: 0xC0000005
 #0 0x00007ff6df60dfc7 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x155dfc7)
 #1 0x00007ff6e0bcf961 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x2b1f961)
 #2 0x00007ff6e0bdad39 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x2b2ad39)
 #3 0x00007ff6e0bd42a4 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x2b242a4)
 #4 0x00007ff6e0bd50d9 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x2b250d9)
 #5 0x00007ff6e0bd4082 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x2b24082)
 #6 0x00007ff6e0bcaf9d (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x2b1af9d)
 #7 0x00007ff6e0725d15 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x2675d15)
 #8 0x00007ff6e072984c (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x267984c)
 #9 0x00007ff6e072c98f (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x267c98f)
#10 0x00007ff6df5171eb (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x14671eb)
#11 0x00007ff6df50fe83 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x145fe83)
#12 0x00007ff6df51447b (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x146447b)
#13 0x00007ff6df50ef0d (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x145ef0d)
#14 0x00007ff6e12a31dc (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x31f31dc)
#15 0x00007ff6df946c99 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x1896c99)
#16 0x00007ff6e11fcf69 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x314cf69)
#17 0x00007ff6df8b12e2 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x18012e2)
#18 0x00007ff6de66d26d (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x5bd26d)
#19 0x00007ff6de6ffb7e (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x64fb7e)
#20 0x00007ff6de0b8bd6 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x8bd6)
#21 0x00007ff6de0b53a9 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x53a9)
#22 0x00007ff6df73dffd (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x168dffd)
#23 0x00007ff6de5b1845 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x501845)
#24 0x00007ff6df73d7ce (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x168d7ce)
#25 0x00007ff6de658085 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x5a8085)
#26 0x00007ff6de6583ce (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x5a83ce)
#27 0x00007ff6de63e40b (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x58e40b)
#28 0x00007ff6de0b4c2a (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x4c2a)
#29 0x00007ff6de0c6f14 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x16f14)
#30 0x00007ff6e264f130 (f:\ProgramFiler\LLVM-17.0\win64\bin\clang-cl.exe+0x459f130)
#31 0x00007ff9bca77344 (C:\Windows\System32\KERNEL32.DLL+0x17344)
#32 0x00007ff9bcc226b1 (C:\Windows\SYSTEM32\ntdll.dll+0x526b1)
clang-cl: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: f:\ProgramFiler\LLVM-17.0\win64\bin
clang-cl: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-cl: note: diagnostic msg: c:\temp\ubsan_crash-e86b08.c
clang-cl: note: diagnostic msg: c:\temp\ubsan_crash-e86b08.sh
clang-cl: note: diagnostic msg:
```

And running `make -f ubsan-crash.mak no_crash` is OK.

Version-info: `clang-cl --version`:
```
clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: F:\ProgramFiler\LLVM-17.0\win64\bin
```

On Win-10, version 22H2 (OS-build 19045.3803).


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WVtT4zgW_jXi5VRStnx_4CGYpIfqTNMF9HTtvlCyfJxosOWUpQA9v35Lci6WG2ant71NQYh1-b5z09GxxJQSG4l4SaIrEl1fsL3ett3l5plJbC6Ktvx2eSOhZvwJ2goYFKg1diBZg6C3TAKhlNAFb5sd4xo61PtOKkIXtj0HoUEhNgp4zeQGXoTewper-8UnEAoUSiW0eEbQLTBQ36Rmr1CLJyTeNfEWJPZQ7hsgyRUwg1aYDw4kuYZqLzkQmrJuowjNSOzN4TN2FXJdf4MaN6yGfMbbEufQoz1shQIGtdC6Rvjw6cusYU9YiRp7sfQWoarZBkjszSrFpNDiLyTB9V6WWAmJJYk9o7QGtW1flJ2w69qixoYEi4PIQV6iZqJWJFj2TUCCXO2bhnXfSLDcF4rJGe-Y2s4b9kSCnNDVufuAclT_8Ns_0uD0BRbQ4UsnNBq31KLg-64mNFFAaFKLgtAVb6VGqR9R8rYUcjPnhCZQtd0ZxCgglNrjWXwawFbrnTItdEXoaiP0dl_MedsYTMty_GenKkJXPo39dCRknoP5IcF17_oZrw8dq_Xiw73tmMm2bjctvGPtgSlKrNi-1iRYgDXdsK9vCBZgTfvYm5bD6vYuP5kzIzQkNM1zQjOYmcCxj1YU02Seg3yIKtvHEfCx5eexHUENQT_l98XH5epmvVzf3D-YmSMCIasWPqDEjmkhN3ZS6H0_zkY0CZanAfkBf0D7yM2889SzVGctf7VgR-a3ZOsNbgQKrg5er5HJc9x6WdfArBrFAIDT0BZ_AolOrsi-d-yooS3-dBbkcAXadGKSmGhEzTqTwrRpIpTaybNdK6Q2afDHV1ZRt2YJN0xp7Ahdvb-ig3WQ0Deke9lih-PsS-jVDyRfGhhd_nECpmMx-mUMbtT1GRGOqIfnD_---fx4-5HQ_DgA-rarxfX3jV8-XS_vVuvbr8d2Iw7fIn963Pwldo9bZCV2Rra9tLtbCXzLOuCtVBoIXZRMW22U-AsfNdQoB0-ELnoA25ydOY7CEpo-t6I0S9sCHSPSprtzn5n-TtcZfzig3zvNuJM5ssEAklz3X9EkyHfD8rwxCGkdq7_t0EygCZZmd7AmUprpvTIbwkvbPSkwnpr_nf8Gi_MgzwF37Mqjk37Om0MhjyY49g_6fqHXXQ-6jv__ef1Np4_KAltBjIuO4efdXkqbl2PPVDynNDmoQmKbjTfiGRU0g3LApRrkeHcLO2Tkfps3e-Df7-xvzf68Xi7ul6D2RSO0KTT3G-hw13ba5Ke_yZx1_Xz8N9t17Z_I9bA2ASZLEJLX-xJtwWNZoWD8SXeMo9F71-GuazkqhSWodt_1zWYmU6rlgvUyaiyh20tQvBM7fVgv99oUx-W-2Z3MZkrRrt10rAHWbfYNSq1s6fJTFvLncCipcmwrs4_uWKewA6YBZWkKQbPD9oPpHMZVRnT4g_X6j9_h5g42B3e20swtkdfs8Eho8t3KIjTpoYODHO_iD8LE1N-m5vzn6MtXjjs7LG9LE4ngveae_YlOyy3wwHs1TUlVxWUVe2XFE7OGKuODKD9YfyVq7EiUG4VnfjL3SJS_CBmHJMoLIUmUHz0yx1ck9Mp79aPIYJ1TAKGBPyBDr-BVFvuTkNHCN1gOGXXJSlYG2URk1GA5ZMGILKQsnIrMYDlk4Ygs8srJNDNYDlk01sxL6WSaeSl1yOJRgLAqK6cKEIPlkCUOWUKj0o-mIYsTg-WQpSOyLA35VGQGyyHLRmQ8S6upyAzW-Z2CBr6bQSI_8bGYJoOEscFyyHyXzKswDSYiiwyWQ0ZHmoVhMplmBsshC0aaYeVNE_p-GBksh8zJID5lgV9OE42BXxkshyxyNMvCmGfTpCs_zQyWQ-ZkEN-veBVPQxb4ocFyyBJHs7TwKU6TG_3UM1gO2TCDlBjHJY2nCZCoMFAOV-ZyVVWR4CRccWighlzUyR_oFWlRxpNwGSCHyR8xRQGbJjYMkMPkZo4kKKtqosUcpwbLIXMyB0aFn4bT7GORZ6AcrnCsWMKnCQyjWMLdyIjcKIxSL51IMWagHK54zBVMpFjEDJTDlbhcAYbeNPtKlBoohysdxXzIKZuEywA5TG7O8Hhc-dOUwL5BGlI5Ly1I47DyA28apaLMYDlkg6yRFZwlSRBavfKe7KuQZfuiSJTff1Mam4CSKP-4vPu0XAd0fr1e9zqYWQ4sdWA5pXHhvw37r_uH5e8WVuqyrudlXffeNlNOmKe7gWAB2HVtd3pPhqqz550l8LZpzLt4xUSNJZR7e2SpxEay2p73KITZs21DBCGfW25fNF0SeMZOmfdKY9O5f7gTYt0G7bXCaxo_xuFsx2cvvQ6zRj3z481Rh6yEpi3RCrprlXjtu26k0qyusbwWVvQf8-V3JpCttu-8pWAb2SotODRqM7ie-YnfwYnQ4bBl8fCwyH-Dh9-WsLpdr2-_3nz6AKub9fIeHm5t89WXD3C3_Hx793CS4fNbhyWpIjQbHpi4RyWnAR1CbbyDJTB9gvxHFgDem1ZjsyNRPjh9mGEaF146Pof6SbTjJdOPuGd0Mmc_F9Ja4r-cwMHpvin2QCi4_TgfgvzRx-5MyKq11yCxdz5Mmh0i2xC_I8ovXAGrH18Bb9rtVsJXIWe-PZk8Sk7pb7ZUvb2fFXtRl-BnXhjNg9Qz70COyS7Ky6DMgoxd4KWfeGEYZmnkX2wvmVfxooiDwPfThHlhGIQYpZgFcewFSYUX4pJ6NPR8L_I9Pwn8ecWLtKAsjXzM0qIqSOhhw0Q9r-vnZt52mwt73HiZJF4SXtSswFrZC3VKJb4crlgpJdH1RXdpDyqL_UaR0KuF0uqMooWu8fLtGxpC6XeX7PRi39WX__vZqJX3PwEAAP__U3wz7w">