[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