From db397e2e5a10965e953ce1801511c55fe8042295 Mon Sep 17 00:00:00 2001 From: Ilya Verbin Date: Fri, 13 Mar 2015 13:30:26 +0000 Subject: [PATCH] varpool.c (varpool_node::get_create): Don't set 'offloadable' flag for the external decls. gcc/ * varpool.c (varpool_node::get_create): Don't set 'offloadable' flag for the external decls. libgomp/ * testsuite/libgomp.fortran/declare-target-1.f90: New test. * testsuite/libgomp.fortran/declare-target-2.f90: New file. From-SVN: r221421 --- gcc/ChangeLog | 5 +++++ gcc/varpool.c | 2 +- libgomp/ChangeLog | 5 +++++ .../libgomp.fortran/declare-target-1.f90 | 15 +++++++++++++++ .../libgomp.fortran/declare-target-2.f90 | 18 ++++++++++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 libgomp/testsuite/libgomp.fortran/declare-target-1.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/declare-target-2.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8a24aecda88..5bcfdb9786d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-03-13 Ilya Verbin + + * varpool.c (varpool_node::get_create): Don't set 'offloadable' flag for + the external decls. + 2015-03-13 Kyrylo Tkachov PR target/64600 diff --git a/gcc/varpool.c b/gcc/varpool.c index b5836934d72..ce6427956d8 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -173,7 +173,7 @@ varpool_node::get_create (tree decl) node = varpool_node::create_empty (); node->decl = decl; - if ((flag_openacc || flag_openmp) + if ((flag_openacc || flag_openmp) && !DECL_EXTERNAL (decl) && lookup_attribute ("omp declare target", DECL_ATTRIBUTES (decl))) { node->offloadable = 1; diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 6237db56e4b..d6213210507 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2015-03-13 Ilya Verbin + + * testsuite/libgomp.fortran/declare-target-1.f90: New test. + * testsuite/libgomp.fortran/declare-target-2.f90: New file. + 2015-03-13 Sebastian Huber * configure.tgt (*-*-rtems*): Use local-exec TLS model. diff --git a/libgomp/testsuite/libgomp.fortran/declare-target-1.f90 b/libgomp/testsuite/libgomp.fortran/declare-target-1.f90 new file mode 100644 index 00000000000..fd9c26fde95 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/declare-target-1.f90 @@ -0,0 +1,15 @@ +! { dg-do run } +! { dg-additional-sources declare-target-2.f90 } + +module declare_target_1_mod + integer :: var_x + !$omp declare target(var_x) +end module declare_target_1_mod + + interface + subroutine foo () + end subroutine foo + end interface + + call foo () +end diff --git a/libgomp/testsuite/libgomp.fortran/declare-target-2.f90 b/libgomp/testsuite/libgomp.fortran/declare-target-2.f90 new file mode 100644 index 00000000000..f8d3ab2b606 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/declare-target-2.f90 @@ -0,0 +1,18 @@ +! Don't compile this anywhere, it is just auxiliary +! file compiled together with declare-target-1.f90 +! to verify inter-CU module handling of omp declare target. +! { dg-do compile { target { lp64 && { ! lp64 } } } } + +subroutine foo + use declare_target_1_mod + + var_x = 10 + !$omp target update to(var_x) + + !$omp target + var_x = var_x * 2; + !$omp end target + + !$omp target update from(var_x) + if (var_x /= 20) call abort +end subroutine foo