[clang] 656d022 - Stop emit incomplete type error for a variable in a map clause

Jennifer Yu via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 3 11:01:42 PDT 2021


Author: Jennifer Yu
Date: 2021-08-03T10:51:32-07:00
New Revision: 656d02233170e1707d3534b042960b71cf6eb98b

URL: https://github.com/llvm/llvm-project/commit/656d02233170e1707d3534b042960b71cf6eb98b
DIFF: https://github.com/llvm/llvm-project/commit/656d02233170e1707d3534b042960b71cf6eb98b.diff

LOG: Stop emit incomplete type error for a variable in a map clause
where should not.

Currently we are using QTy->isIncompleteType(&ND) to check incomplete
type.  But before doing that, need to instantiate for a class template
specialization or a class member of a class template specialization,
or an array with known size of such..., so that we know it is really
incomplete type.

To fix this using RequireCompleteType instead.

The new test is added into "test/OpenMP/target_update_messages.cpp"

The different of using RequireCompleteType is when emit incomplete type,
an additional note is also emitted to point to where incomplete type
is declared.  Because this change, many tests are needed to be fixed
by adding additional note.

This is to fix https://bugs.llvm.org/show_bug.cgi?id=50508

Differential Revision: https://reviews.llvm.org/D107200

Added: 
    

Modified: 
    clang/lib/Sema/SemaOpenMP.cpp
    clang/test/OpenMP/distribute_firstprivate_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_shared_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp
    clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp
    clang/test/OpenMP/distribute_simd_aligned_messages.cpp
    clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp
    clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp
    clang/test/OpenMP/distribute_simd_linear_messages.cpp
    clang/test/OpenMP/distribute_simd_reduction_messages.cpp
    clang/test/OpenMP/target_map_messages.cpp
    clang/test/OpenMP/target_parallel_for_map_messages.cpp
    clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp
    clang/test/OpenMP/target_parallel_map_messages.cpp
    clang/test/OpenMP/target_simd_map_messages.cpp
    clang/test/OpenMP/target_teams_distribute_map_messages.cpp
    clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp
    clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp
    clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp
    clang/test/OpenMP/target_teams_map_messages.cpp
    clang/test/OpenMP/target_update_from_messages.cpp
    clang/test/OpenMP/target_update_messages.cpp
    clang/test/OpenMP/target_update_to_messages.cpp
    clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp
    clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp
    clang/test/OpenMP/teams_distribute_reduction_messages.cpp
    clang/test/OpenMP/teams_distribute_shared_messages.cpp
    clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
    clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp
    clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
    clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp
    clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp
    clang/test/OpenMP/teams_firstprivate_messages.cpp
    clang/test/OpenMP/teams_reduction_messages.cpp
    clang/test/OpenMP/teams_shared_messages.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index c0cd2bf18a77..f093e6263e97 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -18443,11 +18443,8 @@ OMPClause *Sema::ActOnOpenMPDeviceClause(OpenMPDeviceClauseModifier Modifier,
 static bool checkTypeMappable(SourceLocation SL, SourceRange SR, Sema &SemaRef,
                               DSAStackTy *Stack, QualType QTy,
                               bool FullCheck = true) {
-  NamedDecl *ND;
-  if (QTy->isIncompleteType(&ND)) {
-    SemaRef.Diag(SL, diag::err_incomplete_type) << QTy << SR;
+  if (SemaRef.RequireCompleteType(SL, QTy, diag::err_incomplete_type))
     return false;
-  }
   if (FullCheck && !SemaRef.CurContext->isDependentContext() &&
       !QTy.isTriviallyCopyableType(SemaRef.Context))
     SemaRef.Diag(SL, diag::warn_omp_non_trivial_type_mapped) << QTy << SR;

diff  --git a/clang/test/OpenMP/distribute_firstprivate_messages.cpp b/clang/test/OpenMP/distribute_firstprivate_messages.cpp
index 25a5e9db0eb8..1eb629512e6d 100644
--- a/clang/test/OpenMP/distribute_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/distribute_firstprivate_messages.cpp
@@ -9,7 +9,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp
index 9d355cce1090..16584a005f24 100644
--- a/clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp
@@ -18,7 +18,7 @@ void xxx(int argc) {
 
 extern int omp_default_mem_alloc;
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp
index d534ac58da0a..6001e2715523 100644
--- a/clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp
@@ -11,7 +11,7 @@ bool foobool(int argc) {
   return argc;
 }
 extern int omp_default_mem_alloc;
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp
index 1b0bb11d6223..800e33897226 100644
--- a/clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp
@@ -36,7 +36,7 @@ void foobar(int &ref) {
     foo();
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_shared_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_shared_messages.cpp
index 576d728a6469..55ba8042f428 100644
--- a/clang/test/OpenMP/distribute_parallel_for_shared_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_shared_messages.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wno-openmp-mapping -Wuninitialized
 
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
index 9bebccafcc68..960177cf7dda 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
@@ -102,7 +102,7 @@ template<int LEN> int test_warn() {
   return 0;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note {{forward declaration of 'S1'}}
 extern S1 a; // expected-note {{'a' declared here}}
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp
index 247bc569dad2..d370e367172a 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp
@@ -17,7 +17,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp
index 504b71904298..a9921be12a35 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp
@@ -12,7 +12,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
index 53667c2643c1..cdfb9bc605ee 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
@@ -116,7 +116,7 @@ template<int LEN> int test_warn() {
   return ind2;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp
index 2a71ef1b8200..d811f8517bd8 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp
@@ -35,7 +35,7 @@ void foobar(int &ref) {
     foo();
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp
index a38f892bf9bb..455eb7d053bf 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
 
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_simd_aligned_messages.cpp b/clang/test/OpenMP/distribute_simd_aligned_messages.cpp
index eb0fc8a1eae1..6f1dd7d2552d 100644
--- a/clang/test/OpenMP/distribute_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/distribute_simd_aligned_messages.cpp
@@ -102,7 +102,7 @@ template<int LEN> int test_warn() {
   return 0;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note {{forward declaration of 'S1'}}
 extern S1 a; // expected-note {{'a' declared here}}
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp b/clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp
index b88045ba5cf9..7ec5cf2f2774 100644
--- a/clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp
@@ -10,7 +10,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp b/clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp
index 8e471890c019..6033f6b0f4b4 100644
--- a/clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp
+++ b/clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp
@@ -12,7 +12,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_simd_linear_messages.cpp b/clang/test/OpenMP/distribute_simd_linear_messages.cpp
index 005473859a90..1ba4c5ceeb73 100644
--- a/clang/test/OpenMP/distribute_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/distribute_simd_linear_messages.cpp
@@ -116,7 +116,7 @@ template<int LEN> int test_warn() {
   return ind2;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/distribute_simd_reduction_messages.cpp b/clang/test/OpenMP/distribute_simd_reduction_messages.cpp
index 5df8ec036e85..3ac2227625be 100644
--- a/clang/test/OpenMP/distribute_simd_reduction_messages.cpp
+++ b/clang/test/OpenMP/distribute_simd_reduction_messages.cpp
@@ -35,7 +35,7 @@ void foobar(int &ref) {
     foo();
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_map_messages.cpp b/clang/test/OpenMP/target_map_messages.cpp
index 7f39b3cbd118..5edcc40275b1 100644
--- a/clang/test/OpenMP/target_map_messages.cpp
+++ b/clang/test/OpenMP/target_map_messages.cpp
@@ -448,7 +448,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_parallel_for_map_messages.cpp b/clang/test/OpenMP/target_parallel_for_map_messages.cpp
index a1ebb2d0adfd..1935db322b62 100644
--- a/clang/test/OpenMP/target_parallel_for_map_messages.cpp
+++ b/clang/test/OpenMP/target_parallel_for_map_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp b/clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp
index 3d686e4e8f5c..b3940c43b4da 100644
--- a/clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp
+++ b/clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_parallel_map_messages.cpp b/clang/test/OpenMP/target_parallel_map_messages.cpp
index 2c8abf25d5ef..5c4df7e7403c 100644
--- a/clang/test/OpenMP/target_parallel_map_messages.cpp
+++ b/clang/test/OpenMP/target_parallel_map_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_simd_map_messages.cpp b/clang/test/OpenMP/target_simd_map_messages.cpp
index ed0783ac90c9..502479997c5a 100644
--- a/clang/test/OpenMP/target_simd_map_messages.cpp
+++ b/clang/test/OpenMP/target_simd_map_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_teams_distribute_map_messages.cpp b/clang/test/OpenMP/target_teams_distribute_map_messages.cpp
index 246228a4a98e..8d1006612751 100644
--- a/clang/test/OpenMP/target_teams_distribute_map_messages.cpp
+++ b/clang/test/OpenMP/target_teams_distribute_map_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp b/clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp
index 082c2cb2b425..c412b713232e 100644
--- a/clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp
+++ b/clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp
@@ -18,7 +18,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp
index 90744b4cf0df..74d8609cb02e 100644
--- a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp
+++ b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp b/clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp
index 5229981b98fd..38be9e0069fe 100644
--- a/clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp
+++ b/clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_teams_map_messages.cpp b/clang/test/OpenMP/target_teams_map_messages.cpp
index 73e4cf59c5aa..f626bc4c1a80 100644
--- a/clang/test/OpenMP/target_teams_map_messages.cpp
+++ b/clang/test/OpenMP/target_teams_map_messages.cpp
@@ -335,7 +335,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}}  // expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_update_from_messages.cpp b/clang/test/OpenMP/target_update_from_messages.cpp
index 3dc377c4ca4c..e656d1302470 100644
--- a/clang/test/OpenMP/target_update_from_messages.cpp
+++ b/clang/test/OpenMP/target_update_from_messages.cpp
@@ -12,7 +12,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}}  // expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/target_update_messages.cpp b/clang/test/OpenMP/target_update_messages.cpp
index 73740c3eb582..8a27e2d62384 100644
--- a/clang/test/OpenMP/target_update_messages.cpp
+++ b/clang/test/OpenMP/target_update_messages.cpp
@@ -185,3 +185,27 @@ int main(int argc, char **argv) {
 
   return tmain(argc, argv);
 }
+
+template<typename _Tp, int _Nm> struct array {
+  _Tp & operator[](int __n) noexcept;
+};
+
+#pragma omp declare target
+extern array<double, 4> arr;
+#pragma omp end declare target
+
+void copy_host_to_device()
+{
+  #pragma omp target update from(arr)  // expected-no-error
+  arr[0] = 0;
+}
+
+struct FOO; // expected-note {{forward declaration of 'FOO'}}
+extern FOO a;
+template <typename T, int I>
+struct bar {
+  void func() {
+    #pragma omp target map(to: a) // expected-error {{incomplete type 'FOO' where a complete type is required}}
+    foo();
+  }
+};

diff  --git a/clang/test/OpenMP/target_update_to_messages.cpp b/clang/test/OpenMP/target_update_to_messages.cpp
index fca4e21304fc..ba13e3372e14 100644
--- a/clang/test/OpenMP/target_update_to_messages.cpp
+++ b/clang/test/OpenMP/target_update_to_messages.cpp
@@ -15,7 +15,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}}  // expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp
index c65e1f409695..ed02c9768ba3 100644
--- a/clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp
@@ -18,7 +18,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp
index a0997da09ea6..ccd743cba04c 100644
--- a/clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp
@@ -12,7 +12,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp
index fa323b6e7319..053e527c4eca 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp
@@ -18,7 +18,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp
index 1fd8fff82591..7f7fb3a95308 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp
@@ -12,7 +12,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp
index 0fe1d401ef31..576b978dd710 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp
@@ -28,7 +28,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp
index 48c95a778eda..779190c69ee5 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp
@@ -9,7 +9,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}}
+struct S1; // expected-note {{declared here}} // expected-note {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
index f585cb03baaa..5c331e34382a 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
@@ -91,7 +91,7 @@ template<int LEN> int test_warn() {
   return 0;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note {{forward declaration of 'S1'}}
 extern S1 a; // expected-note {{'a' declared here}}
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp
index 9b117c8b397d..4c08e42a1315 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp
@@ -19,7 +19,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp
index 688211e316f4..a88f6804117d 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp
@@ -12,7 +12,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
index f8b43cb50dfd..1d2b7a73cd69 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
@@ -105,7 +105,7 @@ template<int LEN> int test_warn() {
   return ind2;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp
index 3333298e2482..83caac33243f 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp
@@ -28,7 +28,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp
index 3cb11fb77034..42067aa64e44 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp
@@ -9,7 +9,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}}
+struct S1; // expected-note {{declared here}} expected-note {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_reduction_messages.cpp b/clang/test/OpenMP/teams_distribute_reduction_messages.cpp
index 56e01e15c66f..452b83bc61f8 100644
--- a/clang/test/OpenMP/teams_distribute_reduction_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_reduction_messages.cpp
@@ -34,7 +34,7 @@ void foobar(int &ref) {
   for (int j=0; j<100; j++) foo();
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_shared_messages.cpp b/clang/test/OpenMP/teams_distribute_shared_messages.cpp
index cb78f797c625..fdbc6abd9add 100644
--- a/clang/test/OpenMP/teams_distribute_shared_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_shared_messages.cpp
@@ -9,7 +9,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}}
+struct S1; // expected-note {{declared here}}  // expected-note {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp b/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
index 05996a60d8d2..a30c24ddb7a4 100644
--- a/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
@@ -91,7 +91,7 @@ template<int LEN> int test_warn() {
   return 0;
 }
 
-struct S1; // expected-note 2 {{declared here}}
+struct S1; // expected-note 2 {{declared here}} // expected-note {{forward declaration of 'S1'}}
 extern S1 a; // expected-note {{'a' declared here}}
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp
index 855d045e02b9..bf8570f952e0 100644
--- a/clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp
@@ -20,7 +20,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp b/clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp
index 77052bf5ecd1..5782071799d5 100644
--- a/clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp
@@ -12,7 +12,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp b/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
index 40260364c2a8..6f4592e07cfd 100644
--- a/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
@@ -105,7 +105,7 @@ template<int LEN> int test_warn() {
   return ind2;
 }
 
-struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
+struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp b/clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp
index 9709a30cbf63..37b210f1bd7a 100644
--- a/clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp
@@ -28,7 +28,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp b/clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp
index de828173a5b5..6d55c9c61d4f 100644
--- a/clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp
@@ -9,7 +9,7 @@ bool foobool(int argc) {
   return argc;
 }
 
-struct S1; // expected-note {{declared here}}
+struct S1; // expected-note {{declared here}} // expected-note {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_firstprivate_messages.cpp b/clang/test/OpenMP/teams_firstprivate_messages.cpp
index ee97c8e2ca0d..9954ac0b5070 100644
--- a/clang/test/OpenMP/teams_firstprivate_messages.cpp
+++ b/clang/test/OpenMP/teams_firstprivate_messages.cpp
@@ -18,7 +18,7 @@ void xxx(int argc) {
     ;
 }
 
-struct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_reduction_messages.cpp b/clang/test/OpenMP/teams_reduction_messages.cpp
index aee72d9e5324..d4153959453a 100644
--- a/clang/test/OpenMP/teams_reduction_messages.cpp
+++ b/clang/test/OpenMP/teams_reduction_messages.cpp
@@ -34,7 +34,7 @@ void foobar(int &ref) {
   foo();
 }
 
-struct S1; // expected-note {{declared here}} expected-note 4 {{forward declaration of 'S1'}}
+struct S1; // expected-note {{declared here}} expected-note 6 {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;

diff  --git a/clang/test/OpenMP/teams_shared_messages.cpp b/clang/test/OpenMP/teams_shared_messages.cpp
index 292b4b844b51..a37d629a2091 100644
--- a/clang/test/OpenMP/teams_shared_messages.cpp
+++ b/clang/test/OpenMP/teams_shared_messages.cpp
@@ -8,8 +8,7 @@ void foo() {
 bool foobool(int argc) {
   return argc;
 }
-
-struct S1; // expected-note {{declared here}}
+struct S1; // expected-note {{declared here}}  // expected-note {{forward declaration of 'S1'}}
 extern S1 a;
 class S2 {
   mutable int a;


        


More information about the cfe-commits mailing list