Am Freitag, dem 09.08.2024 um 01:10 +0200 schrieb Alejandro Colomar via Gcc:
> Hi,
> 
> I've seen some bogus warning in GCC that suggests that some use of auto
> may cause undefined behavior (due to double evaluation).
> 
> $ cat auto.c 
> #include <stdio.h>
> 
> int
> main(void)
> {
>       int  i = 3;
>       int  a[2 * i];
>       int  (*p)[2 * i];
> 
>       i = 1;
>       p = &a;
>       auto q = p + i++; 
> }
> $ gcc -Wsequence-point -std=c23 auto.c 
> auto.c: In function ‘main’:
> auto.c:12:23: warning: operation on ‘i’ may be undefined [-Wsequence-point]
>    12 |         auto q = p + i++;
>       |                      ~^~
> 
> 
> I originally found this problem here:
> <https://software.codidact.com/comments/thread/9880#comment-24855>
> 
> And I suspect the warning is confusing auto with typeof().  If typeof()
> was used, this would indeed cause double evaluation, once before the =
> and once after the =, causing UB.
> 
> Maybe it's due to how auto is implemented?  I suspect it's doing
> internally:
> 
>       typeof(p + i++) q = p + i++;
> 
> and that would be problematic.  I can reproduce it with both gcc-13 and
> gcc-14.
> 

Can you file a bug if there isn't one already?  

BTW: Double evaluation is not only a problem for semantics, but also because
it can cause long compile times, cf. the 45 MB macro expansion example
in Linux...

Martin




Reply via email to