aboutsummaryrefslogtreecommitdiff
path: root/SingleSource/Regression/C/gcc-c-torture/execute/pr78170.c
diff options
context:
space:
mode:
Diffstat (limited to 'SingleSource/Regression/C/gcc-c-torture/execute/pr78170.c')
-rw-r--r--SingleSource/Regression/C/gcc-c-torture/execute/pr78170.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/SingleSource/Regression/C/gcc-c-torture/execute/pr78170.c b/SingleSource/Regression/C/gcc-c-torture/execute/pr78170.c
new file mode 100644
index 00000000..dce8a3ee
--- /dev/null
+++ b/SingleSource/Regression/C/gcc-c-torture/execute/pr78170.c
@@ -0,0 +1,39 @@
+/* { dg-require-effective-target int32plus } */
+
+/* PR tree-optimization/78170.
+ Check that sign-extended store to a bitfield
+ doesn't overwrite other fields. */
+
+int a, b, d;
+
+struct S0
+{
+ int f0;
+ int f1;
+ int f2;
+ int f3;
+ int f4;
+ int f5:15;
+ int f6:17;
+ int f7:2;
+ int f8:30;
+} c;
+
+void fn1 ()
+{
+ d = b = 1;
+ for (; b; b = a)
+ {
+ struct S0 e = { 0, 0, 0, 0, 0, 0, 1, 0, 1 };
+ c = e;
+ c.f6 = -1;
+ }
+}
+
+int main ()
+{
+ fn1 ();
+ if (c.f7 != 0)
+ __builtin_abort ();
+ return 0;
+}