Viewing file: vector1.C (1.15 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/19263 // { dg-do run } // { dg-options "-O2 -fpermissive" } // { dg-prune-output "narrowing" }
typedef signed char v8qi __attribute__ ((vector_size (8)));
extern "C" void abort (void);
static unsigned char S[16];
struct A { int i; v8qi j, k; int l; };
void foo (unsigned char v) { A a = { 1, { v, v, v, v, v, v, v, v }, { v + 1, v + 1, v + 1, v + 1, v + 1, v + 1, v + 1, v + 1 }, 3 }; v8qi *s = (v8qi *) &S[0]; *s = a.j; s[1] = a.k; }
void bar (unsigned char v) { v8qi val8 = { v, v, v, v, v, v, v, v }; v8qi *s = (v8qi *) &S[0]; *s = val8; }
int n = 5, cnt;
int num (void) { ++cnt; return n; }
void baz (void) { static A a = { 0, { num (), num (), num (), num (), 6, 6, 6, 6 }, { 7, 7, 7, 7, 8, 8, 8, 8 }, 0 }; v8qi *s = (v8qi *) &S[0]; *s = a.j; s[1] = a.k; }
int main () { int i; foo (1); for (i = 0; i < 8; ++i) if (S[i] != 1) abort (); for (; i < 16; ++i) if (S[i] != 2) abort (); bar (3); for (i = 0; i < 8; ++i) if (S[i] != 3) abort (); return 0; baz (); if (cnt != 4) abort (); for (i = 0; i < 16; ++i) if (S[i] != 5 + (i / 4)) abort (); return 0; }
|