aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20050604-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20050604-1.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20050604-1.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20050604-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20050604-1.c
new file mode 100644
index 000000000..70097aa14
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20050604-1.c
@@ -0,0 +1,39 @@
+/* PR regression/21897 */
+
+extern void abort (void);
+
+typedef short v4hi __attribute__ ((vector_size (8)));
+typedef float v4sf __attribute__ ((vector_size (16)));
+
+union
+{
+ v4hi v;
+ short s[4];
+} u;
+
+union
+{
+ v4sf v;
+ float f[4];
+} v;
+
+void
+foo (void)
+{
+ unsigned int i;
+ for (i = 0; i < 2; i++)
+ u.v += (v4hi) { 12, 14 };
+ for (i = 0; i < 2; i++)
+ v.v += (v4sf) { 18.0, 20.0, 22 };
+}
+
+int
+main (void)
+{
+ foo ();
+ if (u.s[0] != 24 || u.s[1] != 28 || u.s[2] || u.s[3])
+ abort ();
+ if (v.f[0] != 36.0 || v.f[1] != 40.0 || v.f[2] != 44.0 || v.f[3] != 0.0)
+ abort ();
+ return 0;
+}