[Committed] Add two testcases for 1bit bit-field
Andrew Pinski
pinskia@gmail.com
Thu Jan 2 20:27:00 GMT 2020
Hi,
While working an optimization, the optimization would produce wrong
code but I noticed there was no testcase for that case at all.
Committed as obvious.
Thanks,
Andrew Pinski
ChangeLog:
* gcc.c-torture/execute/bitfld-8.c: New testcase.
* gcc.c-torture/execute/bitfld-9.c: New testcase.
-------------- next part --------------
Index: gcc.c-torture/execute/bitfld-8.c
===================================================================
--- gcc.c-torture/execute/bitfld-8.c (nonexistent)
+++ gcc.c-torture/execute/bitfld-8.c (working copy)
@@ -0,0 +1,63 @@
+struct mouse_button_str {
+ unsigned char left : 1;
+ unsigned char right : 1;
+ unsigned char middle : 1;
+ } button;
+
+static char fct (struct mouse_button_str newbutton) __attribute__ ((__noipa__));
+static char
+fct (struct mouse_button_str newbutton)
+{
+ char l = newbutton.left;
+ char r = newbutton.right;
+ char m = newbutton.middle;
+ return l || r || m;
+}
+
+int main(void)
+{
+ struct mouse_button_str newbutton1;
+ newbutton1.left = 1;
+ newbutton1.middle = 1;
+ newbutton1.right = 1;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+
+ newbutton1.left = 0;
+ newbutton1.middle = 1;
+ newbutton1.right = 1;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 1;
+ newbutton1.middle = 0;
+ newbutton1.right = 1;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 1;
+ newbutton1.middle = 1;
+ newbutton1.right = 0;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+
+
+ newbutton1.left = 1;
+ newbutton1.middle = 0;
+ newbutton1.right = 0;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 0;
+ newbutton1.middle = 1;
+ newbutton1.right = 0;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 0;
+ newbutton1.middle = 0;
+ newbutton1.right = 1;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 0;
+ newbutton1.middle = 0;
+ newbutton1.right = 0;
+ if (fct (newbutton1))
+ __builtin_abort ();
+}
\ No newline at end of file
Index: gcc.c-torture/execute/bitfld-9.c
===================================================================
--- gcc.c-torture/execute/bitfld-9.c (nonexistent)
+++ gcc.c-torture/execute/bitfld-9.c (working copy)
@@ -0,0 +1,63 @@
+struct mouse_button_str {
+ unsigned char left : 1;
+ unsigned char right : 1;
+ unsigned char middle : 1;
+ } button;
+
+static char fct (struct mouse_button_str newbutton) __attribute__ ((__noipa__));
+static char
+fct (struct mouse_button_str newbutton)
+{
+ char l = newbutton.left;
+ char r = newbutton.right;
+ char m = newbutton.middle;
+ return l && r && m;
+}
+
+int main(void)
+{
+ struct mouse_button_str newbutton1;
+ newbutton1.left = 1;
+ newbutton1.middle = 1;
+ newbutton1.right = 1;
+ if (!fct (newbutton1))
+ __builtin_abort ();
+
+ newbutton1.left = 0;
+ newbutton1.middle = 1;
+ newbutton1.right = 1;
+ if (fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 1;
+ newbutton1.middle = 0;
+ newbutton1.right = 1;
+ if (fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 1;
+ newbutton1.middle = 1;
+ newbutton1.right = 0;
+ if (fct (newbutton1))
+ __builtin_abort ();
+
+
+ newbutton1.left = 1;
+ newbutton1.middle = 0;
+ newbutton1.right = 0;
+ if (fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 0;
+ newbutton1.middle = 1;
+ newbutton1.right = 0;
+ if (fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 0;
+ newbutton1.middle = 0;
+ newbutton1.right = 1;
+ if (fct (newbutton1))
+ __builtin_abort ();
+ newbutton1.left = 0;
+ newbutton1.middle = 0;
+ newbutton1.right = 0;
+ if (fct (newbutton1))
+ __builtin_abort ();
+}
More information about the Gcc-patches
mailing list