The program below, which is a slight variation of a program from C99
section 6.5.3.4, contains an execution-time sizeof operator and its
argument should thus be evaluated. Nevertheless, "i" in not incremented.
I would expect "i=1" to be printed. I get "i=0".
(Sun's C compiler seems to do the same thing.)
#include <stdio.h>
size_t fsize3 (int n)
{
int i = 0;
char b[1][n+3]; // Variable length array.
size_t s = sizeof (b[i++]); // Execution time sizeof.
printf ("i=%d\n", i);
return s;
}
int main()
{
size_t size;
size = fsize3(10);
return 0;
}
--
Summary: Execution-time sizeof drops side effects
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: terra at gnome dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: sparc-sun-solaris2.8
GCC host triplet: sparc-sun-solaris2.8
GCC target triplet: sparc-sun-solaris2.8
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18740