diff --git a/src/cil.ml b/src/cil.ml index d1d3edc78..b0fedc8f6 100755 --- a/src/cil.ml +++ b/src/cil.ml @@ -2358,6 +2358,7 @@ and intOfAttrparam (a:attrparam) : int option = match a with AInt(n) -> n | ABinOp(Shiftlt, a1, a2) -> (doit a1) lsl (doit a2) + | ABinOp(Mult, a1, a2) -> (doit a1) * (doit a2) | ABinOp(Div, a1, a2) -> (doit a1) / (doit a2) | ASizeOf(t) -> let bs = bitsSizeOf t in diff --git a/test/small1/attr-multiplication.c b/test/small1/attr-multiplication.c new file mode 100644 index 000000000..f6c4ffb89 --- /dev/null +++ b/test/small1/attr-multiplication.c @@ -0,0 +1,8 @@ +struct S1 { + char a; +} __attribute__((aligned(sizeof(short) * sizeof(int)))); + + +struct S2 { + int x: __builtin_choose_expr(__alignof__ (struct S1) == sizeof(short) * sizeof(int), 1, -1); +} s2; \ No newline at end of file diff --git a/test/testcil.pl b/test/testcil.pl index 07ac32d9d..ec7259669 100644 --- a/test/testcil.pl +++ b/test/testcil.pl @@ -225,6 +225,7 @@ sub addToGroup { addTest("test/attr11 _GNUCC=1"); addTest("test/attr12 _GNUCC=1"); addTest("test/attr13 _GNUCC=1"); +addTest("test/attr-multiplication"); # addTest("test/attr-assign"); # TODO: only on OSX, Linux GCC errors on introduced # addTest("test/attr-enumerator"); # TODO: only on OSX, Linux GCC errors on introduced addTest("testrun/packed _GNUCC=1 WARNINGS_ARE_ERRORS=1");