[APSInt][OpenMP] Fix isNegative, etc. for unsigned types
authorJoel E. Denny <jdenny.ornl@gmail.com>
Tue, 23 Apr 2019 17:04:15 +0000 (17:04 +0000)
committerJoel E. Denny <jdenny.ornl@gmail.com>
Tue, 23 Apr 2019 17:04:15 +0000 (17:04 +0000)
Without this patch, APSInt inherits APInt::isNegative, which merely
checks the sign bit without regard to whether the type is actually
signed.  isNonNegative and isStrictlyPositive call isNegative and so
are also affected.

This patch adjusts APSInt to override isNegative, isNonNegative, and
isStrictlyPositive with implementations that consider whether the type
is signed.

A large set of Clang OpenMP tests are affected.  Without this patch,
these tests assume that `true` is not a valid argument for clauses
like `collapse`.  Indeed, `true` fails APInt::isStrictlyPositive but
not APSInt::isStrictlyPositive.  This patch adjusts those tests to
assume `true` should be accepted.

This patch also adds tests revealing various other similar fixes due
to APSInt::isNegative calls in Clang's ExprConstant.cpp and
SemaExpr.cpp: `++` and `--` overflow in `constexpr`, evaluated object
size based on `alloc_size`, `<<` and `>>` shift count validation, and
OpenMP array section validation.

Reviewed By: lebedev.ri, ABataev, hfinkel

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

llvm-svn: 359012

64 files changed:
clang/test/CodeGen/alloc-size.c
clang/test/OpenMP/distribute_collapse_messages.cpp
clang/test/OpenMP/distribute_parallel_for_collapse_messages.cpp
clang/test/OpenMP/distribute_parallel_for_simd_collapse_messages.cpp
clang/test/OpenMP/distribute_parallel_for_simd_safelen_messages.cpp
clang/test/OpenMP/distribute_parallel_for_simd_simdlen_messages.cpp
clang/test/OpenMP/distribute_simd_collapse_messages.cpp
clang/test/OpenMP/distribute_simd_safelen_messages.cpp
clang/test/OpenMP/distribute_simd_simdlen_messages.cpp
clang/test/OpenMP/for_collapse_messages.cpp
clang/test/OpenMP/for_ordered_clause.cpp
clang/test/OpenMP/for_simd_collapse_messages.cpp
clang/test/OpenMP/for_simd_safelen_messages.cpp
clang/test/OpenMP/for_simd_simdlen_messages.cpp
clang/test/OpenMP/parallel_for_collapse_messages.cpp
clang/test/OpenMP/parallel_for_ordered_messages.cpp
clang/test/OpenMP/parallel_for_simd_collapse_messages.cpp
clang/test/OpenMP/parallel_for_simd_safelen_messages.cpp
clang/test/OpenMP/parallel_for_simd_simdlen_messages.cpp
clang/test/OpenMP/simd_collapse_messages.cpp
clang/test/OpenMP/simd_safelen_messages.cpp
clang/test/OpenMP/simd_simdlen_messages.cpp
clang/test/OpenMP/target_map_messages.cpp
clang/test/OpenMP/target_parallel_for_collapse_messages.cpp
clang/test/OpenMP/target_parallel_for_map_messages.cpp
clang/test/OpenMP/target_parallel_for_ordered_messages.cpp
clang/test/OpenMP/target_parallel_for_simd_collapse_messages.cpp
clang/test/OpenMP/target_parallel_for_simd_map_messages.cpp
clang/test/OpenMP/target_parallel_for_simd_ordered_messages.cpp
clang/test/OpenMP/target_parallel_for_simd_safelen_messages.cpp
clang/test/OpenMP/target_parallel_for_simd_simdlen_messages.cpp
clang/test/OpenMP/target_parallel_map_messages.cpp
clang/test/OpenMP/target_simd_collapse_messages.cpp
clang/test/OpenMP/target_simd_safelen_messages.cpp
clang/test/OpenMP/target_simd_simdlen_messages.cpp
clang/test/OpenMP/target_teams_distribute_collapse_messages.cpp
clang/test/OpenMP/target_teams_distribute_map_messages.cpp
clang/test/OpenMP/target_teams_distribute_parallel_for_collapse_messages.cpp
clang/test/OpenMP/target_teams_distribute_parallel_for_map_messages.cpp
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_collapse_messages.cpp
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_map_messages.cpp
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_safelen_messages.cpp
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_simdlen_messages.cpp
clang/test/OpenMP/target_teams_distribute_simd_collapse_messages.cpp
clang/test/OpenMP/target_teams_distribute_simd_map_messages.cpp
clang/test/OpenMP/target_teams_distribute_simd_safelen_messages.cpp
clang/test/OpenMP/target_teams_distribute_simd_simdlen_messages.cpp
clang/test/OpenMP/target_teams_map_messages.cpp
clang/test/OpenMP/taskloop_collapse_messages.cpp
clang/test/OpenMP/taskloop_simd_collapse_messages.cpp
clang/test/OpenMP/taskloop_simd_safelen_messages.cpp
clang/test/OpenMP/taskloop_simd_simdlen_messages.cpp
clang/test/OpenMP/teams_distribute_collapse_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_collapse_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_simd_collapse_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_simd_safelen_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_simd_simdlen_messages.cpp
clang/test/OpenMP/teams_distribute_simd_collapse_messages.cpp
clang/test/OpenMP/teams_distribute_simd_safelen_messages.cpp
clang/test/OpenMP/teams_distribute_simd_simdlen_messages.cpp
clang/test/Sema/shift.c
clang/test/SemaCXX/constexpr-unsigned-high-bit.cpp [new file with mode: 0644]
llvm/include/llvm/ADT/APSInt.h
llvm/unittests/ADT/APSIntTest.cpp

index aa5b295..16cc0fe 100644 (file)
@@ -357,3 +357,12 @@ void test12() {
   // CHECK: store i32 -1
   gi = OBJECT_SIZE_BUILTIN(my_signed_calloc(-2, 1), 0);
 }
+
+void *alloc_uchar(unsigned char) __attribute__((alloc_size(1)));
+
+// CHECK-LABEL: @test13
+void test13() {
+  // If 128 were incorrectly seen as negative, the result would become -1.
+  // CHECK: store i32 128,
+  gi = OBJECT_SIZE_BUILTIN(alloc_uchar(128), 0);
+}
index b852fd2..e4164da 100644 (file)
@@ -42,7 +42,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+3 2 {{directive '#pragma omp distribute' cannot contain more than one 'collapse' clause}}
-  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+1 2 {{expression is not an integral constant expression}}
   #pragma omp distribute collapse (foobool(argc)), collapse (true), collapse (-5)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
@@ -85,7 +85,7 @@ int main(int argc, char **argv) {
 #endif
   // expected-error@+3 {{expression is not an integral constant expression}}
   // expected-error@+2 2 {{directive '#pragma omp distribute' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp distribute collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp distribute collapse (S1) // expected-error {{'S1' does not refer to a value}}
index f01dfee..c3298f1 100644 (file)
@@ -53,7 +53,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 #pragma omp distribute parallel for collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp distribute parallel for', but found only 1}}
   // expected-error@+8 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+7 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+7 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+6 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -124,7 +124,7 @@ int main(int argc, char **argv) {
   // expected-note@+6{{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+4 2 {{directive '#pragma omp distribute parallel for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target
 #pragma omp teams
 #pragma omp distribute parallel for collapse (foobool(argc)), collapse (true), collapse (-5) 
index b12dcc1..9399594 100644 (file)
@@ -53,7 +53,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 #pragma omp distribute parallel for simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp distribute parallel for simd', but found only 1}}
   // expected-error@+8 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+7 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+7 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+6 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -124,7 +124,7 @@ int main(int argc, char **argv) {
   // expected-note@+6{{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+4 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target
 #pragma omp teams
 #pragma omp distribute parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5) 
index 93766f9..7e76c1f 100644 (file)
@@ -63,11 +63,14 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -144,11 +147,14 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index 8e40e35..9c1c552 100644 (file)
@@ -66,11 +66,14 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp distribute parallel for simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) // expected-error 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'simdlen' clause}} expected-error 2 {{argument to 'simdlen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'simdlen' clause}}
+// expected-error@+2 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp distribute parallel for simd simdlen (foobool(argc)), simdlen (true), simdlen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -148,11 +151,14 @@ int main(int argc, char **argv) {
 
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp distribute parallel for simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) // expected-error {{expression is not an integral constant expression}} expected-error 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'simdlen' clause}} expected-error 2 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+// expected-error@+3 {{expression is not an integral constant expression}}
+// expected-error@+2 2 {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'simdlen' clause}}
+// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+#pragma omp distribute parallel for simd simdlen (foobool(argc)), simdlen (true), simdlen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index f4d5b73..204719a 100644 (file)
@@ -53,7 +53,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 #pragma omp distribute simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp distribute simd', but found only 1}}
   // expected-error@+8 2 {{directive '#pragma omp distribute simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+7 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+7 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+6 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -124,7 +124,7 @@ int main(int argc, char **argv) {
   // expected-note@+6{{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+4 2 {{directive '#pragma omp distribute simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target
 #pragma omp teams
 #pragma omp distribute simd collapse (foobool(argc)), collapse (true), collapse (-5) 
index c95d121..30c0976 100644 (file)
@@ -63,11 +63,14 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp distribute simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -144,11 +147,14 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index c95d121..30c0976 100644 (file)
@@ -63,11 +63,14 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp distribute simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -144,11 +147,14 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+7 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
 #pragma omp teams
-#pragma omp parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index 230880b..5530ddc 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp for collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp for', but found only 1}}
   // expected-error@+6 2 {{directive '#pragma omp for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp for collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp for collapse (S1) // expected-error {{'S1' does not refer to a value}}
index ec29a98..7ccf570 100644 (file)
@@ -47,7 +47,7 @@ T tmain(T argc, S **argv) {                   //expected-note 2 {{declared here}
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i - ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp for', but found only 1}}
 // expected-error@+6 2 {{directive '#pragma omp for' cannot contain more than one 'ordered' clause}}
-// expected-error@+5 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+5 {{argument to 'ordered' clause must be a strictly positive integer value}}
 // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
 // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -113,7 +113,7 @@ int main(int argc, char **argv) {
 // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 // expected-error@+2 2 {{directive '#pragma omp for' cannot contain more than one 'ordered' clause}}
-// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
 #pragma omp for ordered(foobool(argc)), ordered(true), ordered(-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i - 4];
index 9e9b8ee..f5c130f 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp for simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp for simd', but found only 1}}
   // expected-error@+6 2 {{directive '#pragma omp for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp for simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp for simd collapse (S1) // expected-error {{'S1' does not refer to a value}}
index 31b0f84..6868b93 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp for simd safelen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp for simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp for simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
   #pragma omp for simd safelen (foobool(argc)), safelen (true), safelen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp for simd safelen (S1) // expected-error {{'S1' does not refer to a value}}
index 0995428..86cc469 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp for simd simdlen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp for simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp for simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   #pragma omp for simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp for simd simdlen (S1) // expected-error {{'S1' does not refer to a value}}
index 9d99c25..192fa45 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp parallel for collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp parallel for', but found only 1}}
   // expected-error@+6 2 {{directive '#pragma omp parallel for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
   // expected-note@+4{{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp parallel for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp parallel for collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp parallel for collapse (S1) // expected-error {{'S1' does not refer to a value}}
index 381bc6a..9681d78 100644 (file)
@@ -46,7 +46,7 @@ T tmain(T argc, S **argv) {                   //expected-note 2 {{declared here}
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i - ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp parallel for', but found only 1}}
 // expected-error@+6 2 {{directive '#pragma omp parallel for' cannot contain more than one 'ordered' clause}}
-// expected-error@+5 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+5 {{argument to 'ordered' clause must be a strictly positive integer value}}
 // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
 // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -104,7 +104,7 @@ int main(int argc, char **argv) {
 // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 // expected-error@+2 2 {{directive '#pragma omp parallel for' cannot contain more than one 'ordered' clause}}
-// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
 #pragma omp parallel for ordered(foobool(argc)), ordered(true), ordered(-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i - 4];
index d23086b..39d01b8 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp parallel for simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp parallel for simd', but found only 1}}
   // expected-error@+6 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp parallel for simd collapse (S1) // expected-error {{'S1' does not refer to a value}}
index 49ebf42..939a1da 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp parallel for simd safelen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
   #pragma omp parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp parallel for simd safelen (S1) // expected-error {{'S1' does not refer to a value}}
index 167644e..8cf196b 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp parallel for simd simdlen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   #pragma omp parallel for simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp parallel for simd simdlen (S1) // expected-error {{'S1' does not refer to a value}}
index b3100c0..3e980d9 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp simd', but found only 1}}
   // expected-error@+6 2 {{directive '#pragma omp simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp simd collapse (S1) // expected-error {{'S1' does not refer to a value}}
index b75a923..f40873a 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp simd safelen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
   #pragma omp simd safelen (foobool(argc)), safelen (true), safelen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp simd safelen (S1) // expected-error {{'S1' does not refer to a value}}
index f34d628..27ab4ac 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp simd simdlen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   #pragma omp simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp simd simdlen (S1) // expected-error {{'S1' does not refer to a value}}
index e1967d2..04e201d 100644 (file)
@@ -73,6 +73,8 @@ struct SA {
     {}
     #pragma omp target map(b[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
     {}
+    #pragma omp target map(b[true:true])
+    {}
 
     #pragma omp target map(: c,f) // expected-error {{missing map type}}
     {}
index d8ebdda..2e194ff 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp target parallel for collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp target parallel for', but found only 1}}
   // expected-error@+3 2 {{directive '#pragma omp target parallel for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+1 2 {{expression is not an integral constant expression}}
   #pragma omp target parallel for collapse (foobool(argc)), collapse (true), collapse (-5)
 #if __cplusplus >= 201103L
@@ -82,7 +82,7 @@ int main(int argc, char **argv) {
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   // expected-error@+3 {{expression is not an integral constant expression}}
   // expected-error@+2 2 {{directive '#pragma omp target parallel for' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp target parallel for collapse (foobool(argc)), collapse (true), collapse (-5) 
 #if __cplusplus >= 201103L
 // expected-note@-2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
index 8521700..6ef87d4 100644 (file)
@@ -86,6 +86,8 @@ T tmain(T argc) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for map(l[:-1]) // expected-error 2 {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target parallel for map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for map(tofrom: t[:I])
@@ -206,6 +208,8 @@ int main(int argc, char **argv) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for map(l[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target parallel for map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for map(to: x)
index 002e8e9..38a977e 100644 (file)
@@ -49,7 +49,7 @@ T tmain(T argc, S **argv) {                   //expected-note 2 {{declared here}
 // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 // expected-error@+3 2 {{directive '#pragma omp target parallel for' cannot contain more than one 'ordered' clause}}
-// expected-error@+2 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+2 {{argument to 'ordered' clause must be a strictly positive integer value}}
 // expected-error@+1 2 {{expression is not an integral constant expression}}
 #pragma omp target parallel for ordered(foobool(argc)), ordered(true), ordered(-5)
   for (int i = ST; i < N; i++)
@@ -103,7 +103,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+3 {{expression is not an integral constant expression}}
 // expected-error@+2 2 {{directive '#pragma omp target parallel for' cannot contain more than one 'ordered' clause}}
-// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
 #pragma omp target parallel for ordered(foobool(argc)), ordered(true), ordered(-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i - 4];
index f3f2aa9..24e30b3 100644 (file)
@@ -43,7 +43,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+3 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+1 2 {{expression is not an integral constant expression}}
   #pragma omp target parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
 #endif
   // expected-error@+3 {{expression is not an integral constant expression}}
   // expected-error@+2 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp target parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp target parallel for simd collapse (S1) // expected-error {{'S1' does not refer to a value}}
index 83259cd..f18cc9a 100644 (file)
@@ -86,6 +86,8 @@ T tmain(T argc) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for simd map(l[:-1]) // expected-error 2 {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target parallel for simd map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for simd map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for simd map(tofrom: t[:I])
@@ -206,6 +208,8 @@ int main(int argc, char **argv) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel map(l[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target parallel map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for simd map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target parallel for simd map(to: x)
index 3e3f6c2..08b9247 100644 (file)
@@ -47,7 +47,7 @@ T tmain(T argc, S **argv) {
 #pragma omp target parallel for simd ordered((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i - ST];
-// expected-error@+3 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+3 {{argument to 'ordered' clause must be a strictly positive integer value}}
 // expected-error@+2 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'ordered' clause}}
 // expected-error@+1 {{'ordered' clause with a parameter can not be specified in '#pragma omp target parallel for simd' directive}}
 #pragma omp target parallel for simd ordered(foobool(argc)), ordered(true), ordered(-5)
@@ -105,7 +105,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+3 {{expression is not an integral constant expression}}
 // expected-error@+2 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'ordered' clause}}
-// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'ordered' clause must be a strictly positive integer value}}
 #pragma omp target parallel for simd ordered(foobool(argc)), ordered(true), ordered(-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i - 4];
index 74b1a73..1121593 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp target parallel for simd safelen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
   #pragma omp target parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp target parallel for simd safelen (S1) // expected-error {{'S1' does not refer to a value}}
index f8b375e..33a6642 100644 (file)
@@ -46,7 +46,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
 
   // expected-error@+6 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -111,7 +111,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 // expected-error@+2 2 {{directive '#pragma omp target parallel for simd' cannot contain more than one 'simdlen' clause}}
-// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
 #pragma omp target parallel for simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
 
index 510595c..52774aa 100644 (file)
@@ -86,6 +86,8 @@ T tmain(T argc) {
   foo();
 #pragma omp target parallel map(l[:-1]) // expected-error 2 {{section length is evaluated to a negative value -1}}
   foo();
+#pragma omp target parallel map(l[true:true])
+  foo();
 #pragma omp target parallel map(x)
   foo();
 #pragma omp target parallel map(tofrom: t[:I])
@@ -205,6 +207,8 @@ int main(int argc, char **argv) {
   foo();
 #pragma omp target parallel map(l[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
   foo();
+#pragma omp target parallel map(l[true:true])
+  foo();
 #pragma omp target parallel map(x)
   foo();
 #pragma omp target parallel map(to: x)
index 4008441..8bf2c3b 100644 (file)
@@ -41,7 +41,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+3 2 {{directive '#pragma omp target simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+1 2 {{expression is not an integral constant expression}}
   #pragma omp target simd collapse (foobool(argc)), collapse (true), collapse (-5)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
@@ -82,7 +82,7 @@ int main(int argc, char **argv) {
 #endif
   // expected-error@+3 {{expression is not an integral constant expression}}
   // expected-error@+2 2 {{directive '#pragma omp target simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp target simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp target simd collapse (S1) // expected-error {{'S1' does not refer to a value}}
index 69ceab1..993d707 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp target simd safelen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp target simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp target simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
   #pragma omp target simd safelen (foobool(argc)), safelen (true), safelen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp target simd safelen (S1) // expected-error {{'S1' does not refer to a value}}
index c65fe20..3a6e477 100644 (file)
@@ -46,7 +46,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
 
   // expected-error@+6 2 {{directive '#pragma omp target simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -111,7 +111,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 // expected-error@+2 2 {{directive '#pragma omp target simd' cannot contain more than one 'simdlen' clause}}
-// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
 #pragma omp target simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
 
index 4010c5a..7495a18 100644 (file)
@@ -56,7 +56,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 // expected-error@+3 2 {{directive '#pragma omp target teams distribute' cannot contain more than one 'collapse' clause}}
-// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+1 2 {{expression is not an integral constant expression}}
 #pragma omp target teams distribute collapse (foobool(argc)), collapse (true), collapse (-5)
   for (int i = ST; i < N; i++)
@@ -122,7 +122,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+3 {{expression is not an integral constant expression}}
 // expected-error@+2 2 {{directive '#pragma omp target teams distribute' cannot contain more than one 'collapse' clause}}
-// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target teams distribute collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
index e4c1d0f..0de4297 100644 (file)
@@ -86,6 +86,8 @@ T tmain(T argc) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute map(l[:-1]) // expected-error 2 {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute map(tofrom: t[:I])
@@ -206,6 +208,8 @@ int main(int argc, char **argv) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute map(l[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute map(to: x)
index 61e76cd..a866b79 100644 (file)
@@ -56,7 +56,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used}}
 #endif
 // expected-error@+3 2 {{directive '#pragma omp target teams distribute parallel for' cannot contain more than one 'collapse' clause}}
-// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+1 2 {{expression is not an integral constant expression}}
 #pragma omp target teams distribute parallel for collapse (foobool(argc)), collapse (true), collapse (-5)
   for (int i = ST; i < N; i++)
@@ -121,7 +121,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+3 {{expression is not an integral constant expression}}
 // expected-error@+2 2 {{directive '#pragma omp target teams distribute parallel for' cannot contain more than one 'collapse' clause}}
-// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target teams distribute parallel for collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
index 878fac1..f47655d 100644 (file)
@@ -86,6 +86,8 @@ T tmain(T argc) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for map(l[:-1]) // expected-error 2 {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute parallel for map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for map(tofrom: t[:I])
@@ -206,6 +208,8 @@ int main(int argc, char **argv) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for map(l[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute parallel for map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for map(to: x)
index 069ea65..4ca7a8c 100644 (file)
@@ -56,7 +56,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used}}
 #endif
 // expected-error@+3 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+1 2 {{expression is not an integral constant expression}}
 #pragma omp target teams distribute parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5)
   for (int i = ST; i < N; i++)
@@ -121,7 +121,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+3 {{expression is not an integral constant expression}}
 // expected-error@+2 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target teams distribute parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
index b2da680..64fe5f6 100644 (file)
@@ -86,6 +86,8 @@ T tmain(T argc) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for simd map(l[:-1]) // expected-error 2 {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute parallel for simd map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for simd map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for simd map(tofrom: t[:I])
@@ -206,6 +208,8 @@ int main(int argc, char **argv) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for simd map(l[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute parallel for simd map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for simd map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute parallel for simd map(to: x)
index f068e6b..d05f071 100644 (file)
@@ -49,9 +49,12 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -108,9 +111,12 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index d5f714c..1c49058 100644 (file)
@@ -49,9 +49,12 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -108,9 +111,12 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index a2d3bde..6561091 100644 (file)
@@ -53,7 +53,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp target teams distribute simd', but found only 1}}
 
 // expected-error@+6 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
 // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -118,7 +118,7 @@ int main(int argc, char **argv) {
 
 // expected-error@+6 {{expression is not an integral constant expression}}
 // expected-error@+5 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+4 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+4 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #if __cplusplus >= 201103L
 // expected-note@+2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
index c559bcb..3806c4e 100644 (file)
@@ -86,6 +86,8 @@ T tmain(T argc) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute simd map(l[:-1]) // expected-error 2 {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute simd map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute simd map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute simd map(tofrom: t[:I])
@@ -206,6 +208,8 @@ int main(int argc, char **argv) {
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute simd map(l[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
   for (i = 0; i < argc; ++i) foo();
+#pragma omp target teams distribute simd map(l[true:true])
+  for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute simd map(x)
   for (i = 0; i < argc; ++i) foo();
 #pragma omp target teams distribute simd map(to: x)
index 67b2221..da5c8eb 100644 (file)
@@ -49,9 +49,12 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -108,9 +111,12 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index 6fea25a..851fff3 100644 (file)
@@ -49,9 +49,12 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -108,9 +111,12 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+5 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
-#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp target teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp target teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index e59a96c..8608756 100644 (file)
@@ -57,6 +57,8 @@ struct SA {
     {}
     #pragma omp target teams map(b[:-1]) // expected-error {{section length is evaluated to a negative value -1}}
     {}
+    #pragma omp target teams map(b[true:true])
+    {}
 
     #pragma omp target teams map(always, tofrom: c,f)
     {}
index 4de0f38..091b8b8 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp taskloop collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp taskloop', but found only 1}}
   // expected-error@+6 2 {{directive '#pragma omp taskloop' cannot contain more than one 'collapse' clause}}
-  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp taskloop' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp taskloop collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp taskloop collapse (S1) // expected-error {{'S1' does not refer to a value}}
index 3f7e66a..fd620c8 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp taskloop simd collapse ((ST > 0) ? 1 + ST : 2) // expected-note 2 {{as specified in 'collapse' clause}}
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp taskloop simd', but found only 1}}
   // expected-error@+6 2 {{directive '#pragma omp taskloop simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp taskloop simd' cannot contain more than one 'collapse' clause}}
-  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
   #pragma omp taskloop simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp taskloop simd collapse (S1) // expected-error {{'S1' does not refer to a value}}
index 87c4fe0..b926689 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp taskloop simd safelen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp taskloop simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'safelen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp taskloop simd' cannot contain more than one 'safelen' clause}}
-  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
   #pragma omp taskloop simd safelen (foobool(argc)), safelen (true), safelen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp taskloop simd safelen (S1) // expected-error {{'S1' does not refer to a value}}
index 4170d01..75d9a1d 100644 (file)
@@ -39,7 +39,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
   #pragma omp taskloop simd simdlen ((ST > 0) ? 1 + ST : 2)
   for (int i = ST; i < N; i++) argv[0][i] = argv[0][i] - argv[0][i-ST];
   // expected-error@+6 2 {{directive '#pragma omp taskloop simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+5 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   // expected-error@+4 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
   // expected-note@+2 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -84,7 +84,7 @@ int main(int argc, char **argv) {
   // expected-note@+4 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
   // expected-error@+2 2 {{directive '#pragma omp taskloop simd' cannot contain more than one 'simdlen' clause}}
-  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
+  // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
   #pragma omp taskloop simd simdlen (foobool(argc)), simdlen (true), simdlen (-5) 
   for (int i = 4; i < 12; i++) argv[0][i] = argv[0][i] - argv[0][i-4];
   #pragma omp taskloop simd simdlen (S1) // expected-error {{'S1' does not refer to a value}}
index bcbd774..d95109c 100644 (file)
@@ -63,7 +63,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 // expected-note@+6 2 {{non-constexpr function 'foobool' cannot be used}}
 #endif
 // expected-error@+4 2 {{directive '#pragma omp teams distribute' cannot contain more than one 'collapse' clause}}
-// expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+2 2 {{expression is not an integral constant expression}}
 #pragma omp target
 #pragma omp teams distribute collapse (foobool(argc)), collapse (true), collapse (-5)
@@ -140,7 +140,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+4 {{expression is not an integral constant expression}}
 // expected-error@+3 2 {{directive '#pragma omp teams distribute' cannot contain more than one 'collapse' clause}}
-// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target
 #pragma omp teams distribute collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++)
index 2e83a37..1171807 100644 (file)
@@ -63,7 +63,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 // expected-note@+6 2 {{non-constexpr function 'foobool' cannot be used}}
 #endif
 // expected-error@+4 2 {{directive '#pragma omp teams distribute parallel for' cannot contain more than one 'collapse' clause}}
-// expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+2 2 {{expression is not an integral constant expression}}
 #pragma omp target
 #pragma omp teams distribute parallel for collapse (foobool(argc)), collapse (true), collapse (-5)
@@ -139,7 +139,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+4 {{expression is not an integral constant expression}}
 // expected-error@+3 2 {{directive '#pragma omp teams distribute parallel for' cannot contain more than one 'collapse' clause}}
-// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target
 #pragma omp teams distribute parallel for collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++)
index a287da7..31611c7 100644 (file)
@@ -63,7 +63,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
 // expected-note@+6 2 {{non-constexpr function 'foobool' cannot be used}}
 #endif
 // expected-error@+4 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+3 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+2 2 {{expression is not an integral constant expression}}
 #pragma omp target
 #pragma omp teams distribute parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5)
@@ -139,7 +139,7 @@ int main(int argc, char **argv) {
 #endif
 // expected-error@+4 {{expression is not an integral constant expression}}
 // expected-error@+3 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+2 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #pragma omp target
 #pragma omp teams distribute parallel for simd collapse (foobool(argc)), collapse (true), collapse (-5) 
   for (int i = 4; i < 12; i++)
index e673bb3..2b31c89 100644 (file)
@@ -56,10 +56,13 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -126,10 +129,13 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index e673bb3..2b31c89 100644 (file)
@@ -56,10 +56,13 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -126,10 +129,13 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp teams distribute parallel for simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp teams distribute parallel for simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index d0b2f81..a5eb6d2 100644 (file)
@@ -60,7 +60,7 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST]; // expected-error 2 {{expected 2 for loops after '#pragma omp teams distribute simd', but found only 1}}
 
 // expected-error@+7 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+6 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+6 {{argument to 'collapse' clause must be a strictly positive integer value}}
 // expected-error@+5 2 {{expression is not an integral constant expression}}
 #if __cplusplus >= 201103L
 // expected-note@+3 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
@@ -136,7 +136,7 @@ int main(int argc, char **argv) {
 
 // expected-error@+7 {{expression is not an integral constant expression}}
 // expected-error@+6 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'collapse' clause}}
-// expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
+// expected-error@+5 {{argument to 'collapse' clause must be a strictly positive integer value}}
 #if __cplusplus >= 201103L
 // expected-note@+3 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
index 7be581a..a3ea61e 100644 (file)
@@ -56,10 +56,13 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -126,10 +129,13 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index 7be581a..a3ea61e 100644 (file)
@@ -56,10 +56,13 @@ T tmain(T argc, S **argv) { //expected-note 2 {{declared here}}
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 2 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{expression is not an integral constant expression}}
+// expected-error@+3 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+2 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+1 2 {{expression is not an integral constant expression}}
+#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = ST; i < N; i++)
     argv[0][i] = argv[0][i] - argv[0][i-ST];
 
@@ -126,10 +129,13 @@ int main(int argc, char **argv) {
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
 #if __cplusplus >= 201103L
-  // expected-note@+3 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
+  // expected-note@+6 {{non-constexpr function 'foobool' cannot be used in a constant expression}}
 #endif
 #pragma omp target
-#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5) // expected-error 2 {{argument to 'safelen' clause must be a strictly positive integer value}} expected-error 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}} expected-error {{expression is not an integral constant expression}}
+// expected-error@+3 {{argument to 'safelen' clause must be a strictly positive integer value}}
+// expected-error@+2 2 {{directive '#pragma omp teams distribute simd' cannot contain more than one 'safelen' clause}}
+// expected-error@+1 {{expression is not an integral constant expression}}
+#pragma omp teams distribute simd safelen (foobool(argc)), safelen (true), safelen (-5)
   for (int i = 4; i < 12; i++)
     argv[0][i] = argv[0][i] - argv[0][i-4];
 
index 47744fb..63c9538 100644 (file)
@@ -20,6 +20,9 @@ void test() {
   c = 1 >> -0;
   c = 1 << -1; // expected-warning {{shift count is negative}}
   c = 1 >> -1; // expected-warning {{shift count is negative}}
+  c = 1 << (unsigned)-1; // expected-warning {{shift count >= width of type}}
+                         // expected-warning@-1 {{implicit conversion}}
+  c = 1 >> (unsigned)-1; // expected-warning {{shift count >= width of type}}
   c = 1 << c;
   c <<= 0;
   c >>= 0;
diff --git a/clang/test/SemaCXX/constexpr-unsigned-high-bit.cpp b/clang/test/SemaCXX/constexpr-unsigned-high-bit.cpp
new file mode 100644 (file)
index 0000000..19d8dca
--- /dev/null
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -std=c++14 -fsyntax-only %s
+
+#include <limits.h>
+
+constexpr unsigned inc() {
+  unsigned i = INT_MAX;
+  ++i; // should not warn value is outside range
+  return i;
+}
+
+constexpr unsigned dec() {
+  unsigned i = INT_MIN;
+  --i; // should not warn value is outside range
+  return i;
+}
index be36611..0f99182 100644 (file)
@@ -42,6 +42,24 @@ public:
   /// \param Str the string to be interpreted.
   explicit APSInt(StringRef Str);
 
+  /// Determine sign of this APSInt.
+  ///
+  /// \returns true if this APSInt is negative, false otherwise
+  bool isNegative() const { return isSigned() && APInt::isNegative(); }
+
+  /// Determine if this APSInt Value is non-negative (>= 0)
+  ///
+  /// \returns true if this APSInt is non-negative, false otherwise
+  bool isNonNegative() const { return !isNegative(); }
+
+  /// Determine if this APSInt Value is positive.
+  ///
+  /// This tests if the value of this APSInt is positive (> 0). Note
+  /// that 0 is not a positive value.
+  ///
+  /// \returns true if this APSInt is positive.
+  bool isStrictlyPositive() const { return isNonNegative() && !isNullValue(); }
+
   APSInt &operator=(APInt RHS) {
     // Retain our current sign.
     APInt::operator=(std::move(RHS));
index c76a320..1ad3871 100644 (file)
@@ -159,4 +159,90 @@ TEST(APSIntTest, StringDeath) {
 
 #endif
 
+TEST(APSIntTest, SignedHighBit) {
+  APSInt False(APInt(1, 0), false);
+  APSInt True(APInt(1, 1), false);
+  APSInt CharMin(APInt(8, 0), false);
+  APSInt CharSmall(APInt(8, 0x13), false);
+  APSInt CharBoundaryUnder(APInt(8, 0x7f), false);
+  APSInt CharBoundaryOver(APInt(8, 0x80), false);
+  APSInt CharLarge(APInt(8, 0xd9), false);
+  APSInt CharMax(APInt(8, 0xff), false);
+
+  EXPECT_FALSE(False.isNegative());
+  EXPECT_TRUE(False.isNonNegative());
+  EXPECT_FALSE(False.isStrictlyPositive());
+
+  EXPECT_TRUE(True.isNegative());
+  EXPECT_FALSE(True.isNonNegative());
+  EXPECT_FALSE(True.isStrictlyPositive());
+
+  EXPECT_FALSE(CharMin.isNegative());
+  EXPECT_TRUE(CharMin.isNonNegative());
+  EXPECT_FALSE(CharMin.isStrictlyPositive());
+
+  EXPECT_FALSE(CharSmall.isNegative());
+  EXPECT_TRUE(CharSmall.isNonNegative());
+  EXPECT_TRUE(CharSmall.isStrictlyPositive());
+
+  EXPECT_FALSE(CharBoundaryUnder.isNegative());
+  EXPECT_TRUE(CharBoundaryUnder.isNonNegative());
+  EXPECT_TRUE(CharBoundaryUnder.isStrictlyPositive());
+
+  EXPECT_TRUE(CharBoundaryOver.isNegative());
+  EXPECT_FALSE(CharBoundaryOver.isNonNegative());
+  EXPECT_FALSE(CharBoundaryOver.isStrictlyPositive());
+
+  EXPECT_TRUE(CharLarge.isNegative());
+  EXPECT_FALSE(CharLarge.isNonNegative());
+  EXPECT_FALSE(CharLarge.isStrictlyPositive());
+
+  EXPECT_TRUE(CharMax.isNegative());
+  EXPECT_FALSE(CharMax.isNonNegative());
+  EXPECT_FALSE(CharMax.isStrictlyPositive());
+}
+
+TEST(APSIntTest, UnsignedHighBit) {
+  APSInt False(APInt(1, 0));
+  APSInt True(APInt(1, 1));
+  APSInt CharMin(APInt(8, 0));
+  APSInt CharSmall(APInt(8, 0x13));
+  APSInt CharBoundaryUnder(APInt(8, 0x7f));
+  APSInt CharBoundaryOver(APInt(8, 0x80));
+  APSInt CharLarge(APInt(8, 0xd9));
+  APSInt CharMax(APInt(8, 0xff));
+
+  EXPECT_FALSE(False.isNegative());
+  EXPECT_TRUE(False.isNonNegative());
+  EXPECT_FALSE(False.isStrictlyPositive());
+
+  EXPECT_FALSE(True.isNegative());
+  EXPECT_TRUE(True.isNonNegative());
+  EXPECT_TRUE(True.isStrictlyPositive());
+
+  EXPECT_FALSE(CharMin.isNegative());
+  EXPECT_TRUE(CharMin.isNonNegative());
+  EXPECT_FALSE(CharMin.isStrictlyPositive());
+
+  EXPECT_FALSE(CharSmall.isNegative());
+  EXPECT_TRUE(CharSmall.isNonNegative());
+  EXPECT_TRUE(CharSmall.isStrictlyPositive());
+
+  EXPECT_FALSE(CharBoundaryUnder.isNegative());
+  EXPECT_TRUE(CharBoundaryUnder.isNonNegative());
+  EXPECT_TRUE(CharBoundaryUnder.isStrictlyPositive());
+
+  EXPECT_FALSE(CharBoundaryOver.isNegative());
+  EXPECT_TRUE(CharBoundaryOver.isNonNegative());
+  EXPECT_TRUE(CharBoundaryOver.isStrictlyPositive());
+
+  EXPECT_FALSE(CharLarge.isNegative());
+  EXPECT_TRUE(CharLarge.isNonNegative());
+  EXPECT_TRUE(CharLarge.isStrictlyPositive());
+
+  EXPECT_FALSE(CharMax.isNegative());
+  EXPECT_TRUE(CharMax.isNonNegative());
+  EXPECT_TRUE(CharMax.isStrictlyPositive());
+}
+
 } // end anonymous namespace