diff options
author | Joel E. Denny <jdenny.ornl@gmail.com> | 2018-06-28 19:54:49 +0000 |
---|---|---|
committer | Joel E. Denny <jdenny.ornl@gmail.com> | 2018-06-28 19:54:49 +0000 |
commit | 3cabf73270c450050d7d07be8f80cb97600d5af3 (patch) | |
tree | c7675d1cb48156ce28215a1fd91efe2c8497057f | |
parent | e0e7a8ae58fccea3897887381e65ae6307e236e4 (diff) | |
download | bcm5719-llvm-3cabf73270c450050d7d07be8f80cb97600d5af3.tar.gz bcm5719-llvm-3cabf73270c450050d7d07be8f80cb97600d5af3.zip |
[OPENMP] Fix incomplete type check for array reductions
A reduction for an incomplete array type used to produce an assert
fail during codegen. Now it produces a diagnostic.
Reviewed By: ABataev
Differential Revision: https://reviews.llvm.org/D48735
llvm-svn: 335911
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 2 | ||||
-rw-r--r-- | clang/test/OpenMP/parallel_reduction_messages.c | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 7da9df90acb..6fb0125e6eb 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -10335,7 +10335,7 @@ static bool actOnOMPReductionKindClause( // OpenMP [2.9.3.3, Restrictions, C/C++, p.3] // A variable that appears in a private clause must not have an incomplete // type or a reference type. - if (S.RequireCompleteType(ELoc, Type, + if (S.RequireCompleteType(ELoc, D->getType(), diag::err_omp_reduction_incomplete_type)) continue; // OpenMP [2.14.3.6, reduction clause, Restrictions] diff --git a/clang/test/OpenMP/parallel_reduction_messages.c b/clang/test/OpenMP/parallel_reduction_messages.c new file mode 100644 index 00000000000..f88f8e05649 --- /dev/null +++ b/clang/test/OpenMP/parallel_reduction_messages.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 150 -o - %s + +int incomplete[]; + +void test() { +#pragma omp parallel reduction(+ : incomplete) // expected-error {{a reduction list item with incomplete type 'int []'}} + ; +} + +// complete to suppress an additional warning, but it's too late for pragmas +int incomplete[3]; |