Initial OpenACC support to C++ front-end -- tests
* gcc/testsuite/c-c++-common/goacc/deviceptr-1.c: Move to ... * gcc/testsuite/gcc.dg/goacc/deviceptr-1.c ... here. * gcc/testsuite/g++.dg/goacc/goacc.exp: New test directory. * gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp: Likewise. gcc/testsuite/g++.dg/goacc/ * deviceptr-1.cpp: New test. * sb-1.cpp: Likewise. * sb-2.cpp: Likewise.
>From c7cbe59516a1c21cfbad48863311e6eeeed5389c Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov <i.usma...@samsung.com> Date: Fri, 7 Mar 2014 15:12:30 +0400 Subject: [PATCH 2/2] Initial OpenACC support to C++ front-end -- tests --- gcc/testsuite/c-c++-common/goacc/deviceptr-1.c | 64 ------------------------- gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp | 39 ++++++++++++++++ gcc/testsuite/g++.dg/goacc/deviceptr-1.cpp | 65 ++++++++++++++++++++++++++ gcc/testsuite/g++.dg/goacc/goacc.exp | 38 +++++++++++++++ gcc/testsuite/g++.dg/goacc/sb-1.cpp | 59 +++++++++++++++++++++++ gcc/testsuite/g++.dg/goacc/sb-2.cpp | 25 ++++++++++ gcc/testsuite/gcc.dg/goacc/deviceptr-1.c | 64 +++++++++++++++++++++++++ 7 files changed, 290 insertions(+), 64 deletions(-) delete mode 100644 gcc/testsuite/c-c++-common/goacc/deviceptr-1.c create mode 100644 gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp create mode 100644 gcc/testsuite/g++.dg/goacc/deviceptr-1.cpp create mode 100644 gcc/testsuite/g++.dg/goacc/goacc.exp create mode 100644 gcc/testsuite/g++.dg/goacc/sb-1.cpp create mode 100644 gcc/testsuite/g++.dg/goacc/sb-2.cpp create mode 100644 gcc/testsuite/gcc.dg/goacc/deviceptr-1.c diff --git a/gcc/testsuite/c-c++-common/goacc/deviceptr-1.c b/gcc/testsuite/c-c++-common/goacc/deviceptr-1.c deleted file mode 100644 index 1ac63bd..0000000 --- a/gcc/testsuite/c-c++-common/goacc/deviceptr-1.c +++ /dev/null @@ -1,64 +0,0 @@ -void -fun1 (void) -{ -#pragma acc parallel deviceptr(u) /* { dg-error "'u' undeclared" } */ - ; -#pragma acc kernels deviceptr(u[0:4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */ - ; - -#pragma acc data deviceptr(fun1) /* { dg-error "'fun1' is not a variable" } */ - ; -#pragma acc parallel deviceptr(fun1[2:5]) - /* { dg-error "'fun1' is not a variable" "not a variable" { target *-*-* } 11 } */ - /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 11 } */ - ; - - int i; -#pragma acc kernels deviceptr(i) /* { dg-error "'i' is not a pointer variable" } */ - ; -#pragma acc data deviceptr(i[0:4]) - /* { dg-error "'i' is not a pointer variable" "not a pointer variable" { target *-*-* } 19 } */ - /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 19 } */ - ; - - float fa[10]; -#pragma acc parallel deviceptr(fa) /* { dg-error "'fa' is not a pointer variable" } */ - ; -#pragma acc kernels deviceptr(fa[1:5]) - /* { dg-error "'fa' is not a pointer variable" "not a pointer variable" { target *-*-* } 27 } */ - /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 27 } */ - ; - - float *fp; -#pragma acc data deviceptr(fp) - ; -#pragma acc parallel deviceptr(fp[0:4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */ - ; -} - -void -fun2 (void) -{ - int i; - float *fp; -#pragma acc kernels deviceptr(fp,u,fun2,i,fp) - /* { dg-error "'u' undeclared" "u undeclared" { target *-*-* } 44 } */ - /* { dg-error "'fun2' is not a variable" "fun2 not a variable" { target *-*-* } 44 } */ - /* { dg-error "'i' is not a pointer variable" "i not a pointer variable" { target *-*-* } 44 } */ - /* { dg-error "'fp' appears more than once in map clauses" "fp more than once" { target *-*-* } 44 } */ - ; -} - -void -fun3 (void) -{ - float *fp; -#pragma acc data deviceptr(fp,fp) /* { dg-error "'fp' appears more than once in map clauses" } */ - ; -#pragma acc parallel deviceptr(fp) deviceptr(fp) /* { dg-error "'fp' appears more than once in map clauses" } */ - ; -#pragma acc kernels copy(fp) deviceptr(fp) /* { dg-error "'fp' appears more than once in map clauses" } */ - ; -} - -/* { dg-prune-output "sorry, unimplemented: data clause not yet implemented" } */ diff --git a/gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp b/gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp new file mode 100644 index 0000000..0658b4a --- /dev/null +++ b/gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp @@ -0,0 +1,39 @@ +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# GCC testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib g++-dg.exp + +if { ![check_effective_target_fopenacc] \ + || ![check_effective_target_fopenmp] } { + return +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [concat \ + [find $srcdir/$subdir *.c] \ + [find $srcdir/$subdir *.cpp] \ + [find $srcdir/c-c++-common/goacc-gomp *.c]]] "" "-fopenacc -fopenmp" + +# All done. +dg-finish diff --git a/gcc/testsuite/g++.dg/goacc/deviceptr-1.cpp b/gcc/testsuite/g++.dg/goacc/deviceptr-1.cpp new file mode 100644 index 0000000..814af70 --- /dev/null +++ b/gcc/testsuite/g++.dg/goacc/deviceptr-1.cpp @@ -0,0 +1,65 @@ +void +fun1 (void) +{ +#pragma acc parallel deviceptr(u) /* { dg-error "'u' has not been declared" } */ + ; +#pragma acc kernels deviceptr(u[0:4]) /* { dg-error "'u' has not been declared" } */ + /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 6 } */ + ; + +#pragma acc data deviceptr(fun1) /* { dg-error "'void fun1\\\(\\\)' is not a variable" } */ + ; +#pragma acc parallel deviceptr(fun1[2:5]) + /* { dg-error "'void fun1\\\(\\\)' is not a variable" "not a variable" { target *-*-* } 12 } */ + /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 12 } */ + ; + + int i; +#pragma acc kernels deviceptr(i) /* { dg-error "'i' is not a pointer variable" } */ + ; +#pragma acc data deviceptr(i[0:4]) + /* { dg-error "'i' is not a pointer variable" "not a pointer variable" { target *-*-* } 20 } */ + /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 20 } */ + ; + + float fa[10]; +#pragma acc parallel deviceptr(fa) /* { dg-error "'fa' is not a pointer variable" } */ + ; +#pragma acc kernels deviceptr(fa[1:5]) + /* { dg-error "'fa' is not a pointer variable" "not a pointer variable" { target *-*-* } 28 } */ + /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 28 } */ + ; + + float *fp; +#pragma acc data deviceptr(fp) + ; +#pragma acc parallel deviceptr(fp[0:4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */ + ; +} + +void +fun2 (void) +{ + int i; + float *fp; +#pragma acc kernels deviceptr(fp,u,fun2,i,fp) + /* { dg-error "'u' has not been declared" "u undeclared" { target *-*-* } 45 } */ + /* { dg-error "'void fun2\\\(\\\)' is not a variable" "fun2 not a variable" { target *-*-* } 45 } */ + /* { dg-error "'i' is not a pointer variable" "i not a pointer variable" { target *-*-* } 45 } */ + /* { dg-error "'fp' appears more than once in map clauses" "fp more than once" { target *-*-* } 45 } */ + ; +} + +void +fun3 (void) +{ + float *fp; +#pragma acc data deviceptr(fp,fp) /* { dg-error "'fp' appears more than once in map clauses" } */ + ; +#pragma acc parallel deviceptr(fp) deviceptr(fp) /* { dg-error "'fp' appears more than once in map clauses" } */ + ; +#pragma acc kernels copy(fp) deviceptr(fp) /* { dg-error "'fp' appears more than once in map clauses" } */ + ; +} + +/* { dg-prune-output "sorry, unimplemented: data clause not yet implemented" } */ diff --git a/gcc/testsuite/g++.dg/goacc/goacc.exp b/gcc/testsuite/g++.dg/goacc/goacc.exp new file mode 100644 index 0000000..6e320fc --- /dev/null +++ b/gcc/testsuite/g++.dg/goacc/goacc.exp @@ -0,0 +1,38 @@ +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# GCC testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib g++-dg.exp + +if ![check_effective_target_fopenacc] { + return +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [concat \ + [find $srcdir/$subdir *.c] \ + [find $srcdir/$subdir *.cpp] \ + [find $srcdir/c-c++-common/goacc *.c]]] "" "-fopenacc" + +# All done. +dg-finish diff --git a/gcc/testsuite/g++.dg/goacc/sb-1.cpp b/gcc/testsuite/g++.dg/goacc/sb-1.cpp new file mode 100644 index 0000000..6dbb21a --- /dev/null +++ b/gcc/testsuite/g++.dg/goacc/sb-1.cpp @@ -0,0 +1,59 @@ +// { dg-do compile } + +void foo() +{ + bad1: + #pragma acc parallel + goto bad1; // { dg-error "invalid branch to/from OpenACC structured block" } + #pragma acc kernels + goto bad1; // { dg-error "invalid branch to/from OpenACC structured block" } + #pragma acc data + goto bad1; // { dg-error "invalid branch to/from OpenACC structured block" } + goto bad2_parallel; // { dg-error "invalid entry to OpenACC structured block" } +// { dg-error "from here" "from here" { target *-*-* } 12 } + #pragma acc parallel + { + bad2_parallel: ; // { dg-error "jump to label" } +// { dg-error "enters OpenMP structured block" "enters OpenMP structured block" { target *-*-* } 16 } + } + + goto bad2_kernels; // { dg-error "invalid entry to OpenACC structured block" } +// { dg-error "from here" "from here" { target *-*-* } 20 } + #pragma acc kernels + { + bad2_kernels: ; // { dg-error "jump to label" } +// { dg-error "enters OpenMP structured block" "enters OpenMP structured block" { target *-*-* } 24 } + } + + goto bad2_data; // { dg-error "invalid entry to OpenACC structured block" } +// { dg-error "from here" "from here" { target *-*-* } 28 } + #pragma acc data + { + bad2_data: ; // { dg-error "jump to label" } +// { dg-error "enters OpenMP structured block" "enters OpenMP structured block" { target *-*-* } 32 } + } + + #pragma acc parallel + { + int i; + goto ok1_parallel; + for (i = 0; i < 10; ++i) + { ok1_parallel: break; } + } + + #pragma acc kernels + { + int i; + goto ok1_kernels; + for (i = 0; i < 10; ++i) + { ok1_kernels: break; } + } + + #pragma acc data + { + int i; + goto ok1_data; + for (i = 0; i < 10; ++i) + { ok1_data: break; } + } +} diff --git a/gcc/testsuite/g++.dg/goacc/sb-2.cpp b/gcc/testsuite/g++.dg/goacc/sb-2.cpp new file mode 100644 index 0000000..cc36394 --- /dev/null +++ b/gcc/testsuite/g++.dg/goacc/sb-2.cpp @@ -0,0 +1,25 @@ +// { dg-do compile } + +void foo(int i) +{ + switch (i) + { + #pragma acc parallel + { case 0:; } // { dg-error "enters OpenMP structured block" } +// { dg-error "jump to case label" "jump to case label" { target *-*-* } 8 } + } + + switch (i) + { + #pragma acc kernels + { case 0:; } // { dg-error "enters OpenMP structured block" } +// { dg-error "jump to case label" "jump to case label" { target *-*-* } 15 } + } + + switch (i) + { + #pragma acc data + { case 0:; } // { dg-error "enters OpenMP structured block" } +// { dg-error "jump to case label" "jump to case label" { target *-*-* } 22 } + } +} diff --git a/gcc/testsuite/gcc.dg/goacc/deviceptr-1.c b/gcc/testsuite/gcc.dg/goacc/deviceptr-1.c new file mode 100644 index 0000000..1ac63bd --- /dev/null +++ b/gcc/testsuite/gcc.dg/goacc/deviceptr-1.c @@ -0,0 +1,64 @@ +void +fun1 (void) +{ +#pragma acc parallel deviceptr(u) /* { dg-error "'u' undeclared" } */ + ; +#pragma acc kernels deviceptr(u[0:4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */ + ; + +#pragma acc data deviceptr(fun1) /* { dg-error "'fun1' is not a variable" } */ + ; +#pragma acc parallel deviceptr(fun1[2:5]) + /* { dg-error "'fun1' is not a variable" "not a variable" { target *-*-* } 11 } */ + /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 11 } */ + ; + + int i; +#pragma acc kernels deviceptr(i) /* { dg-error "'i' is not a pointer variable" } */ + ; +#pragma acc data deviceptr(i[0:4]) + /* { dg-error "'i' is not a pointer variable" "not a pointer variable" { target *-*-* } 19 } */ + /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 19 } */ + ; + + float fa[10]; +#pragma acc parallel deviceptr(fa) /* { dg-error "'fa' is not a pointer variable" } */ + ; +#pragma acc kernels deviceptr(fa[1:5]) + /* { dg-error "'fa' is not a pointer variable" "not a pointer variable" { target *-*-* } 27 } */ + /* { dg-error "expected '\\\)' before '\\\[' token" "array" { target *-*-* } 27 } */ + ; + + float *fp; +#pragma acc data deviceptr(fp) + ; +#pragma acc parallel deviceptr(fp[0:4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */ + ; +} + +void +fun2 (void) +{ + int i; + float *fp; +#pragma acc kernels deviceptr(fp,u,fun2,i,fp) + /* { dg-error "'u' undeclared" "u undeclared" { target *-*-* } 44 } */ + /* { dg-error "'fun2' is not a variable" "fun2 not a variable" { target *-*-* } 44 } */ + /* { dg-error "'i' is not a pointer variable" "i not a pointer variable" { target *-*-* } 44 } */ + /* { dg-error "'fp' appears more than once in map clauses" "fp more than once" { target *-*-* } 44 } */ + ; +} + +void +fun3 (void) +{ + float *fp; +#pragma acc data deviceptr(fp,fp) /* { dg-error "'fp' appears more than once in map clauses" } */ + ; +#pragma acc parallel deviceptr(fp) deviceptr(fp) /* { dg-error "'fp' appears more than once in map clauses" } */ + ; +#pragma acc kernels copy(fp) deviceptr(fp) /* { dg-error "'fp' appears more than once in map clauses" } */ + ; +} + +/* { dg-prune-output "sorry, unimplemented: data clause not yet implemented" } */ -- 1.8.3.2