test case:

#include <stdio.h>

typedef struct {
  unsigned int a;
  unsigned int b;
  unsigned int c;
  unsigned int d;
} Head;

void f()
{
  unsigned int offsetVar=sizeof(Head);

  Head h={
    1,
    2,
    offsetVar, 
    offsetVar+=sizeof(unsigned int)
  };

  printf("%d\t%d\t%d\t%d\n", h.a, h.b, h.c, h.d);
}

int main()
{
  f();
  return 0;
}

expected results:
1       2       16      20

actual results:
1       2       20      20

declaring offsetVar as volatile hides the problem


-- 
           Summary: wrong struct initialization with non-constant
                    expressions
           Product: gcc
           Version: 4.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: disinbox at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37725

Reply via email to