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.

Have a lovely night!
Alex


-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature

Reply via email to