===================================================================
@@ -1,3 +1,7 @@
+2016-01-XX James Norris <jnorris@codesourcery.com>
+
+ * c-parser.c (build_external_ref): Add usage check.
+
2016-01-06 David Malcolm <dmalcolm@redhat.com>
* c-parser.c (c_parser_unary_expression): For dereferences, build
===================================================================
@@ -2677,6 +2677,26 @@
tree ref;
tree decl = lookup_name (id);
+ if (decl
+ && decl != error_mark_node
+ && current_function_decl
+ && TREE_CODE (decl) == VAR_DECL
+ && is_global_var (decl)
+ && get_oacc_fn_attrib (current_function_decl))
+ {
+ /* Validate data type for use with routine directive. */
+ if (lookup_attribute ("omp declare target link",
+ DECL_ATTRIBUTES (decl))
+ || ((!lookup_attribute ("omp declare target",
+ DECL_ATTRIBUTES (decl))
+ && ((TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
+ || (!TREE_STATIC (decl) && DECL_EXTERNAL (decl))))))
+ {
+ error_at (loc, "invalid use in %<routine%> function");
+ return error_mark_node;
+ }
+ }
+
/* In Objective-C, an instance variable (ivar) may be preferred to
whatever lookup_name() found. */
decl = objc_lookup_ivar (decl, id);
===================================================================
@@ -1,3 +1,7 @@
+2016-01-XX James Norris <jnorris@codesourcery.com>
+
+ * semantics.c (finish_id_expression): Add usage check.
+
2016-01-12 Marek Polacek <polacek@redhat.com>
PR c++/68979
===================================================================
@@ -3712,6 +3712,25 @@
decl = convert_from_reference (decl);
}
+
+ if (decl != error_mark_node
+ && current_function_decl
+ && TREE_CODE (decl) == VAR_DECL
+ && is_global_var (decl)
+ && get_oacc_fn_attrib (current_function_decl))
+ {
+ /* Validate data type for use with routine directive. */
+ if (lookup_attribute ("omp declare target link",
+ DECL_ATTRIBUTES (decl))
+ || ((!lookup_attribute ("omp declare target",
+ DECL_ATTRIBUTES (decl))
+ && ((TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
+ || (!TREE_STATIC (decl) && DECL_EXTERNAL (decl))))))
+ {
+ *error_msg = "invalid use in %<routine%> function";
+ return error_mark_node;
+ }
+ }
}
return cp_expr (decl, location);
===================================================================
@@ -1,3 +1,7 @@
+2016-01-XX James Norris <jnorris@codesourcery.com>
+
+ * c-c++-common/goacc/routine-5.c: Additional tests.
+
2016-01-13 H.J. Lu <hongjiu.lu@intel.com>
* gcc.target/i386/pr69225-7.c: New test.
===================================================================
@@ -45,3 +45,49 @@
#pragma acc routine (a) /* { dg-error "does not refer to" } */
#pragma acc routine (c) /* { dg-error "does not refer to" } */
+
+float vb1;
+
+#pragma acc routine
+int
+func1 (int a)
+{
+ vb1 = a + 1; /* { dg-error "invalid use in" } */
+
+ return vb1; /* { dg-error "invalid use in" } */
+}
+
+#pragma acc routine
+int
+func2 (int a)
+{
+ static int vb2;
+
+ vb2 = a + 1; /* { dg-error "invalid use in" } */
+
+ return vb2; /* { dg-error "invalid use in" } */
+}
+
+float vb3;
+#pragma acc declare link (vb3)
+
+#pragma acc routine
+int
+func3 (int a)
+{
+ vb3 = a + 1; /* { dg-error "invalid use in" } */
+
+ return vb3; /* { dg-error "invalid use in" } */
+}
+
+float vb4;
+#pragma acc declare create (vb4)
+
+#pragma acc routine
+int
+func4 (int a)
+{
+ vb4 = a + 1;
+
+ return vb4;
+}
===================================================================
@@ -1,3 +1,7 @@
+2016-01-XX James Norris <jnorris@codesourcery.com>
+
+ * testsuite/libgomp.oacc-c-c++-common/declare-4.c: Fix test.
+
2016-01-12 James Norris <jnorris@codesourcery.com>
* libgomp.texi: Updates for OpenACC.
===================================================================
@@ -4,7 +4,7 @@
#include <openacc.h>
float b;
-#pragma acc declare link (b)
+#pragma acc declare create (b)
#pragma acc routine
int