From 4bd8b1e881f0c26a5103cd1919809b3d63b60ef2 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@codesourcery.com>
Date: Thu, 26 Aug 2021 16:55:21 +0200
Subject: [PATCH] Document current '-Wuninitialized'/'-Wmaybe-uninitialized'
 diagnostics for OpenACC test cases

... including "note: '[...]' was declared here" emitted since recent
commit 9695e1c23be5b5c55d572ced152897313ddb96ae
"Improve -Wuninitialized note location".

For those that seemed incorrect to me, I've placed XFAILed 'dg-bogus'es,
including one more instance of PR77504 etc., and several instances where
for "local variables" of reference-data-type reductions (etc.?) we emit
bogus (?) diagnostics.

For implicit data clauses (including 'firstprivate'), we seem to be missing
diagnostics, so I've placed XFAILed 'dg-warning's.

	gcc/testsuite/
	* c-c++-common/goacc/builtin-goacc-parlevel-id-size.c: Document
	current '-Wuninitialized' diagnostics.
	* c-c++-common/goacc/mdc-1.c: Likewise.
	* c-c++-common/goacc/nested-reductions-1-kernels.c: Likewise.
	* c-c++-common/goacc/nested-reductions-1-parallel.c: Likewise.
	* c-c++-common/goacc/nested-reductions-1-routine.c: Likewise.
	* c-c++-common/goacc/nested-reductions-2-kernels.c: Likewise.
	* c-c++-common/goacc/nested-reductions-2-parallel.c: Likewise.
	* c-c++-common/goacc/nested-reductions-2-routine.c: Likewise.
	* c-c++-common/goacc/uninit-dim-clause.c: Likewise.
	* c-c++-common/goacc/uninit-firstprivate-clause.c: Likewise.
	* c-c++-common/goacc/uninit-if-clause.c: Likewise.
	* gfortran.dg/goacc/array-with-dt-1.f90: Likewise.
	* gfortran.dg/goacc/array-with-dt-2.f90: Likewise.
	* gfortran.dg/goacc/array-with-dt-3.f90: Likewise.
	* gfortran.dg/goacc/array-with-dt-4.f90: Likewise.
	* gfortran.dg/goacc/array-with-dt-5.f90: Likewise.
	* gfortran.dg/goacc/derived-chartypes-1.f90: Likewise.
	* gfortran.dg/goacc/derived-chartypes-2.f90: Likewise.
	* gfortran.dg/goacc/derived-chartypes-3.f90: Likewise.
	* gfortran.dg/goacc/derived-chartypes-4.f90: Likewise.
	* gfortran.dg/goacc/derived-classtypes-1.f95: Likewise.
	* gfortran.dg/goacc/derived-types-2.f90: Likewise.
	* gfortran.dg/goacc/host_data-tree.f95: Likewise.
	* gfortran.dg/goacc/kernels-tree.f95: Likewise.
	* gfortran.dg/goacc/modules.f95: Likewise.
	* gfortran.dg/goacc/nested-reductions-1-kernels.f90: Likewise.
	* gfortran.dg/goacc/nested-reductions-1-parallel.f90: Likewise.
	* gfortran.dg/goacc/nested-reductions-1-routine.f90: Likewise.
	* gfortran.dg/goacc/nested-reductions-2-kernels.f90: Likewise.
	* gfortran.dg/goacc/nested-reductions-2-parallel.f90: Likewise.
	* gfortran.dg/goacc/nested-reductions-2-routine.f90: Likewise.
	* gfortran.dg/goacc/parallel-tree.f95: Likewise.
	* gfortran.dg/goacc/pr93464.f90: Likewise.
	* gfortran.dg/goacc/privatization-1-compute-loop.f90: Likewise.
	* gfortran.dg/goacc/privatization-1-compute.f90: Likewise.
	* gfortran.dg/goacc/privatization-1-routine_gang-loop.f90:
	Likewise.
	* gfortran.dg/goacc/privatization-1-routine_gang.f90: Likewise.
	* gfortran.dg/goacc/uninit-dim-clause.f95: Likewise.
	* gfortran.dg/goacc/uninit-firstprivate-clause.f95: Likewise.
	* gfortran.dg/goacc/uninit-if-clause.f95: Likewise.
	* gfortran.dg/goacc/uninit-use-device-clause.f95: Likewise.
	* gfortran.dg/goacc/wait.f90: Likewise.
	libgomp/
	* testsuite/libgomp.oacc-c-c++-common/vred2d-128.c: Document
	current '-Wuninitialized' diagnostics.
	* testsuite/libgomp.oacc-fortran/data-5.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/gemm-2.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/gemm.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/optional-reduction.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/parallel-reduction.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/pr70643.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/pr96628-part1.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/reduction-5.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/reduction-7.f90: Likewise.
	* testsuite/libgomp.oacc-fortran/reference-reductions.f90:
	Likewise.
---
 .../goacc/builtin-goacc-parlevel-id-size.c    |  8 +++++
 gcc/testsuite/c-c++-common/goacc/mdc-1.c      |  4 +++
 .../goacc/nested-reductions-1-kernels.c       | 11 ++++++
 .../goacc/nested-reductions-1-parallel.c      | 14 ++++++++
 .../goacc/nested-reductions-1-routine.c       |  4 +++
 .../goacc/nested-reductions-2-kernels.c       | 11 ++++++
 .../goacc/nested-reductions-2-parallel.c      | 14 ++++++++
 .../goacc/nested-reductions-2-routine.c       |  4 +++
 .../c-c++-common/goacc/uninit-dim-clause.c    |  6 ++++
 .../goacc/uninit-firstprivate-clause.c        |  1 +
 .../c-c++-common/goacc/uninit-if-clause.c     |  8 +++++
 .../gfortran.dg/goacc/array-with-dt-1.f90     |  5 +++
 .../gfortran.dg/goacc/array-with-dt-2.f90     |  5 +++
 .../gfortran.dg/goacc/array-with-dt-3.f90     |  8 +++++
 .../gfortran.dg/goacc/array-with-dt-4.f90     |  5 +++
 .../gfortran.dg/goacc/array-with-dt-5.f90     |  4 +++
 .../gfortran.dg/goacc/derived-chartypes-1.f90 |  2 ++
 .../gfortran.dg/goacc/derived-chartypes-2.f90 |  2 ++
 .../gfortran.dg/goacc/derived-chartypes-3.f90 | 12 +++++++
 .../gfortran.dg/goacc/derived-chartypes-4.f90 | 12 +++++++
 .../goacc/derived-classtypes-1.f95            |  2 ++
 .../gfortran.dg/goacc/derived-types-2.f90     |  2 ++
 .../gfortran.dg/goacc/host_data-tree.f95      |  4 +++
 .../gfortran.dg/goacc/kernels-tree.f95        |  4 +++
 gcc/testsuite/gfortran.dg/goacc/modules.f95   |  4 ++-
 .../goacc/nested-reductions-1-kernels.f90     | 11 ++++++
 .../goacc/nested-reductions-1-parallel.f90    | 14 ++++++++
 .../goacc/nested-reductions-1-routine.f90     |  4 +++
 .../goacc/nested-reductions-2-kernels.f90     | 11 ++++++
 .../goacc/nested-reductions-2-parallel.f90    | 14 ++++++++
 .../goacc/nested-reductions-2-routine.f90     |  4 +++
 .../gfortran.dg/goacc/parallel-tree.f95       | 10 ++++--
 gcc/testsuite/gfortran.dg/goacc/pr93464.f90   |  9 +++--
 .../goacc/privatization-1-compute-loop.f90    |  3 ++
 .../goacc/privatization-1-compute.f90         | 12 +++++--
 .../privatization-1-routine_gang-loop.f90     |  3 ++
 .../goacc/privatization-1-routine_gang.f90    |  2 ++
 .../gfortran.dg/goacc/uninit-dim-clause.f95   |  6 ++++
 .../goacc/uninit-firstprivate-clause.f95      |  1 +
 .../gfortran.dg/goacc/uninit-if-clause.f95    |  4 +++
 .../goacc/uninit-use-device-clause.f95        |  1 +
 gcc/testsuite/gfortran.dg/goacc/wait.f90      |  4 +++
 .../libgomp.oacc-c-c++-common/vred2d-128.c    | 36 ++++++++++++++++++-
 .../testsuite/libgomp.oacc-fortran/data-5.f90 |  4 +++
 .../testsuite/libgomp.oacc-fortran/gemm-2.f90 |  4 +++
 .../testsuite/libgomp.oacc-fortran/gemm.f90   |  4 +++
 .../optional-reduction.f90                    | 10 ++++++
 .../parallel-reduction.f90                    |  8 ++++-
 .../libgomp.oacc-fortran/pr70643.f90          |  6 +++-
 .../libgomp.oacc-fortran/pr96628-part1.f90    |  5 +++
 .../libgomp.oacc-fortran/privatized-ref-2.f90 |  8 +++++
 .../libgomp.oacc-fortran/reduction-5.f90      | 14 ++++++++
 .../libgomp.oacc-fortran/reduction-7.f90      |  6 ++++
 .../reference-reductions.f90                  |  6 ++++
 54 files changed, 368 insertions(+), 12 deletions(-)

diff --git a/gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size.c b/gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size.c
index 5cda8189fb8..19d6c21d077 100644
--- a/gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size.c
+++ b/gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size.c
@@ -1,6 +1,8 @@
 /* { dg-do compile }  */
 /* { dg-additional-options "-O2" }  */
 
+/* { dg-additional-options -Wuninitialized } */
+
 #include "../../../../include/gomp-constants.h"
 
 #pragma acc routine
@@ -8,6 +10,7 @@ int
 foo (void)
 {
   int res;
+  /* { dg-note {'res' was declared here} {} { target *-*-* } .-1 } */
   
   __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
   __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
@@ -18,6 +21,7 @@ foo (void)
   __builtin_goacc_parlevel_size (GOMP_DIM_VECTOR);
 
   res += __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
+  /* { dg-warning {'res' is used uninitialized} {} { target *-*-* } .-1 } */
   res += __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
   res += __builtin_goacc_parlevel_id (GOMP_DIM_VECTOR);
 
@@ -34,6 +38,8 @@ foo2 (void)
   int res;
 
 #pragma acc parallel
+  /* implicit 'firstprivate (res)'
+     { dg-warning {'res' is used uninitialized} TODO { xfail *-*-* } .-2 } */
   {
     __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
     __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
@@ -59,6 +65,8 @@ foo3 (void)
   int res;
 
 #pragma acc kernels
+  /* implicit 'copy (res)'
+     { dg-warning {'res' is used uninitialized} TODO { xfail *-*-* } .-2 } */
   {
     __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
     __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
diff --git a/gcc/testsuite/c-c++-common/goacc/mdc-1.c b/gcc/testsuite/c-c++-common/goacc/mdc-1.c
index c2b8dc6c880..923a4ea73a3 100644
--- a/gcc/testsuite/c-c++-common/goacc/mdc-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/mdc-1.c
@@ -5,6 +5,8 @@
    { dg-do compile { target { lp64 || llp64 } } } */
 /* { dg-additional-options "-fdump-tree-omplower" } */
 
+/* { dg-additional-options -Wuninitialized } */
+
 void
 t1 ()
 {
@@ -13,10 +15,12 @@ t1 ()
   } s;
 
   int *a, *z;
+  /* { dg-note {'z' was declared here} {} { target *-*-* } .-1 } */
 
 #pragma acc enter data copyin(s)
   {
 #pragma acc data copy(s.a[0:10]) copy(z[0:10])
+    /* { dg-warning {'z' is used uninitialized} {} { target *-*-* } .-1 } */
     {
       s.e = z;
 #pragma acc parallel loop attach(s.e)
diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c
index 9323e2c8d7e..e669369f134 100644
--- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c
+++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c
@@ -2,11 +2,16 @@
 
 /* See also 'gfortran.dg/goacc/nested-reductions-1-kernels.f90'. */
 
+/* { dg-additional-options -Wuninitialized } */
+
 void acc_kernels (void)
 {
   int i, j, k, sum, diff;
 
   #pragma acc kernels
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   {
     #pragma acc loop reduction(+:sum)
     for (i = 0; i < 10; i++)
@@ -74,6 +79,9 @@ void acc_kernels_loop (void)
   int i, j, k, l, sum, diff;
 
   #pragma acc kernels loop
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     #pragma acc loop reduction(+:sum)
@@ -151,6 +159,9 @@ void acc_kernels_loop_reduction (void)
   int i, j, k, sum, diff;
 
   #pragma acc kernels loop reduction(+:sum)
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     for (i = 0; i < 10; i++)
diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c
index ce1d0a13527..1182385a6a7 100644
--- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c
+++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c
@@ -2,11 +2,16 @@
 
 /* See also 'gfortran.dg/goacc/nested-reductions-1-parallel.f90'. */
 
+/* { dg-additional-options -Wuninitialized } */
+
 void acc_parallel (void)
 {
   int i, j, k, sum, diff;
 
   #pragma acc parallel
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   {
     #pragma acc loop reduction(+:sum)
     for (i = 0; i < 10; i++)
@@ -74,6 +79,9 @@ void acc_parallel_loop (void)
   int i, j, k, l, sum, diff;
 
   #pragma acc parallel loop
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     #pragma acc loop reduction(+:sum)
@@ -143,6 +151,9 @@ void acc_parallel_reduction (void)
   int i, j, k, sum, diff;
 
   #pragma acc parallel reduction(+:sum)
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   {
     for (i = 0; i < 10; i++)
       for (j = 0; j < 10; j++)
@@ -233,6 +244,9 @@ void acc_parallel_loop_reduction (void)
   int i, j, k, sum, diff;
 
   #pragma acc parallel loop reduction(+:sum)
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     for (i = 0; i < 10; i++)
diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c
index 45b8cf3451f..df72cd1e616 100644
--- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c
+++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c
@@ -2,6 +2,8 @@
 
 /* See also 'gfortran.dg/goacc/nested-reductions-1-routine.f90'. */
 
+/* { dg-additional-options -Wuninitialized } */
+
 #pragma acc routine gang
 void acc_routine (void)
 {
@@ -10,6 +12,7 @@ void acc_routine (void)
   {
     /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */
     #pragma acc loop reduction(+:sum)
+    /* { dg-warning {'sum' is used uninitialized} {} { target *-*-* } .-1 } */
     for (i = 0; i < 10; i++)
       for (j = 0; j < 10; j++)
         for (k = 0; k < 10; k++)
@@ -57,6 +60,7 @@ void acc_routine (void)
 
     /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */
     #pragma acc loop reduction(+:sum) reduction(-:diff)
+    /* { dg-warning {'diff' is used uninitialized} {} { target *-*-* } .-1 } */
     for (i = 0; i < 10; i++)
       {
         #pragma acc loop reduction(+:sum)
diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c
index dec7dbda45d..16a870b4a48 100644
--- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c
+++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c
@@ -2,11 +2,16 @@
 
 /* See also 'gfortran.dg/goacc/nested-reductions-2-kernels.f90'. */
 
+/* { dg-additional-options -Wuninitialized } */
+
 void acc_kernels (void)
 {
   int i, j, k, l, sum, diff;
 
   #pragma acc kernels
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   {
     #pragma acc loop reduction(+:sum)
     for (i = 0; i < 10; i++)
@@ -99,6 +104,9 @@ void acc_kernels_loop (void)
   int i, j, k, l, sum, diff;
 
   #pragma acc kernels loop
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     #pragma acc loop reduction(+:sum)
@@ -209,6 +217,9 @@ void acc_kernels_loop_reduction (void)
   int i, j, k, l, sum, diff;
 
   #pragma acc kernels loop reduction(+:sum)
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." }
diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c
index 1f6b4e78293..840ed86adef 100644
--- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c
+++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c
@@ -2,11 +2,16 @@
 
 /* See also 'gfortran.dg/goacc/nested-reductions-2-parallel.f90'. */
 
+/* { dg-additional-options -Wuninitialized } */
+
 void acc_parallel (void)
 {
   int i, j, k, l, sum, diff;
 
   #pragma acc parallel
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   {
     #pragma acc loop reduction(+:sum)
     for (i = 0; i < 10; i++)
@@ -99,6 +104,9 @@ void acc_parallel_loop (void)
   int i, j, k, l, sum, diff;
 
   #pragma acc parallel loop
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     #pragma acc loop reduction(+:sum)
@@ -201,6 +209,9 @@ void acc_parallel_reduction (void)
   int i, j, k, l, sum, diff;
 
   #pragma acc parallel reduction(+:sum)
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   {
     #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." }
     for (i = 0; i < 10; i++)
@@ -293,6 +304,9 @@ void acc_parallel_loop_reduction (void)
   int i, j, k, l, sum, diff;
 
   #pragma acc parallel loop reduction(+:sum)
+  /* implicit 'copy (sum, diff)'
+     { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+     { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 } */
   for (int h = 0; h < 10; ++h)
   {
     #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." }
diff --git a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c
index 3b2b0275ec8..dd03c8597c5 100644
--- a/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c
+++ b/gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c
@@ -2,6 +2,8 @@
 
 /* See also 'gfortran.dg/goacc/nested-reductions-2-routine.f90'. */
 
+/* { dg-additional-options -Wuninitialized } */
+
 #pragma acc routine gang
 void acc_routine (void)
 {
@@ -10,6 +12,7 @@ void acc_routine (void)
   {
     /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */
     #pragma acc loop reduction(+:sum)
+    /* { dg-warning {'sum' is used uninitialized} {} { target *-*-* } .-1 } */
     for (i = 0; i < 10; i++)
       #pragma acc loop // { dg-warning "nested loop in reduction needs reduction clause for .sum." }
       for (j = 0; j < 10; j++)
@@ -83,6 +86,7 @@ void acc_routine (void)
 
     /* { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 } */
     #pragma acc loop reduction(+:sum) reduction(-:diff)
+    /* { dg-warning {'diff' is used uninitialized} {} { target *-*-* } .-1 } */
     for (i = 0; i < 10; i++)
       {
         #pragma acc loop reduction(-:diff) // { dg-warning "nested loop in reduction needs reduction clause for .sum." }
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
index d9b143bb108..8368ccdc7f8 100644
--- a/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
@@ -6,6 +6,9 @@
 void acc_parallel()
 {
   int i, j, k;
+  /* { dg-note {'i' was declared here} {} { target *-*-* } .-1 } */
+  /* { dg-note {'j' was declared here} {} { target *-*-* } .-2 } */
+  /* { dg-note {'k' was declared here} {} { target *-*-* } .-3 } */
 
   #pragma acc parallel num_gangs(i) /* { dg-warning "is used uninitialized" } */
   /* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */
@@ -23,6 +26,9 @@ void acc_parallel()
 void acc_kernels()
 {
   int i, j, k;
+  /* { dg-note {'i' was declared here} {} { target *-*-* } .-1 } */
+  /* { dg-note {'j' was declared here} {} { target *-*-* } .-2 } */
+  /* { dg-note {'k' was declared here} {} { target *-*-* } .-3 } */
 
   #pragma acc kernels num_gangs(i) /* { dg-warning "is used uninitialized" } */
   ;
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
index 334567d3337..bfe1a11aa2b 100644
--- a/gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
@@ -17,6 +17,7 @@ void
 foo2 (void)
 {
   int i;
+  /* { dg-note {'i' was declared here} {} { target *-*-* } .-1 } */
 
 #pragma acc parallel firstprivate (i) /* { dg-warning "is used uninitialized" } */
   {
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
index 683ac1b8c45..de410e5e6ec 100644
--- a/gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
@@ -7,7 +7,15 @@ int
 main (void)
 {
   int l, l2, l3, l4;
+  /* { dg-note {'l' was declared here} {} { target *-*-* } .-1 } */
+  /* { dg-note {'l2' was declared here} {} { target *-*-* } .-2 } */
+  /* { dg-note {'l3' was declared here} {} { target *-*-* } .-3 } */
+  /* { dg-note {'l4' was declared here} {} { target *-*-* } .-4 } */
   bool b, b2, b3, b4;
+  /* { dg-note {'b' was declared here} {} { target *-*-* } .-1 } */
+  /* { dg-note {'b2' was declared here} {} { target *-*-* } .-2 } */
+  /* { dg-note {'b3' was declared here} {} { target *-*-* } .-3 } */
+  /* { dg-note {'b4' was declared here} {} { target *-*-* } .-4 } */
   int i, i2;
 
   #pragma acc parallel if(l) /* { dg-warning "is used uninitialized" } */
diff --git a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-1.f90 b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-1.f90
index 4a3ff0ef3a7..136e42acd59 100644
--- a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-1.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-1.f90
@@ -1,10 +1,15 @@
+! { dg-additional-options -Wuninitialized }
+
 type t
    integer, allocatable :: A(:,:)
 end type t
 
 type(t), allocatable :: b(:)
+! { dg-note {'b' declared here} {} { target *-*-* } .-1 }
 
 !$acc update host(b)
+! { dg-warning {'b\.dim\[0\]\.ubound' is used uninitialized} {} { target *-*-* } .-1 }
+! { dg-warning {'b\.dim\[0\]\.lbound' is used uninitialized} {} { target *-*-* } .-2 }
 !$acc update host(b(:))
 !$acc update host(b(1)%A)
 !$acc update host(b(1)%A(:,:))
diff --git a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-2.f90 b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-2.f90
index 807580d75a9..58f4ce84a2c 100644
--- a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-2.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-2.f90
@@ -1,10 +1,15 @@
+! { dg-additional-options -Wuninitialized }
+
 type t
    integer, allocatable :: A(:,:)
 end type t
 
 type(t), allocatable :: b(:)
+! { dg-note {'b' declared here} {} { target *-*-* } .-1 }
 
 !$acc update host(b(::2))
+! { dg-warning {'b\.dim\[0\]\.ubound' is used uninitialized} {} { target *-*-* } .-1 }
+! { dg-warning {'b\.dim\[0\]\.lbound' is used uninitialized} {} { target *-*-* } .-2 }
 !$acc update host(b(1)%A(::3,::4))
 end
 
diff --git a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-3.f90 b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-3.f90
index dcb63657f2b..d1fa010c73c 100644
--- a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-3.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-3.f90
@@ -1,3 +1,5 @@
+! { dg-additional-options -Wuninitialized }
+
 type t2
    integer :: A(200,200)
 end type t2
@@ -6,9 +8,15 @@ type t
 end type t
 
 type(t2),allocatable :: c(:)
+! { dg-note {'c' declared here} {} { target *-*-* } .-1 }
+! { dg-note {'c\.offset' was declared here} {} { target *-*-* } .-2 }
 type(t), allocatable :: d(:)
+! { dg-note {'d' declared here} {} { target *-*-* } .-1 }
+! { dg-note {'d\.offset' was declared here} {} { target *-*-* } .-2 }
 
 !$acc exit data delete(c(1)%A)
+! { dg-warning {'c\.offset' is used uninitialized} {} { target *-*-* } .-1 }
 !$acc exit data delete(d(1)%A)
+! { dg-warning {'d\.offset' is used uninitialized} {} { target *-*-* } .-1 }
 
 end
diff --git a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-4.f90 b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-4.f90
index 637d5f57e1c..ac005356ed6 100644
--- a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-4.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-4.f90
@@ -1,3 +1,5 @@
+! { dg-additional-options -Wuninitialized }
+
 type t4
   integer, allocatable :: quux(:)
 end type t4
@@ -12,7 +14,10 @@ type t
 end type t
 
 type(t), allocatable :: c(:)
+! { dg-note {'c' declared here} {} { target *-*-* } .-1 }
 
 !$acc enter data copyin(c(5)%foo(4)%bar(3)%qux(2)%quux(:))
+! { dg-warning {'c\.offset' is used uninitialized} {} { target *-*-* } .-1 }
 !$acc exit data delete(c(5)%foo(4)%bar(3)%qux(2)%quux(:))
+! { dg-warning {'c\.offset' is used uninitialized} {} { target *-*-* } .-1 }
 end
diff --git a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-5.f90 b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-5.f90
index 900587b7eaf..ba60ca7b8fa 100644
--- a/gcc/testsuite/gfortran.dg/goacc/array-with-dt-5.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/array-with-dt-5.f90
@@ -1,3 +1,5 @@
+! { dg-additional-options -Wuninitialized }
+
 type t2
   integer :: bar
 end type t2
@@ -6,7 +8,9 @@ type t
 end type t
 
 type(t) :: c
+! { dg-note {'c' declared here} {} { target *-*-* } .-1 }
 
 !$acc enter data copyin(c%foo)
+! { dg-warning {'c\.foo' is used uninitialized} {} { target *-*-* } .-1 }
 
 end
diff --git a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-1.f90 b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-1.f90
index e4d360e1262..ac458565ff1 100644
--- a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-1.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-1.f90
@@ -1,3 +1,5 @@
+! { dg-additional-options -Wuninitialized }
+
 type :: type1
   character(len=35) :: a
 end type type1
diff --git a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-2.f90 b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-2.f90
index cca6443e7fc..f4f791dba74 100644
--- a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-2.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-2.f90
@@ -1,3 +1,5 @@
+! { dg-additional-options -Wuninitialized }
+
 type :: type1
   character(len=35,kind=4) :: a
 end type type1
diff --git a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-3.f90 b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-3.f90
index 2bab497cef5..a523d4fb5c8 100644
--- a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-3.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-3.f90
@@ -1,5 +1,7 @@
 ! { dg-additional-options "-fdump-tree-gimple" }
 
+! { dg-additional-options -Wuninitialized }
+
 type :: type1
   character(len=35) :: a
 end type type1
@@ -12,10 +14,16 @@ type(type1) :: foo
 type(type2) :: bar
 
 type(type1), pointer :: pfoo
+! { dg-note {'pfoo' was declared here} {} { target *-*-* } .-1 }
 type(type2), pointer :: pbar
+! { dg-note {'pbar' was declared here} {} { target *-*-* } .-1 }
 
 class(type1), pointer :: cfoo
+! { dg-note {'cfoo' declared here} {} { target *-*-* } .-1 }
+! { dg-note {'cfoo\._data' was declared here} {} { target *-*-* } .-2 }
 class(type2), pointer :: cbar
+! { dg-note {'cbar' declared here} {} { target *-*-* } .-1 }
+! { dg-note {'cbar\._data' was declared here} {} { target *-*-* } .-2 }
 
 class(type1), allocatable :: acfoo
 class(type2), allocatable :: acbar
@@ -24,10 +32,14 @@ class(type2), allocatable :: acbar
 !$acc enter data copyin(bar%b)
 
 !$acc enter data copyin(pfoo%a)
+! { dg-warning {'pfoo' is used uninitialized} {} { target *-*-* } .-1 }
 !$acc enter data copyin(pbar%b)
+! { dg-warning {'pbar' is used uninitialized} {} { target *-*-* } .-1 }
 
 !$acc enter data copyin(cfoo%a)
+! { dg-warning {'cfoo\._data' is used uninitialized} {} { target *-*-* } .-1 }
 !$acc enter data copyin(cbar%b)
+! { dg-warning {'cbar\._data' is used uninitialized} {} { target *-*-* } .-1 }
 
 !$acc enter data copyin(acfoo%a)
 !$acc enter data copyin(acbar%b)
diff --git a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-4.f90 b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-4.f90
index cfe40066a59..a95e3fa3e1a 100644
--- a/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-4.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/derived-chartypes-4.f90
@@ -1,5 +1,7 @@
 ! { dg-additional-options "-fdump-tree-gimple" }
 
+! { dg-additional-options -Wuninitialized }
+
 type :: type1
   character(len=35,kind=4) :: a
 end type type1
@@ -12,10 +14,16 @@ type(type1) :: foo
 type(type2) :: bar
 
 type(type1), pointer :: pfoo
+! { dg-note {'pfoo' was declared here} {} { target *-*-* } .-1 }
 type(type2), pointer :: pbar
+! { dg-note {'pbar' was declared here} {} { target *-*-* } .-1 }
 
 class(type1), pointer :: cfoo
+! { dg-note {'cfoo' declared here} {} { target *-*-* } .-1 }
+! { dg-note {'cfoo\._data' was declared here} {} { target *-*-* } .-2 }
 class(type2), pointer :: cbar
+! { dg-note {'cbar' declared here} {} { target *-*-* } .-1 }
+! { dg-note {'cbar\._data' was declared here} {} { target *-*-* } .-2 }
 
 class(type1), allocatable :: acfoo
 class(type2), allocatable :: acbar
@@ -24,10 +32,14 @@ class(type2), allocatable :: acbar
 !$acc enter data copyin(bar%b)
 
 !$acc enter data copyin(pfoo%a)
+! { dg-warning {'pfoo' is used uninitialized} {} { target *-*-* } .-1 }
 !$acc enter data copyin(pbar%b)
+! { dg-warning {'pbar' is used uninitialized} {} { target *-*-* } .-1 }
 
 !$acc enter data copyin(cfoo%a)
+! { dg-warning {'cfoo\._data' is used uninitialized} {} { target *-*-* } .-1 }
 !$acc enter data copyin(cbar%b)
+! { dg-warning {'cbar\._data' is used uninitialized} {} { target *-*-* } .-1 }
 
 !$acc enter data copyin(acfoo%a)
 !$acc enter data copyin(acbar%b)
diff --git a/gcc/testsuite/gfortran.dg/goacc/derived-classtypes-1.f95 b/gcc/testsuite/gfortran.dg/goacc/derived-classtypes-1.f95
index 85a2e1d373d..6d880391feb 100644
--- a/gcc/testsuite/gfortran.dg/goacc/derived-classtypes-1.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/derived-classtypes-1.f95
@@ -1,3 +1,5 @@
+! { dg-additional-options -Wuninitialized }
+
 type :: type1
   integer :: a
 end type type1
diff --git a/gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90 b/gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90
index d01583fac89..505e0b493b9 100644
--- a/gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90
@@ -1,3 +1,5 @@
+! { dg-additional-options -Wuninitialized }
+
 module bar
   type :: type1
      real(8), pointer, public :: p(:) => null()
diff --git a/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
index e575890c9fc..9517ce449eb 100644
--- a/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
@@ -1,10 +1,14 @@
 ! { dg-additional-options "-fdump-tree-original -fdump-tree-gimple" }
 
+! { dg-additional-options -Wuninitialized }
+
 program test
   implicit none
   integer, pointer :: p
+  ! { dg-note {'p' was declared here} {} { target *-*-* } .-1 }
 
   !$acc host_data use_device(p)
+  ! { dg-warning {'p' is used uninitialized} {} { target *-*-* } .-1 }
   ! { dg-final { scan-tree-dump-times "(?n)#pragma acc host_data use_device_ptr\\(p\\)$" 1 "original" } }
   ! { dg-final { scan-tree-dump-times "(?n)#pragma omp target oacc_host_data use_device_ptr\\(p\\)$" 1 "gimple" } }
   !$acc end host_data
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
index 688ed0a7dc3..ceb07fbb9e9 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
@@ -3,9 +3,12 @@
 ! { dg-additional-options "--param=openacc-kernels=decompose" }
 ! { dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" }
 
+! { dg-additional-options -Wuninitialized }
+
 program test
   implicit none
   integer :: q, i, j, k, m, n, o, p, r, s, t, u, v, w
+  ! { dg-note {'i' was declared here} {} { target *-*-* } .-1 }
   logical :: l = .true.
 
   !$acc kernels if(l) async num_gangs(i) num_workers(i) vector_length(i) &
@@ -13,6 +16,7 @@ program test
   !$acc no_create(n) &
   !$acc present(o), pcopy(p), pcopyin(r), pcopyout(s), pcreate(t) &
   !$acc deviceptr(u)
+  ! { dg-warning {'i' is used uninitialized} {} { target *-*-* } .-1 }
   !$acc end kernels
 
 end program test
diff --git a/gcc/testsuite/gfortran.dg/goacc/modules.f95 b/gcc/testsuite/gfortran.dg/goacc/modules.f95
index 19a2abed8a7..1e8d8264155 100644
--- a/gcc/testsuite/gfortran.dg/goacc/modules.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/modules.f95
@@ -1,4 +1,4 @@
-! { dg-do compile } 
+! { dg-additional-options -Wuninitialized }
 
 MODULE reduction_test
 
@@ -18,6 +18,8 @@ SUBROUTINE reduction_kernel(x_min,x_max,y_min,y_max,arr,sum)
 
 !$ACC DATA PRESENT(arr) COPY(sum)
 !$ACC PARALLEL LOOP REDUCTION(+ : sum)
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   DO k=y_min,y_max
     DO j=x_min,x_max
       sum=sum*arr(j,k)
diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90
index 60cb63006c3..73812fe473e 100644
--- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90
@@ -2,11 +2,16 @@
 
 ! See also 'c-c++-common/goacc/nested-reductions-1-kernels.c'.
 
+! { dg-additional-options -Wuninitialized }
+
 subroutine acc_kernels ()
   implicit none (type, external)
   integer :: i, j, k, sum, diff
 
   !$acc kernels
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
     !$acc loop reduction(+:sum)
     do i = 1, 10
       do j = 1, 10
@@ -94,6 +99,9 @@ subroutine acc_kernels_loop ()
   integer :: h, i, j, k, l, sum, diff
 
   !$acc kernels loop
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     !$acc loop reduction(+:sum)
     do i = 1, 10
@@ -192,6 +200,9 @@ subroutine acc_kernels_loop_reduction ()
   integer :: h, i, j, k, sum, diff
 
   !$acc kernels loop reduction(+:sum)
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     do i = 1, 10
       do j = 1, 10
diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90
index 2915d6755de..9494f34f0a7 100644
--- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90
@@ -2,11 +2,16 @@
 
 ! See also 'c-c++-common/goacc/nested-reductions-1-parallel.c'.
 
+! { dg-additional-options -Wuninitialized }
+
 subroutine acc_parallel ()
   implicit none (type, external)
   integer :: i, j, k, sum, diff
 
   !$acc parallel
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
     !$acc loop reduction(+:sum)
     do i = 1, 10
       do j = 1, 10
@@ -94,6 +99,9 @@ subroutine acc_parallel_loop ()
   integer :: h, i, j, k, l, sum, diff
 
   !$acc parallel loop
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     !$acc loop reduction(+:sum)
     do i = 1, 10
@@ -183,6 +191,9 @@ subroutine acc_parallel_reduction ()
   integer :: i, j, k, sum, diff
 
   !$acc parallel reduction(+:sum)
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
     do i = 1, 10
       do j = 1, 10
         do k = 1, 10
@@ -296,6 +307,9 @@ subroutine acc_parallel_loop_reduction ()
   integer :: h, i, j, k, sum, diff
 
   !$acc parallel loop reduction(+:sum)
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     do i = 1, 10
       do j = 1, 10
diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90
index e1b0a0202d4..f89e9fe9d5f 100644
--- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90
@@ -2,6 +2,8 @@
 
 ! See also 'c-c++-common/goacc/nested-reductions-1-routine.c'.
 
+! { dg-additional-options -Wuninitialized }
+
 subroutine acc_routine ()
   implicit none (type, external)
   !$acc routine gang
@@ -10,6 +12,7 @@ subroutine acc_routine ()
 
     ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 }
     !$acc loop reduction(+:sum)
+    ! { dg-warning {'sum' is used uninitialized} {} { target *-*-* } .-1 }
     do i = 1, 10
       do j = 1, 10
         do k = 1, 10
@@ -75,6 +78,7 @@ subroutine acc_routine ()
 
     ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 }
     !$acc loop reduction(+:sum) reduction(-:diff)
+    ! { dg-warning {'diff' is used uninitialized} {} { target *-*-* } .-1 }
     do i = 1, 10
       !$acc loop reduction(+:sum)
       do j = 1, 10
diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90
index 6ee41843d31..8b143e9da4a 100644
--- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90
@@ -2,11 +2,16 @@
 
 ! See also 'c-c++-common/goacc/nested-reductions-2-kernels.c'.
 
+! { dg-additional-options -Wuninitialized }
+
 subroutine acc_kernels ()
   implicit none (type, external)
   integer :: i, j, k, l, sum, diff
 
   !$acc kernels
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
     !$acc loop reduction(+:sum)
     do i = 1, 10
       !$acc loop  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
@@ -126,6 +131,9 @@ subroutine acc_kernels_loop ()
   integer :: h, i, j, k, l, sum, diff
 
   !$acc kernels loop
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     !$acc loop reduction(+:sum)
     do i = 1, 10
@@ -266,6 +274,9 @@ subroutine acc_kernels_loop_reduction ()
   integer :: h, i, j, k, l, sum, diff
 
   !$acc kernels loop reduction(+:sum)
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     !$acc loop  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
     do i = 1, 10
diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90
index 8fa2cabd35f..99cd22c3862 100644
--- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90
@@ -2,11 +2,16 @@
 
 ! See also 'c-c++-common/goacc/nested-reductions-2-parallel.c'.
 
+! { dg-additional-options -Wuninitialized }
+
 subroutine acc_parallel ()
   implicit none (type, external)
   integer :: i, j, k, l, sum, diff
 
   !$acc parallel
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
     !$acc loop reduction(+:sum)
     do i = 1, 10
       !$acc loop  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
@@ -126,6 +131,9 @@ subroutine acc_parallel_loop ()
   integer :: h, i, j, k, l, sum, diff
 
   !$acc parallel loop
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     !$acc loop reduction(+:sum)
     do i = 1, 10
@@ -257,6 +265,9 @@ subroutine acc_parallel_reduction ()
   integer :: i, j, k, l, sum, diff
 
   !$acc parallel reduction(+:sum)
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
     !$acc loop  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
     do i = 1, 10
       !$acc loop  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
@@ -376,6 +387,9 @@ subroutine acc_parallel_loop_reduction ()
   integer :: h, i, j, k, l, sum, diff
 
   !$acc parallel loop reduction(+:sum)
+  ! implicit 'copy (sum, diff)'
+  ! { dg-warning {'sum' is used uninitialized} TODO { xfail *-*-* } .-2 }
+  ! { dg-warning {'diff' is used uninitialized} TODO { xfail *-*-* } .-3 }
   do h = 1, 10
     !$acc loop  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
     do i = 1, 10
diff --git a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90 b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90
index 73a05207910..d60ec583e16 100644
--- a/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90
@@ -2,6 +2,8 @@
 
 ! See also 'c-c++-common/goacc/nested-reductions-2-routine.c'.
 
+! { dg-additional-options -Wuninitialized }
+
 subroutine acc_routine ()
   implicit none (type, external)
   !$acc routine gang
@@ -9,6 +11,7 @@ subroutine acc_routine ()
 
     ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 }
     !$acc loop reduction(+:sum)
+    ! { dg-warning {'sum' is used uninitialized} {} { target *-*-* } .-1 }
     do i = 1, 10
       !$acc loop  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
       do j = 1, 10
@@ -107,6 +110,7 @@ subroutine acc_routine ()
 
     ! { dg-error "gang reduction on an orphan loop" "" { target *-*-* } .+1 }
     !$acc loop reduction(+:sum) reduction(-:diff)
+    ! { dg-warning {'diff' is used uninitialized} {} { target *-*-* } .-1 }
     do i = 1, 10
       !$acc loop reduction(-:diff)  ! { dg-warning "nested loop in reduction needs reduction clause for .sum." }
       do j = 1, 10
diff --git a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
index c51cb2a0504..6110d93b91e 100644
--- a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
@@ -2,12 +2,15 @@
 
 ! test for tree-dump-original and spaces-commas
 
+! { dg-additional-options -Wuninitialized }
+
 ! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
 ! aspects of that functionality.
 
 program test
   implicit none
   integer :: q, i, j, k, m, n, o, p, r, s, t, u, v, w
+  ! { dg-note {'i' was declared here} {} { target *-*-* } .-1 }
   logical :: l = .true.
 
   !$acc parallel if(l) async num_gangs(i) num_workers(i) vector_length(i) &
@@ -15,9 +18,10 @@ program test
   !$acc no_create(n) &
   !$acc present(o), pcopy(p), pcopyin(r), pcopyout(s), pcreate(t) &
   !$acc deviceptr(u), private(v), firstprivate(w)
-  ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 }
-  ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
-  ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
+  ! { dg-warning {'i' is used uninitialized} {} { target *-*-* } .-1 }
+  ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-2 }
+  ! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 }
+  ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 }
   !$acc end parallel
 
 end program test
diff --git a/gcc/testsuite/gfortran.dg/goacc/pr93464.f90 b/gcc/testsuite/gfortran.dg/goacc/pr93464.f90
index 922106540f9..c92f1d3d8b2 100644
--- a/gcc/testsuite/gfortran.dg/goacc/pr93464.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/pr93464.f90
@@ -1,13 +1,16 @@
-! { dg-do compile }
-!
 ! PR fortran/93464
 !
 ! Contributed by G. Steinmetz
-!
+
+! { dg-additional-options -Wuninitialized }
+
 program p
    character :: c(2) = 'a'
    character, allocatable :: z(:)
+   ! { dg-note {'z' declared here} {} { target *-*-* } .-1 }
    !$acc parallel
+   ! { dg-warning {'z\.dim\[0\]\.ubound' is used uninitialized} {} { target *-*-* } .-1 }
+   ! { dg-warning {'z\.dim\[0\]\.lbound' is used uninitialized} {} { target *-*-* } .-2 }
    !$omp target
    z = c
    !$acc end parallel
diff --git a/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute-loop.f90 b/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute-loop.f90
index 47ba5baf439..c825a958e9b 100644
--- a/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute-loop.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute-loop.f90
@@ -4,6 +4,8 @@
 ! { dg-additional-options "--param=openacc-privatization=noisy" } for
 ! testing/documenting aspects of that functionality.
 
+! { dg-additional-options -Wuninitialized }
+
 ! See also '../../c-c++-common/goacc/privatization-1-compute-loop.c'.
 !TODO More cases should be added here.
 
@@ -38,6 +40,7 @@ contains
           ! (See C/C++ example.)
 
           a = g (i, j, a, c)
+          ! { dg-warning {'a' is used uninitialized} TODO { xfail *-*-* } .-1 }
           x = a
           !$acc atomic write
           y = a
diff --git a/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute.f90 b/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute.f90
index 4813e44a233..a88203e48d5 100644
--- a/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/privatization-1-compute.f90
@@ -4,6 +4,8 @@
 ! { dg-additional-options "--param=openacc-privatization=noisy" } for
 ! testing/documenting aspects of that functionality.
 
+! { dg-additional-options -Wuninitialized }
+
 ! See also '../../c-c++-common/goacc/privatization-1-compute.c'.
 !TODO More cases should be added here.
 
@@ -11,13 +13,13 @@
 ! passed to 'incr' may be unset, and in that case, it will be set to [...]",
 ! so to maintain compatibility with earlier Tcl releases, we manually
 ! initialize counter variables:
-! { dg-line l_dummy[variable c_compute 0] }
+! { dg-line l_dummy[variable c_compute 0 c_function 0] }
 ! { dg-message "dummy" "" { target iN-VAl-Id } l_dummy } to avoid
 ! "WARNING: dg-line var l_dummy defined, but not used".
 
 module m
 contains
-  subroutine f (i, j, a)
+  subroutine f (i, j, a) ! { dg-line l_function[incr c_function] }
     implicit none
     integer :: i, j, a
     integer :: x, y
@@ -35,6 +37,12 @@ contains
           ! (See C/C++ example.)
 
           a = g (i, j, a, c)
+          ! { dg-warning {'i' is used uninitialized} {} { target *-*-* } .-1 }
+          !   { dg-note {'i' was declared here} {} { target *-*-* } l_function$c_function }
+          ! { dg-warning {'j' is used uninitialized} {} { target *-*-* } .-3 }
+          !   { dg-note {'j' was declared here} {} { target *-*-* } l_function$c_function }
+          ! { dg-warning {'a' is used uninitialized} {} { target *-*-* } .-5 }
+          !   { dg-note {'a' was declared here} {} { target *-*-* } l_function$c_function }
           x = a
           !$acc atomic write ! ... to force 'TREE_ADDRESSABLE'.
           y = a
diff --git a/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang-loop.f90 b/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang-loop.f90
index 36f2a886e47..74c740f0493 100644
--- a/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang-loop.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang-loop.f90
@@ -4,6 +4,8 @@
 ! { dg-additional-options "--param=openacc-privatization=noisy" } for
 ! testing/documenting aspects of that functionality.
 
+! { dg-additional-options -Wuninitialized }
+
 ! See also '../../c-c++-common/goacc/privatization-1-routine_gang-loop.c'.
 !TODO More cases should be added here.
 
@@ -38,6 +40,7 @@ contains
           ! (See C/C++ example.)
 
           a = g (i, j, a, c)
+          ! { dg-warning {'a' is used uninitialized} TODO { xfail *-*-* } .-1 }
           x = a
           !$acc atomic write
           y = a
diff --git a/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang.f90 b/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang.f90
index 0615a445e44..59bd43e4070 100644
--- a/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang.f90
@@ -4,6 +4,8 @@
 ! { dg-additional-options "--param=openacc-privatization=noisy" } for
 ! testing/documenting aspects of that functionality.
 
+! { dg-additional-options -Wuninitialized }
+
 ! See also '../../c-c++-common/goacc/privatization-1-routine_gang.c'.
 !TODO More cases should be added here.
 
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
index 59e923f90fb..10454392336 100644
--- a/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
@@ -6,6 +6,9 @@
 subroutine acc_parallel
   implicit none
   integer :: i, j, k
+  ! { dg-note {'i' was declared here} {} { target *-*-* } .-1 }
+  ! { dg-note {'j' was declared here} {} { target *-*-* } .-2 }
+  ! { dg-note {'k' was declared here} {} { target *-*-* } .-3 }
 
   !$acc parallel num_gangs(i) ! { dg-warning "is used uninitialized" }
   ! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 }
@@ -23,6 +26,9 @@ end subroutine acc_parallel
 subroutine acc_kernels
   implicit none
   integer :: i, j, k
+  ! { dg-note {'i' was declared here} {} { target *-*-* } .-1 }
+  ! { dg-note {'j' was declared here} {} { target *-*-* } .-2 }
+  ! { dg-note {'k' was declared here} {} { target *-*-* } .-3 }
 
   !$acc kernels num_gangs(i) ! { dg-warning "is used uninitialized" }
   !$acc end kernels
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
index cd5d189a1aa..9615fee4487 100644
--- a/gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
@@ -11,6 +11,7 @@ end subroutine test
 
 subroutine test2
   INTEGER :: i
+  ! { dg-note {'i' was declared here} {} { target *-*-* } .-1 }
 
   !$acc parallel firstprivate (i) ! { dg-warning "is used uninitialized" }
   i = 1
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
index 73eb4ee1de1..a059bd986eb 100644
--- a/gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
@@ -4,6 +4,10 @@
 program test
   implicit none
   logical :: b, b2, b3, b4
+  ! { dg-note {'b' was declared here} {} { target *-*-* } .-1 }
+  ! { dg-note {'b2' was declared here} {} { target *-*-* } .-2 }
+  ! { dg-note {'b3' was declared here} {} { target *-*-* } .-3 }
+  ! { dg-note {'b4' was declared here} {} { target *-*-* } .-4 }
   integer :: data, data2
 
   !$acc parallel if(b) ! { dg-warning "is used uninitialized" }
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95
index 35310d14c52..f661f51fe3f 100644
--- a/gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95
@@ -3,6 +3,7 @@
 
 subroutine test
   integer, pointer :: p
+  ! { dg-note {'p' was declared here} {} { target *-*-* } .-1 }
 
   !$acc host_data use_device(p) ! { dg-warning "is used uninitialized" }
   !$acc end host_data
diff --git a/gcc/testsuite/gfortran.dg/goacc/wait.f90 b/gcc/testsuite/gfortran.dg/goacc/wait.f90
index 9cdbcdf822e..60018bc144c 100644
--- a/gcc/testsuite/gfortran.dg/goacc/wait.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/wait.f90
@@ -1,12 +1,16 @@
 ! Ensure that ACC WAIT accept integer arguments.
 
+! { dg-additional-options -Wuninitialized }
+
 subroutine foo (wqueue)
   implicit none
   integer :: wqueue, waitno
+  ! { dg-note {'waitno' was declared here} {} { target *-*-* } .-1 }
   integer, parameter :: waitp = 100
 
   !$acc wait (wqueue)
   !$acc wait (waitno)
+  ! { dg-warning {'waitno' is used uninitialized} {} { target *-*-* } .-1 }
   !$acc wait (waitp)
   !$acc wait (0)
 end subroutine foo
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
index 86171d456e0..489f26ad9f2 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
@@ -1,5 +1,7 @@
 /* Test large vector lengths.  */
 
+/* { dg-additional-options -Wuninitialized } */
+
 #include <assert.h>
 
 #define n 10000
@@ -8,7 +10,7 @@ int a1[n], a2[n];
 #define gentest(name, outer, inner)		\
   void name ()					\
   {						\
-  long i, j, t1, t2, t3;			\
+  long i, j, t1, t2, t3; /* { dg-line vars } */	\
   _Pragma(outer)				\
   for (i = 0; i < n; i++)			\
     {						\
@@ -32,15 +34,47 @@ int a1[n], a2[n];
 
 gentest (test1, "acc parallel loop gang vector_length (128) firstprivate (t1, t2)",
 	 "acc loop vector reduction(+:t1) reduction(-:t2)")
+/* { dg-warning {'t1' is used uninitialized} {} { target *-*-* } .-1 }
+   { dg-note {'t1' was declared here} {} { target *-*-* } vars }
+   { dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-4 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
+/* { dg-warning {'t2' is used uninitialized} {} { target *-*-* } .-5 }
+   { dg-note {'t2' was declared here} {} { target *-*-* } vars }
+   { DUP_dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-8 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
 
 gentest (test2, "acc parallel loop gang vector_length (128) firstprivate (t1, t2)",
 	 "acc loop worker vector reduction(+:t1) reduction(-:t2)")
+/* { dg-warning {'t1' is used uninitialized} {} { target *-*-* } .-1 }
+   { DUP_dg-note {'t1' was declared here} {} { target *-*-* } vars }
+   { dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-4 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
+/* { dg-warning {'t2' is used uninitialized} {} { target *-*-* } .-5 }
+   { DUP_dg-note {'t2' was declared here} {} { target *-*-* } vars }
+   { DUP_dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-8 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
 
 gentest (test3, "acc parallel loop gang worker vector_length (128) firstprivate (t1, t2)",
 	 "acc loop vector reduction(+:t1) reduction(-:t2)")
+/* { dg-warning {'t1' is used uninitialized} {} { target *-*-* } .-1 }
+   { DUP_dg-note {'t1' was declared here} {} { target *-*-* } vars }
+   { dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-4 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
+/* { dg-warning {'t2' is used uninitialized} {} { target *-*-* } .-5 }
+   { DUP_dg-note {'t2' was declared here} {} { target *-*-* } vars }
+   { DUP_dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-8 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
 
 gentest (test4, "acc parallel loop firstprivate (t1, t2)",
 	 "acc loop reduction(+:t1) reduction(-:t2)")
+/* { dg-warning {'t1' is used uninitialized} {} { target *-*-* } .-1 }
+   { DUP_dg-note {'t1' was declared here} {} { target *-*-* } vars }
+   { dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-4 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
+/* { dg-warning {'t2' is used uninitialized} {} { target *-*-* } .-5 }
+   { DUP_dg-note {'t2' was declared here} {} { target *-*-* } vars }
+   { DUP_dg-note {in expansion of macro 'gentest'} {} { target { ! offloading_enabled } } .-8 }
+     TODO See PR101551 for 'offloading_enabled' differences.  */
 
 
 int
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/data-5.f90 b/libgomp/testsuite/libgomp.oacc-fortran/data-5.f90
index c68a2795900..37c8457ec1f 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/data-5.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/data-5.f90
@@ -1,6 +1,8 @@
 ! { dg-do run }
 ! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
 
+! { dg-additional-options -Wuninitialized }
+
 program refcount_test
   use openacc
   integer, allocatable :: h(:)
@@ -21,6 +23,8 @@ program refcount_test
   call acc_update_self (h)
   do i = 1, N
      if (h(i) .eq. i) c = c + 1
+     ! { dg-warning {'c' may be used uninitialized} {} { target __OPTIMIZE__ } .-1 }
+     !   { dg-note {'c' was declared here} {} { target __OPTIMIZE__ } .-2 }
   end do
   ! h[] should be filled with uninitialized device values,
   ! 'stop' if it's not.
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/gemm-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/gemm-2.f90
index 5fa93642477..bc419cf4fa9 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/gemm-2.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/gemm-2.f90
@@ -3,6 +3,8 @@
 ! { dg-do run }
 ! { dg-additional-options "-fopenacc-dim=::128" }
 
+! { dg-additional-options -Wuninitialized }
+
 ! Implicitly set vector_length to 128 using -fopenacc-dim.
 subroutine openacc_sgemm (m, n, k, alpha, a, b, beta, c)
   integer :: m, n, k
@@ -11,8 +13,10 @@ subroutine openacc_sgemm (m, n, k, alpha, a, b, beta, c)
 
   integer :: i, j, l
   real :: temp
+  ! { dg-note {'temp' was declared here} {} { target *-*-* } .-1 }
 
   !$acc parallel loop copy(c(1:m,1:n)) copyin(a(1:k,1:m),b(1:k,1:n)) firstprivate (temp)
+  ! { dg-warning {'temp' is used uninitialized} {} { target *-*-* } .-1 }
   do j = 1, n
      !$acc loop
      do i = 1, m
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/gemm.f90 b/libgomp/testsuite/libgomp.oacc-fortran/gemm.f90
index 9e8915fbb88..562cb6a7de4 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/gemm.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/gemm.f90
@@ -2,6 +2,8 @@
 
 ! { dg-do run }
 
+! { dg-additional-options -Wuninitialized }
+
 ! Explicitly set vector_length to 128 using a vector_length clause.
 subroutine openacc_sgemm_128 (m, n, k, alpha, a, b, beta, c)
   integer :: m, n, k
@@ -10,8 +12,10 @@ subroutine openacc_sgemm_128 (m, n, k, alpha, a, b, beta, c)
 
   integer :: i, j, l
   real :: temp
+  ! { dg-note {'temp' was declared here} {} { target *-*-* } .-1 }
 
   !$acc parallel loop copy(c(1:m,1:n)) copyin(a(1:k,1:m),b(1:k,1:n)) vector_length (128) firstprivate (temp)
+  ! { dg-warning {'temp' is used uninitialized} {} { target *-*-* } .-1 }
   do j = 1, n
      !$acc loop
      do i = 1, m
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/optional-reduction.f90 b/libgomp/testsuite/libgomp.oacc-fortran/optional-reduction.f90
index 69b69b66c71..0bb05b9b869 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/optional-reduction.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/optional-reduction.f90
@@ -4,6 +4,8 @@
 
 ! { dg-do run }
 
+! { dg-additional-options -Wuninitialized }
+
 !TODO
 ! { dg-xfail-run-if TODO { openacc_radeon_accel_selected && { ! __OPTIMIZE__ } } }
 
@@ -32,6 +34,8 @@ contains
 
     !$acc parallel num_gangs(ng) copy(rg)
     !$acc loop reduction(+:rg) gang
+    ! { dg-bogus {'rg\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+    !   { dg-note {'rg\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
     do i = 1, n
        rg = rg + array(i)
     end do
@@ -39,6 +43,8 @@ contains
 
     !$acc parallel num_workers(nw) copy(rw)
     !$acc loop reduction(+:rw) worker
+    ! { dg-bogus {'rw\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+    !   { dg-note {'rw\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
     do i = 1, n
        rw = rw + array(i)
     end do
@@ -46,6 +52,8 @@ contains
 
     !$acc parallel vector_length(vl) copy(rv)
     !$acc loop reduction(+:rv) vector
+    ! { dg-bogus {'rv\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+    !   { dg-note {'rv\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
     do i = 1, n
        rv = rv + array(i)
     end do
@@ -53,6 +61,8 @@ contains
 
     !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
     !$acc loop reduction(+:rc) gang worker vector
+    ! { dg-bogus {'rc\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+    !   { dg-note {'rc\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
     do i = 1, n
        rc = rc + array(i)
     end do
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90 b/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90
index 99b1441136d..a7b7adebb09 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90
@@ -1,5 +1,7 @@
 ! { dg-do run }
 
+! { dg-additional-options -Wuninitialized }
+
 ! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
 ! aspects of that functionality.
 
@@ -44,7 +46,11 @@ subroutine redsub(s1, s2, n)
   integer :: s1, s2, n
 
   !$acc parallel reduction(+:s1,s2) num_gangs (10)  copy(s1)
-  ! { dg-bogus "\[Ww\]arning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 }
+  ! { dg-bogus {'s1\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'s1\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
+  ! { dg-bogus {'s2\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-3 }
+  !   { dg-note {'s2\.[0-9]+' was declared here} {} { target *-*-* } .-4 }
+  ! { dg-bogus "\[Ww\]arning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-5 }
   s1 = s1 + 1
   s2 = s2 + 1
   !$acc end parallel
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90
index 42dc3193546..5082e367e02 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90
@@ -1,5 +1,7 @@
 ! { dg-do run }
-!
+
+! { dg-additional-options -Wuninitialized }
+
 MODULE reduction_test
 
 CONTAINS
@@ -16,6 +18,8 @@ SUBROUTINE reduction_kernel(x_min,x_max,y_min,y_max,arr,sum)
 
 !$ACC DATA PRESENT(arr) COPY(sum)
 !$ACC PARALLEL LOOP REDUCTION(+ : sum)
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   DO k=y_min,y_max
     DO j=x_min,x_max
       sum=sum+arr(j,k)
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr96628-part1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr96628-part1.f90
index 71219f9c467..06512d43c05 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/pr96628-part1.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/pr96628-part1.f90
@@ -3,6 +3,9 @@
 ! { dg-additional-options "-ftree-slp-vectorize" }
 !
 ! This file is compiled first
+
+! { dg-additional-options -Wuninitialized }
+
 module m2
   real*8 :: mysum
   !$acc declare device_resident(mysum)
@@ -16,5 +19,7 @@ contains
       !$acc routine seq
       REAL*8, INTENT(INOUT) :: t(:)
       t = (100.0_8*t)/sum
+      ! { dg-warning {'sum' is used uninitialized} {} { target *-*-* } .-1 }
+      !   { dg-note {'sum' was declared here} {} { target *-*-* } .-2 }
     END SUBROUTINE two
 end module m2
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90
index 3f3a1b5966b..f4a6af986e8 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90
@@ -15,6 +15,8 @@
 ! Prune a few: uninteresting, and varying depending on GCC configuration (data types):
 ! { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} }
 
+! { dg-additional-options -Wuninitialized }
+
 ! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
 ! passed to 'incr' may be unset, and in that case, it will be set to [...]",
 ! so to maintain compatibility with earlier Tcl releases, we manually
@@ -27,10 +29,16 @@ program main
   implicit none (type, external)
   integer :: j
   integer, allocatable :: A(:)
+  ! { dg-note {'a' declared here} {} { target *-*-* } .-1 }
   character(len=:), allocatable :: my_str
   character(len=15), allocatable :: my_str15
 
   A = [(3*j, j=1, 10)]
+  ! { dg-bogus {'a\.offset' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-1 }
+  ! { dg-bogus {'a\.dim\[0\]\.lbound' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-2 }
+  ! { dg-bogus {'a\.dim\[0\]\.ubound' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-3 }
+  ! { dg-bogus {'a\.dim\[0\]\.lbound' may be used uninitialized} {PR77504 etc.} { xfail { ! __OPTIMIZE__ } } .-4 }
+  ! { dg-bogus {'a\.dim\[0\]\.ubound' may be used uninitialized} {PR77504 etc.} { xfail { ! __OPTIMIZE__ } } .-5 }
   call foo (A, size(A))
   call bar (A)
   my_str = "1234567890"
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
index 5d1c1d99fce..88a691f7ca1 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
@@ -1,5 +1,7 @@
 ! { dg-do run }
 
+! { dg-additional-options -Wuninitialized }
+
 ! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
 ! aspects of that functionality.
 
@@ -36,6 +38,8 @@ subroutine redsub_gang(sum, n, c)
 
   !$acc parallel copyin (n, c) num_gangs(n) copy(sum)
   !$acc loop reduction(+:sum) gang
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   do i = 1, n
      sum = sum + c
   end do
@@ -50,6 +54,8 @@ subroutine redsub_worker(sum, n, c)
   !$acc parallel copyin (n, c) num_workers(4) vector_length (32) copy(sum)
   ! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
   !$acc loop reduction(+:sum) worker
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   do i = 1, n
      sum = sum + c
   end do
@@ -63,6 +69,8 @@ subroutine redsub_vector(sum, n, c)
 
   !$acc parallel copyin (n, c) vector_length(32) copy(sum)
   !$acc loop reduction(+:sum) vector
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   do i = 1, n
      sum = sum + c
   end do
@@ -76,6 +84,8 @@ subroutine redsub_combined(sum, n, c)
 
   !$acc parallel num_gangs (8) num_workers (4) vector_length(32) copy(sum)
   !$acc loop reduction(+:sum) gang worker vector
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   do i = 1, n
      sum = sum + c
   end do
@@ -92,8 +102,12 @@ subroutine redsub_nested(sum, n, c)
 
   !$acc parallel num_gangs (8) copy(sum)
   !$acc loop reduction(+:sum) gang
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   do i = 1, ii
      !$acc loop reduction(+:sum) vector
+     ! { dg-bogus {'sum\.[0-9]+' may be used uninitialized} TODO { xfail { ! __OPTIMIZE__ } } .-1 }
+     !   { dg-note {'sum\.[0-9]+' was declared here} {} { target { ! __OPTIMIZE__ } } .-2 }
      do j = 1, jj
         sum = sum + c
      end do
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
index a8b0c60e420..38148f520da 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
@@ -1,5 +1,7 @@
 ! { dg-do run }
 
+! { dg-additional-options -Wuninitialized }
+
 !TODO
 ! { dg-xfail-run-if TODO { openacc_radeon_accel_selected && { ! __OPTIMIZE__ } } }
 
@@ -62,6 +64,8 @@ subroutine redsub_bogus(sum, n)
 
   !$acc parallel firstprivate(sum)
   !$acc loop gang worker vector reduction (+:sum)
+  ! { dg-bogus {'sum\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'sum\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
   do i = 1, n
      sum = sum + 1
   end do
@@ -80,6 +84,8 @@ subroutine redsub_combined(sum, n, arr)
      sum = i;
 
      !$acc loop reduction(+:sum)
+     ! { dg-bogus {'sum\.[0-9]+' may be used uninitialized} TODO { xfail { ! __OPTIMIZE__ } } .-1 }
+     !   { dg-note {'sum\.[0-9]+' was declared here} {} { target { ! __OPTIMIZE__ } } .-2 }
      do j = 1, n
         sum = sum + 1
      end do
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reference-reductions.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reference-reductions.f90
index b25430e59ed..055d22510c4 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reference-reductions.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reference-reductions.f90
@@ -2,6 +2,8 @@
 
 ! { dg-do run }
 
+! { dg-additional-options -Wuninitialized }
+
 module prm
   implicit none
 
@@ -14,8 +16,12 @@ subroutine param_reduction(var)
 
 !$acc parallel copy(var)
 !$acc loop reduction(+ : var) gang
+  ! { dg-bogus {'var\.[0-9]+' is used uninitialized} TODO { xfail *-*-* } .-1 }
+  !   { dg-note {'var\.[0-9]+' was declared here} {} { target *-*-* } .-2 }
  do k=1,10
 !$acc loop vector reduction(+ : var)
+    ! { dg-bogus {'var\.[0-9]+' may be used uninitialized} TODO { xfail { ! __OPTIMIZE__ } } .-1 }
+    !   { dg-note {'var\.[0-9]+' was declared here} {} { target { ! __OPTIMIZE__ } } .-2 }
     do j=1,100
      var = var + 1.0
     enddo
-- 
2.34.1

