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

    <tr>
        <th>Summary</th>
        <td>
            [clang] an issue with compound literals ?
        </td>
    </tr>

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

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

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

<pre>
    **Hi Humans,**

> Last year I shared an issue related to VLA and Blocks (extension) :
https://github.com/llvm/llvm-project/issues/63412

I come back for one more embarrassing, related either to C99 compound literals, or C11 _Generics or _Static_assert.

Here is a reproduction : 
https://godbolt.org/z/9dTa4YP4n

### The purpose is to be able to use static assertion within an expression.

```c
/*
** Using -std=c23.
**
** The trick is that static_assert is garanteed by the standard 
** to not produce anything :
** 
** - https://en.cppreference.com/w/c/language/_Static_assert
**
** """Otherwise, 
**      if expression does not equal zero, nothing happens; 
**      no code is emitted.
** """
**/
#define static_expr(e) \
    ( !! sizeof (struct {static_assert (e); char c;}) )

#define is_same(e1, e2)                 \
    _Generic (&(typeof_unqual (e1)) {}  \
        , typeof_unqual (e2) * : true \
        , default              : false  \
    )
```

### The issue

```c
/*
** It's OK.
**/
typeof        ((size_t) {i}) witness_one;
typeof_unqual ((size_t) {i}) witness_two;

/*
** It's OK.
**/
is_same (witness_one, (size_t) {i});
is_same (witness_two, (size_t) {i});

/*
** It's OK.
**/
static_assert (is_same (witness_one, (size_t) {i}));

/*
** It's KO.
** [clang] error: initializer element is not a compile-time constant
** [gcc  ] everything is good buddy
**/
static_expr (is_same (witness_one, (size_t) {i}));
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVl-P4jYQ_zTmZbQocYDAAw8LNL3TnbSVeq3UJ-TYA3HX2KntLMd--mqSLEtYru1uIwuI8cz85jd_PCIEvbeISzZdselmJJpYOb8MR-fVozZmVDp1WjJ-z_j9Jw2fmoOwgfF1t8OSDUtePrOf4KsIEU4oPHyGUAmPCoQFHUKD4NGIiAqig9-_3oOwClbGyccAjM_xe0QbtLOML4BlvcoqxjrQGy8YL_Y6Vk05lu7AeGHM08vXXe3dnygj40VrKTBezLJJyi_RfQbpDgilkI-wcx6cRTg4j4CHUnhPNNg94-szTNSxQk9o14sFCdeusQqMjuiFIQrAeVinKWx_Rotey0Ab21-jiFpuRQjo4_gSwif0CDqAAI-1d6qRUTtL3sJNd50qnYlj5_eMF8-MFwv1TUz--GViB7TzrFvwrUKoG1-70JqJDkoEURqkn01ACC006KCR6aOOlbYUIvxeewwUgAFkNku6JV-MFa9RbzMAfiPi4C5ExbKN5Nn48t_BScIXvZaPLbpKxB5QzxXt7oUXNiIqKE8QqxayVcIrGGiKDqyL0JGIIOyJ_Ni_Jk5_bvByB0N-0Y5lXXvcoUcrsc-rI-OFpMQSdt-IPTJeDEP6Q_cY5916oMQ56oCUI4Mj7aN3F2yDchhaZ_CvRhh4Ru9IzLrOo0rUNdrAstUNTdaBdKoNNh50jKjGtxENMPPinDgKd9q-5MWWUFEptiU4XXenyA7jc2A8ZTyFoJ_R7WgnRN_ICCxfDaPYayDEshIeJMtWLN-0SvniKnN7ADpsgzggiabkPXI6fv0MML0UHdljfMb4PJ5qdLttY1sie12L1m5OCK4UdI6t4a0Y77Det5UZfYO3BRXuRGPiFcbsHnbCBIRrChdXFfXjGm6b2Dur8HNkPA_w8GV8M9adk6_o5xRA_Yzb2POj-xAddbQYwtZZpLhdCF8w9G_C8ejOwh9F3KcEmbvERBV12_rZ4g1JAvQfJD-K9U0BvB_8O1B8ebiq8ulKUrdi0w2g985TDmqroxZGP6MHNHhA2_ZXajSivcy0wbuoDwjSWWqy8VrnXkrK4Q3gE_q-v1KHdk5B2Sh1-icqqJX8fyJulcpILTO1yBZihMs059MZT9J5OqqWs7ycCz7N1byczXc4nYhdwmWayhxzFBM-0kue8EmySGZpMp3xdJzIfKrKXArcoUhlyiYJHoQ2Yxoq6NodtZW4TJN8OuMjI0o0oZ2TOO8Y55xGJr9sp5Cy2Qc2SYwOMbyqiDqadrg6x-g8ENHt-3awAJYVo8ab5ceHnx7w05L_HQAA__9JBdKM">