https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72835
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to work| |6.1.0
Target Milestone|--- |7.0
Summary|[Regression 7] Incorrect |[7 Regression] Incorrect
|arithmetic optimization |arithmetic optimization
|involving bitfield |involving bitfield
|arguments |arguments
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
C testcase:
struct struct_1 {
unsigned int m1 : 6 ;
unsigned int m2 : 24 ;
unsigned int m3 : 6 ;
};
unsigned short var_32 = 0x2d10;
struct struct_1 s1;
void init () {
s1.m1 = 4;
s1.m2 = 0x7ca4b8;
s1.m3 = 24;
}
void foo () {
unsigned int c =
// 0x7ca4b8 * -(24)
((unsigned int) s1.m2) * (-((unsigned int) s1.m3))
+
// 0x2d10 * -(4) = 0xb440
(var_32) * (-((unsigned int) (s1.m1)));
if (c != 4098873984)
__builtin_abort ();
}
int main () {
init ();
foo ();
return 0;
}