https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119251
--- Comment #3 from Alejandro Colomar <alx at kernel dot org> ---
(In reply to Jakub Jelinek from comment #1)
> How is compound literal different from any other automatic variable?
> And of course taking the address of compound literal when used in scope is
> just fine and heavily used in real-world.
Automatic variables are declared in a block that fully contains the call in
which it is used.
Compound literals are not declared, and thus using them inside a macro that
contains ({}) will result in a surprisingly shorter lifetime.
alx@devuan:~/tmp$ cat cl.c | grep -Tn ^
1: void *f(void *p) {return p;}
2:
3: #define g(x) ({ f(x); })
4:
5: int
6: main(void)
7: {
8: int i = 7;
9: int *p;
10:
11: // Okay
12: p = g(&i);
13:
14: // Not okay
15: p = g(&(int){42});
16:
17: return *p;
18: }
alx@devuan:~/tmp$ gcc -Wall -Wextra cl.c
alx@devuan:~/tmp$ ./a.out; echo $?
42
AFAIK, this program has UB, and that 42 is unreliable.