jyu2 created this revision. jyu2 added reviewers: jdoerfert, ABataev, mikerice, cfe-commits. jyu2 added a project: OpenMP. jyu2 requested review of this revision. Herald added a subscriber: sstefan1. Herald added a project: clang.
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 using RequireCompleteType when emit incomplete type, a note is also emitted to point to where incomplete type is declared. Because this change, many tests are needed to be fixed where adding additional note. This is to fix https://bugs.llvm.org/show_bug.cgi?id=50508 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D107200 Files: 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
Index: clang/test/OpenMP/teams_shared_messages.cpp =================================================================== --- clang/test/OpenMP/teams_shared_messages.cpp +++ clang/test/OpenMP/teams_shared_messages.cpp @@ -8,8 +8,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; Index: clang/test/OpenMP/teams_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/teams_reduction_messages.cpp +++ clang/test/OpenMP/teams_reduction_messages.cpp @@ -34,7 +34,7 @@ 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; Index: clang/test/OpenMP/teams_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_firstprivate_messages.cpp +++ clang/test/OpenMP/teams_firstprivate_messages.cpp @@ -18,7 +18,7 @@ ; } -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; Index: clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_shared_messages.cpp @@ -9,7 +9,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_reduction_messages.cpp @@ -28,7 +28,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp @@ -105,7 +105,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_lastprivate_messages.cpp @@ -12,7 +12,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_firstprivate_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp @@ -91,7 +91,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_shared_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_shared_messages.cpp +++ clang/test/OpenMP/teams_distribute_shared_messages.cpp @@ -9,7 +9,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_reduction_messages.cpp +++ clang/test/OpenMP/teams_distribute_reduction_messages.cpp @@ -34,7 +34,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_shared_messages.cpp @@ -9,7 +9,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_messages.cpp @@ -28,7 +28,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp @@ -105,7 +105,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_messages.cpp @@ -12,7 +12,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_messages.cpp @@ -19,7 +19,7 @@ ; } -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; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp @@ -91,7 +91,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_shared_messages.cpp @@ -9,7 +9,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_reduction_messages.cpp @@ -28,7 +28,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_messages.cpp @@ -12,7 +12,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_messages.cpp @@ -18,7 +18,7 @@ ; } -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; Index: clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_lastprivate_messages.cpp @@ -12,7 +12,7 @@ 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; Index: clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp +++ clang/test/OpenMP/teams_distribute_firstprivate_messages.cpp @@ -18,7 +18,7 @@ ; } -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; Index: clang/test/OpenMP/target_update_to_messages.cpp =================================================================== --- clang/test/OpenMP/target_update_to_messages.cpp +++ clang/test/OpenMP/target_update_to_messages.cpp @@ -15,7 +15,7 @@ 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; Index: clang/test/OpenMP/target_update_messages.cpp =================================================================== --- clang/test/OpenMP/target_update_messages.cpp +++ clang/test/OpenMP/target_update_messages.cpp @@ -185,3 +185,27 @@ 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(); + } +}; Index: clang/test/OpenMP/target_update_from_messages.cpp =================================================================== --- clang/test/OpenMP/target_update_from_messages.cpp +++ clang/test/OpenMP/target_update_from_messages.cpp @@ -12,7 +12,7 @@ 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; Index: clang/test/OpenMP/target_teams_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_teams_map_messages.cpp +++ clang/test/OpenMP/target_teams_map_messages.cpp @@ -335,7 +335,7 @@ 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; Index: clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp +++ clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp +++ clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp +++ clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp @@ -18,7 +18,7 @@ ; } -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; Index: clang/test/OpenMP/target_teams_distribute_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_teams_distribute_map_messages.cpp +++ clang/test/OpenMP/target_teams_distribute_map_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/target_simd_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_simd_map_messages.cpp +++ clang/test/OpenMP/target_simd_map_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/target_parallel_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_parallel_map_messages.cpp +++ clang/test/OpenMP/target_parallel_map_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp +++ clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/target_parallel_for_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_parallel_for_map_messages.cpp +++ clang/test/OpenMP/target_parallel_for_map_messages.cpp @@ -20,7 +20,7 @@ ; } -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; Index: clang/test/OpenMP/target_map_messages.cpp =================================================================== --- clang/test/OpenMP/target_map_messages.cpp +++ clang/test/OpenMP/target_map_messages.cpp @@ -448,7 +448,7 @@ 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; Index: clang/test/OpenMP/distribute_simd_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_simd_reduction_messages.cpp +++ clang/test/OpenMP/distribute_simd_reduction_messages.cpp @@ -35,7 +35,7 @@ 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; Index: clang/test/OpenMP/distribute_simd_linear_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_simd_linear_messages.cpp +++ clang/test/OpenMP/distribute_simd_linear_messages.cpp @@ -116,7 +116,7 @@ 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; Index: clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp +++ clang/test/OpenMP/distribute_simd_lastprivate_messages.cpp @@ -12,7 +12,7 @@ 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; Index: clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp +++ clang/test/OpenMP/distribute_simd_firstprivate_messages.cpp @@ -10,7 +10,7 @@ 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; Index: clang/test/OpenMP/distribute_simd_aligned_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_simd_aligned_messages.cpp +++ clang/test/OpenMP/distribute_simd_aligned_messages.cpp @@ -102,7 +102,7 @@ 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; Index: clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_simd_shared_messages.cpp +++ 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; Index: clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_simd_reduction_messages.cpp @@ -35,7 +35,7 @@ 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; Index: clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp @@ -116,7 +116,7 @@ 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; Index: clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_messages.cpp @@ -12,7 +12,7 @@ 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; Index: clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_messages.cpp @@ -17,7 +17,7 @@ ; } -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; Index: clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp @@ -102,7 +102,7 @@ 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; Index: clang/test/OpenMP/distribute_parallel_for_shared_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_shared_messages.cpp +++ 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; Index: clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_reduction_messages.cpp @@ -36,7 +36,7 @@ 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; Index: clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_lastprivate_messages.cpp @@ -11,7 +11,7 @@ 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; Index: clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp +++ clang/test/OpenMP/distribute_parallel_for_firstprivate_messages.cpp @@ -18,7 +18,7 @@ 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; Index: clang/test/OpenMP/distribute_firstprivate_messages.cpp =================================================================== --- clang/test/OpenMP/distribute_firstprivate_messages.cpp +++ clang/test/OpenMP/distribute_firstprivate_messages.cpp @@ -9,7 +9,7 @@ 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; Index: clang/lib/Sema/SemaOpenMP.cpp =================================================================== --- clang/lib/Sema/SemaOpenMP.cpp +++ clang/lib/Sema/SemaOpenMP.cpp @@ -18443,11 +18443,9 @@ 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;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits