aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/sra-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/compile/sra-1.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/compile/sra-1.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/sra-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/sra-1.c
new file mode 100644
index 000000000..59213039f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/sra-1.c
@@ -0,0 +1,73 @@
+/* Let gimple verifier check what SRA does to unions and single-field
+ strucutres . */
+
+struct sim_struct
+{
+ int x;
+};
+
+extern struct sim_struct get_x(void);
+
+struct sim_struct foo (void)
+{
+ struct sim_struct simple;
+
+ simple = get_x ();
+ if (simple.x % 2)
+ simple.x = 39;
+ else
+ simple.x -=8;
+
+ return simple;
+}
+
+struct sim_cmplx
+{
+ _Complex double c;
+};
+
+extern struct sim_cmplx get_sc (void);
+
+_Complex double foo_c (void)
+{
+ struct sim_cmplx simple;
+
+ simple = get_sc ();
+ if (__real__ simple.c > 200.3)
+ __imag__ simple.c -= 2.4;
+
+ return simple.c;
+}
+
+
+union sim_union
+{
+ int i;
+ float d;
+};
+
+extern union sim_union get_y (void);
+
+union sim_union bar (void)
+{
+ union sim_union simple;
+
+ simple = get_y ();
+ if (simple.d > 8.2)
+ simple.i = 300;
+
+ return simple;
+}
+
+extern int get_int (void);
+
+int bar_i (void)
+{
+ union sim_union simple;
+
+ simple = get_y ();
+ if (simple.d > 8.2)
+ simple.i = get_int ();
+
+ return simple.i;
+}