diff options
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 5 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.c/pr46193.c | 67 |
2 files changed, 72 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 39c67aff423..71e1fbaae42 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2015-08-29 Tom de Vries <tom@codesourcery.com> + + PR tree-optimization/46193 + * testsuite/libgomp.c/pr46193.c: New test. + 2015-08-24 Nathan Sidwell <nathan@codesourcery.com> libgomp/ diff --git a/libgomp/testsuite/libgomp.c/pr46193.c b/libgomp/testsuite/libgomp.c/pr46193.c new file mode 100644 index 00000000000..1e27faf8500 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr46193.c @@ -0,0 +1,67 @@ +/* { dg-do run } */ +/* { dg-additional-options "-ftree-parallelize-loops=2" } */ + +extern void abort (void); + +char * +foo (int count, char **list) +{ + char *minaddr = list[0]; + int i; + + for (i = 0; i < count; i++) + { + char *addr = list[i]; + if (addr < minaddr) + minaddr = addr; + } + + return minaddr; +} + +char * +foo2 (int count, char **list) +{ + char *maxaddr = list[0]; + int i; + + for (i = 0; i < count; i++) + { + char *addr = list[i]; + if (addr > maxaddr) + maxaddr = addr; + } + + return maxaddr; +} + +#define N 5 + +static void +init (char **list) +{ + int i; + for (i = 0; i < N; ++i) + list[i] = (char *)&list[i]; +} + +int +main (void) +{ + char *list[N]; + char * res; + + init (list); + + res = foo (N, list); + + if (res != (char *)&list[0]) + abort (); + + res = foo2 (N, list); + + if (res != (char *)&list[N-1]) + abort (); + + return 0; +} |