diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/torture/pr48702.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr48702.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/pr48702.c b/gcc/testsuite/gcc.dg/torture/pr48702.c new file mode 100644 index 000000000..1ec371da8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48702.c @@ -0,0 +1,47 @@ +/* { dg-do run } */ + +extern void abort (void); + +#define LEN 4 + +static inline void unpack(int array[LEN]) +{ + int ii, val; + val = 1; + for (ii = 0; ii < LEN; ii++) { + array[ii] = val % 2; + val = val / 2; + } +} + +static inline int pack(int array[LEN]) +{ + int ans, ii; + ans = 0; + for (ii = LEN-1; ii >= 0; ii--) { + ans = 2 * ans + array[ii]; + } + return ans; +} + +int __attribute__((noinline)) +foo() +{ + int temp, ans; + int array[LEN]; + unpack(array); + temp = array[0]; + array[0] = array[2]; + array[2] = temp; + ans = pack(array); + return ans; +} + +int main(void) +{ + int val; + val = foo(); + if (val != 4) + abort (); + return 0; +} |