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

Reply via email to