diff options
Diffstat (limited to 'gcc/testsuite')
20 files changed, 489 insertions, 18 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fb43d809e49..73e4a5e6c2a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,27 @@ +2008-06-06 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/gomp/collapse-1.c: New test. + * gcc.dg/gomp/nesting-1.c: New test. + * g++.dg/gomp/task-1.C: New test. + * g++.dg/gomp/predetermined-1.C: New test. + * g++.dg/gomp/tls-4.C: New test. + * gfortran.dg/gomp/collapse1.f90: New test. + * gfortran.dg/gomp/sharing-3.f90: New test. + * gcc.dg/gomp/pr27499.c (foo): Remove is unsigned dg-warning. + * g++.dg/gomp/pr27499.C (foo): Likewise. + * g++.dg/gomp/for-16.C (foo): Likewise. + * g++.dg/gomp/tls-3.C: Remove dg-error, add S::s definition. + * g++.dg/gomp/pr34607.C: Adjust dg-error location. + * g++.dg/gomp/for-16.C (foo): Add a new dg-error. + * gcc.dg/gomp/appendix-a/a.35.4.c: Add dg-warning. + * gcc.dg/gomp/appendix-a/a.35.6.c: Likewise. + * gfortran.dg/gomp/appendix-a/a.35.4.f90: Likewise. + * gfortran.dg/gomp/appendix-a/a.35.6.f90: Likewise. + * gfortran.dg/gomp/omp_parse1.f90: Remove !$omp tab test. + * gfortran.dg/gomp/appendix-a/a.33.4.f90: Remove dg-error + about allocatable array. + * gfortran.dg/gomp/reduction1.f90: Likewise. + 2008-06-06 Richard Guenther <rguenther@suse.de> * gcc.dg/tree-ssa/alias-18.c: XFAIL some sub-tests. diff --git a/gcc/testsuite/g++.dg/gomp/for-16.C b/gcc/testsuite/g++.dg/gomp/for-16.C index 76231751f70..dbbed8fe505 100644 --- a/gcc/testsuite/g++.dg/gomp/for-16.C +++ b/gcc/testsuite/g++.dg/gomp/for-16.C @@ -4,7 +4,7 @@ template<typename T> void foo () { #pragma omp for - for (unsigned int i = 0; i < 10; i++); // { dg-warning "is unsigned" } + for (unsigned int i = 0; i < 10; i++); #pragma omp for for (int j = 0; ; j++); // { dg-error "missing controlling predicate" } #pragma omp for @@ -12,8 +12,7 @@ void foo () #pragma omp for for (int l = 0; l < 10; ); // { dg-error "missing increment expression" } #pragma omp for - for (int m = 0; m < 10; m *= 3); // Error here is emitted only during - // instantiation + for (int m = 0; m < 10; m *= 3); // { dg-error "invalid increment expression" } #pragma omp for for (T n = 0; ; n++); // { dg-error "missing controlling predicate" } #pragma omp for diff --git a/gcc/testsuite/g++.dg/gomp/pr27499.C b/gcc/testsuite/g++.dg/gomp/pr27499.C index 293ef8fb08e..4e0d5b1a5b8 100644 --- a/gcc/testsuite/g++.dg/gomp/pr27499.C +++ b/gcc/testsuite/g++.dg/gomp/pr27499.C @@ -8,6 +8,6 @@ foo (void) { unsigned int i; #pragma omp for - for (i = 0; i < 64; ++i) // { dg-warning "is unsigned" } + for (i = 0; i < 64; ++i) bar (i); } diff --git a/gcc/testsuite/g++.dg/gomp/pr34607.C b/gcc/testsuite/g++.dg/gomp/pr34607.C index 1dbba4a7414..f032aa45d50 100644 --- a/gcc/testsuite/g++.dg/gomp/pr34607.C +++ b/gcc/testsuite/g++.dg/gomp/pr34607.C @@ -13,6 +13,6 @@ foo () ; T j; // { dg-error "was not declared|expected" } #pragma omp for - for (j = 1; j < 3; j++) // { dg-error "was not declared" } - ; // { dg-error "expected" } + for (j = 1; j < 3; j++) // { dg-error "was not declared|expected" } + ; } diff --git a/gcc/testsuite/g++.dg/gomp/predetermined-1.C b/gcc/testsuite/g++.dg/gomp/predetermined-1.C new file mode 100644 index 00000000000..dd09855de97 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/predetermined-1.C @@ -0,0 +1,33 @@ +// { dg-do compile } +// { dg-options "-fopenmp" } + +struct A { int i; A (); ~A (); }; +struct B { int i; }; +struct C { int i; mutable int j; C (); ~C (); }; + +template <typename T> void bar (const T *); + +const A a; +const C c; + +const A foo (const A d, const C e) +{ + const A f; + const B b = { 4 }; + A g; + #pragma omp parallel default (none) + bar (&a); + #pragma omp parallel default (none) + bar (&b); + #pragma omp parallel default (none) // { dg-error "enclosing parallel" } + bar (&c); // { dg-error "not specified" } + #pragma omp parallel default (none) + bar (&d); + #pragma omp parallel default (none) // { dg-error "enclosing parallel" } + bar (&e); // { dg-error "not specified" } + #pragma omp parallel default (none) + bar (&f); + #pragma omp parallel default (none) // { dg-error "enclosing parallel" } + bar (&g); // { dg-error "not specified" } + return f; +} diff --git a/gcc/testsuite/g++.dg/gomp/task-1.C b/gcc/testsuite/g++.dg/gomp/task-1.C new file mode 100644 index 00000000000..0000e6f1fa9 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/task-1.C @@ -0,0 +1,17 @@ +// { dg-do compile } +// { dg-options "-fopenmp" } + +struct A { A (); ~A (); int i; }; + +template <typename T> void bar (T &); + +const A a; + +void foo (A &p) +{ + const A &q = a; +#pragma omp task // { dg-error "has reference type" } + bar (p); +#pragma omp task // { dg-error "has reference type" } + bar (q); +} diff --git a/gcc/testsuite/g++.dg/gomp/tls-3.C b/gcc/testsuite/g++.dg/gomp/tls-3.C index 96baec9453e..04f6bbea408 100644 --- a/gcc/testsuite/g++.dg/gomp/tls-3.C +++ b/gcc/testsuite/g++.dg/gomp/tls-3.C @@ -13,9 +13,11 @@ namespace N struct S { static int s; -#pragma omp thr (s) // { dg-error "is not file, namespace or block scope" } +#pragma omp thr (s) }; +int S::s = 5; + int foo () { diff --git a/gcc/testsuite/g++.dg/gomp/tls-4.C b/gcc/testsuite/g++.dg/gomp/tls-4.C new file mode 100644 index 00000000000..e4377c5e4c0 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/tls-4.C @@ -0,0 +1,16 @@ +// { dg-do compile } +// { dg-require-effective-target tls_native } + +#define thr threadprivate + +struct S +{ + static int s; +}; +struct T : public S +{ + static int t; +#pragma omp thr (s) // { dg-error "directive not in" } +}; + +#pragma omp thr (T::t) // { dg-error "directive not in" } diff --git a/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c b/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c index 88824031cc2..d7579e6e735 100644 --- a/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c +++ b/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c @@ -11,7 +11,7 @@ wrong4 (int n) { work (i, 0); /* incorrect nesting of barrier region in a loop region */ -#pragma omp barrier +#pragma omp barrier /* { dg-warning "may not be closely nested" } */ work (i, 1); } } diff --git a/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c b/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c index 6385db30897..ac850e5410a 100644 --- a/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c +++ b/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c @@ -9,7 +9,7 @@ wrong6 (int n) { work (n, 0); /* incorrect nesting of barrier region in a single region */ -#pragma omp barrier +#pragma omp barrier /* { dg-warning "may not be closely nested" } */ work (n, 1); } } diff --git a/gcc/testsuite/gcc.dg/gomp/collapse-1.c b/gcc/testsuite/gcc.dg/gomp/collapse-1.c new file mode 100644 index 00000000000..89b76bb669c --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/collapse-1.c @@ -0,0 +1,92 @@ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +int i, j, k; +extern int foo (void); + +void +f1 (void) +{ + #pragma omp for collapse (2) + for (i = 0; i < 5; i++) + ; /* { dg-error "not enough perfectly nested" } */ + { + for (j = 0; j < 5; j++) + ; + } +} + +void +f2 (void) +{ + #pragma omp for collapse (2) + for (i = 0; i < 5; i++) + { + { + { + for (j = 0; j < 5; j++) + { + } + } + } + } +} + +void +f3 (void) +{ + #pragma omp for collapse (2) + for (i = 0; i < 5; i++) + { + int k = foo (); /* { dg-error "not enough perfectly nested" } */ + { + { + for (j = 0; j < 5; j++) + { + } + } + } + } +} + +void +f4 (void) +{ + #pragma omp for collapse (2) + for (i = 0; i < 5; i++) + { + { + for (j = 0; j < 5; j++) + ; + foo (); /* { dg-error "collapsed loops not perfectly nested before" } */ + } + } +} + +void +f5 (void) +{ + #pragma omp for collapse (2) + for (i = 0; i < 5; i++) + { + { + for (j = 0; j < 5; j++) + ; + } + foo (); /* { dg-error "collapsed loops not perfectly nested before" } */ + } +} + +void +f6 (void) +{ + #pragma omp for collapse (2) + for (i = 0; i < 5; i++) + { + { + for (j = 0; j < 5; j++) + ; + } + } + foo (); +} diff --git a/gcc/testsuite/gcc.dg/gomp/nesting-1.c b/gcc/testsuite/gcc.dg/gomp/nesting-1.c new file mode 100644 index 00000000000..6f27b907e6b --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/nesting-1.c @@ -0,0 +1,198 @@ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +void +f1 (void) +{ + int i, j; + #pragma omp for + for (i = 0; i < 3; i++) + { + #pragma omp for /* { dg-warning "may not be closely nested" } */ + for (j = 0; j < 3; j++) + ; + #pragma omp sections /* { dg-warning "may not be closely nested" } */ + { + ; + #pragma omp section + ; + } + #pragma omp single /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp master /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp barrier /* { dg-warning "may not be closely nested" } */ + } + #pragma omp sections + { + #pragma omp for /* { dg-warning "may not be closely nested" } */ + for (j = 0; j < 3; j++) + ; + #pragma omp sections /* { dg-warning "may not be closely nested" } */ + { + ; + #pragma omp section + ; + } + #pragma omp single /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp master /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp section + ; + } + #pragma omp single + { + #pragma omp for /* { dg-warning "may not be closely nested" } */ + for (j = 0; j < 3; j++) + ; + #pragma omp sections /* { dg-warning "may not be closely nested" } */ + { + ; + #pragma omp section + ; + } + #pragma omp single /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp master /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp barrier /* { dg-warning "may not be closely nested" } */ + } + #pragma omp master + { + #pragma omp for /* { dg-warning "may not be closely nested" } */ + for (j = 0; j < 3; j++) + ; + #pragma omp sections /* { dg-warning "may not be closely nested" } */ + { + ; + #pragma omp section + ; + } + #pragma omp single /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp master + ; + #pragma omp barrier /* { dg-warning "may not be closely nested" } */ + } + #pragma omp task + { + #pragma omp for /* { dg-warning "may not be closely nested" } */ + for (j = 0; j < 3; j++) + ; + #pragma omp sections /* { dg-warning "may not be closely nested" } */ + { + ; + #pragma omp section + ; + } + #pragma omp single /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp master /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp barrier /* { dg-warning "may not be closely nested" } */ + } + #pragma omp parallel + { + #pragma omp for + for (j = 0; j < 3; j++) + ; + #pragma omp sections + { + ; + #pragma omp section + ; + } + #pragma omp single + ; + #pragma omp master + ; + #pragma omp barrier + } +} + +void +f2 (void) +{ + int i, j; + #pragma omp ordered + { + #pragma omp for /* { dg-warning "may not be closely nested" } */ + for (j = 0; j < 3; j++) + ; + #pragma omp sections /* { dg-warning "may not be closely nested" } */ + { + ; + #pragma omp section + ; + } + #pragma omp single /* { dg-warning "may not be closely nested" } */ + ; + #pragma omp master + ; + #pragma omp barrier /* { dg-warning "may not be closely nested" } */ + } +} + +void +f3 (void) +{ + #pragma omp critical + { + #pragma omp ordered /* { dg-warning "may not be closely nested" } */ + ; + } +} + +void +f4 (void) +{ + #pragma omp task + { + #pragma omp ordered /* { dg-warning "may not be closely nested" } */ + ; + } +} + +void +f5 (void) +{ + int i; + #pragma omp for + for (i = 0; i < 10; i++) + { + #pragma omp ordered /* { dg-warning "must be closely nested" } */ + ; + } + #pragma omp for ordered + for (i = 0; i < 10; i++) + { + #pragma omp ordered + ; + } +} + +void +f6 (void) +{ + #pragma omp critical (foo) + #pragma omp critical (bar) + ; + #pragma omp critical + #pragma omp critical (baz) + ; +} + +void +f7 (void) +{ + #pragma omp critical (foo2) + #pragma omp critical + ; + #pragma omp critical (bar) + #pragma omp critical (bar) /* { dg-warning "may not be nested" } */ + ; + #pragma omp critical + #pragma omp critical /* { dg-warning "may not be nested" } */ + ; +} diff --git a/gcc/testsuite/gcc.dg/gomp/pr27499.c b/gcc/testsuite/gcc.dg/gomp/pr27499.c index e8c1db496d7..0de2e0686f1 100644 --- a/gcc/testsuite/gcc.dg/gomp/pr27499.c +++ b/gcc/testsuite/gcc.dg/gomp/pr27499.c @@ -8,6 +8,6 @@ foo (void) { unsigned int i; #pragma omp parallel for - for (i = 0; i < 64; ++i) /* { dg-warning "is unsigned" } */ + for (i = 0; i < 64; ++i) bar (i); } diff --git a/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.4.f90 b/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.4.f90 index 9685b5939c8..7a9e1840b24 100644 --- a/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.4.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.4.f90 @@ -4,7 +4,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: A REAL, DIMENSION(:), POINTER :: B ALLOCATE (A(N)) -!$OMP SINGLE ! { dg-error "COPYPRIVATE clause object 'a'" } +!$OMP SINGLE ALLOCATE (B(N)) READ (11) A,B !$OMP END SINGLE COPYPRIVATE(A,B) diff --git a/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.4.f90 b/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.4.f90 index e44952263f1..f130dd5f480 100644 --- a/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.4.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.4.f90 @@ -8,7 +8,7 @@ DO I = 1, N CALL WORK(I, 1) ! incorrect nesting of barrier region in a loop region -!$OMP BARRIER +!$OMP BARRIER ! { dg-warning "may not be closely nested" } CALL WORK(I, 2) END DO !$OMP END PARALLEL diff --git a/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.6.f90 b/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.6.f90 index 0488537dd10..62ba245236b 100644 --- a/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.6.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.35.6.f90 @@ -6,7 +6,7 @@ !$OMP SINGLE CALL WORK(N,1) ! incorrect nesting of barrier region in a single region -!$OMP BARRIER +!$OMP BARRIER ! { dg-warning "may not be closely nested" } CALL WORK(N,2) !$OMP END SINGLE !$OMP END PARALLEL diff --git a/gcc/testsuite/gfortran.dg/gomp/collapse1.f90 b/gcc/testsuite/gfortran.dg/gomp/collapse1.f90 new file mode 100644 index 00000000000..f16a780ad99 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/collapse1.f90 @@ -0,0 +1,57 @@ +! { dg-do compile } +! { dg-options "-fopenmp" } + +subroutine collapse1 + integer :: i, j, k, a(1:3, 4:6, 5:7) + real :: r + logical :: l + integer, save :: thr + !$omp threadprivate (thr) + l = .false. + a(:, :, :) = 0 + !$omp parallel do collapse(4) schedule(static, 4) ! { dg-error "not enough DO loops for collapsed" } + do i = 1, 3 + do j = 4, 6 + do k = 5, 7 + a(i, j, k) = i + j + k + end do + end do + end do + !$omp parallel do collapse(2) + do i = 1, 5, 2 + do j = i + 1, 7, i ! { dg-error "collapsed loops don.t form rectangular iteration space" } + end do + end do + !$omp parallel do collapse(2) shared(j) + do i = 1, 3 + do j = 4, 6 ! { dg-error "iteration variable present on clause other than PRIVATE or LASTPRIVATE" } + end do + end do + !$omp parallel do collapse(2) + do i = 1, 3 + do j = 4, 6 + end do + k = 4 + end do + !$omp parallel do collapse(2) + do i = 1, 3 + do ! { dg-error "cannot be a DO WHILE or DO without loop control" } + end do + end do + !$omp parallel do collapse(2) + do i = 1, 3 + do r = 4, 6 ! { dg-warning "must be integer" } + end do + end do +end subroutine collapse1 + +subroutine collapse1_2 + integer :: i + !$omp parallel do collapse(2) + do i = -6, 6 ! { dg-error "cannot be redefined inside loop beginning" } + do i = 4, 6 ! { dg-error "collapsed loops don.t form rectangular iteration space|cannot be redefined" } + end do + end do +end subroutine collapse1_2 + +! { dg-error "iteration variable must be of type integer" "integer" { target *-*-* } 43 } diff --git a/gcc/testsuite/gfortran.dg/gomp/omp_parse1.f90 b/gcc/testsuite/gfortran.dg/gomp/omp_parse1.f90 index d4137cd11ec..3ab43670762 100644 --- a/gcc/testsuite/gfortran.dg/gomp/omp_parse1.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/omp_parse1.f90 @@ -14,10 +14,6 @@ call bar !$omp rallel call bar !$omp end parallel -! Non-continuation !$omp must be followed by space, and my reading -! doesn't seem to allow tab there. So such lines should be completely -! ignored. -!$omp strange ! { dg-warning "starts a commented line" } end ! { dg-final { scan-tree-dump-times "pragma omp parallel" 3 "omplower" } } diff --git a/gcc/testsuite/gfortran.dg/gomp/reduction1.f90 b/gcc/testsuite/gfortran.dg/gomp/reduction1.f90 index 108e5dc4155..9c55d173c11 100644 --- a/gcc/testsuite/gfortran.dg/gomp/reduction1.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/reduction1.f90 @@ -56,7 +56,7 @@ common /blk/ i1 !$omp end parallel !$omp parallel reduction (*:p1) ! { dg-error "POINTER object" } !$omp end parallel -!$omp parallel reduction (-:aa1) ! { dg-error "is ALLOCATABLE" } +!$omp parallel reduction (-:aa1) !$omp end parallel !$omp parallel reduction (*:ia1) ! { dg-error "Assumed size" } !$omp end parallel diff --git a/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 b/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 new file mode 100644 index 00000000000..5c1581454b2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 @@ -0,0 +1,37 @@ +! { dg-do compile } +! { dg-options "-fopenmp" } + +subroutine foo (vara, varb, varc, vard, n) + integer :: n, vara(n), varb(*), varc(:), vard(6), vare(6) + vare(:) = 0 + !$omp parallel default(none) shared(vara, varb, varc, vard, vare) + !$omp master + vara(1) = 1 + varb(1) = 1 + varc(1) = 1 + vard(1) = 1 + vare(1) = 1 + !$omp end master + !$omp end parallel + !$omp parallel default(none) private(vara, varc, vard, vare) + vara(1) = 1 + varc(1) = 1 + vard(1) = 1 + vare(1) = 1 + !$omp end parallel + !$omp parallel default(none) firstprivate(vara, varc, vard, vare) + vara(1) = 1 + varc(1) = 1 + vard(1) = 1 + vare(1) = 1 + !$omp end parallel + !$omp parallel default(none) ! { dg-error "enclosing parallel" } + !$omp master + vara(1) = 1 ! { dg-error "not specified" } + varb(1) = 1 ! Assumed-size is predetermined + varc(1) = 1 ! { dg-error "not specified" "" { xfail *-*-* } } + vard(1) = 1 ! { dg-error "not specified" } + vare(1) = 1 ! { dg-error "not specified" } + !$omp end master + !$omp end parallel +end subroutine foo |

