[clang] 978e083 - [OpenMP] Allow OMP6.0 features. (#122108)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 29 04:51:05 PST 2025
Author: Zahira Ammarguellat
Date: 2025-01-29T07:51:02-05:00
New Revision: 978e0839ae2feb5ddda3e4e0b5a7ddba1727d2d8
URL: https://github.com/llvm/llvm-project/commit/978e0839ae2feb5ddda3e4e0b5a7ddba1727d2d8
DIFF: https://github.com/llvm/llvm-project/commit/978e0839ae2feb5ddda3e4e0b5a7ddba1727d2d8.diff
LOG: [OpenMP] Allow OMP6.0 features. (#122108)
Add support for the `-fopenmp-version=60` command line argument. It is
needed for https://github.com/llvm/llvm-project/pull/119891 (`#pragma
omp stripe`) which will be the first OpenMP 6.0 directive implemented.
Add regression tests for Clang in `-fopenmp-version=60` mode.
Added:
Modified:
clang/lib/Frontend/CompilerInvocation.cpp
clang/lib/Frontend/InitPreprocessor.cpp
clang/test/OpenMP/declare_mapper_messages.c
clang/test/OpenMP/declare_target_ast_print.cpp
clang/test/OpenMP/declare_target_messages.cpp
clang/test/OpenMP/depobj_messages.cpp
clang/test/OpenMP/distribute_parallel_for_ast_print.cpp
clang/test/OpenMP/distribute_parallel_for_simd_ast_print.cpp
clang/test/OpenMP/distribute_simd_ast_print.cpp
clang/test/OpenMP/distribute_simd_misc_messages.c
clang/test/OpenMP/driver.c
clang/test/OpenMP/error_ast_print.cpp
clang/test/OpenMP/error_codegen.cpp
clang/test/OpenMP/error_message.cpp
clang/test/OpenMP/flush_ast_print.cpp
clang/test/OpenMP/flush_codegen.cpp
clang/test/OpenMP/for_linear_messages.cpp
clang/test/OpenMP/for_simd_ast_print.cpp
Removed:
################################################################################
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 2097a83e870053..8411217be8c8a6 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -4215,7 +4215,7 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
}
}
- // Check if -fopenmp is specified and set default version to 5.0.
+ // Check if -fopenmp is specified and set default version to 5.1.
Opts.OpenMP = Args.hasArg(OPT_fopenmp) ? 51 : 0;
// Check if -fopenmp-simd is specified.
bool IsSimdSpecified =
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 17f624e9645395..542e26b6a129b4 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -1466,9 +1466,15 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
case 50:
Builder.defineMacro("_OPENMP", "201811");
break;
+ case 51:
+ Builder.defineMacro("_OPENMP", "202011");
+ break;
case 52:
Builder.defineMacro("_OPENMP", "202111");
break;
+ case 60:
+ Builder.defineMacro("_OPENMP", "202411");
+ break;
default: // case 51:
// Default version is OpenMP 5.1
Builder.defineMacro("_OPENMP", "202011");
diff --git a/clang/test/OpenMP/declare_mapper_messages.c b/clang/test/OpenMP/declare_mapper_messages.c
index 288caca097648c..22386892273110 100644
--- a/clang/test/OpenMP/declare_mapper_messages.c
+++ b/clang/test/OpenMP/declare_mapper_messages.c
@@ -1,10 +1,12 @@
// RUN: %clang_cc1 -verify=omp50,expected -fopenmp -fopenmp-version=50 -ferror-limit 100 -DOMP50 %s
// RUN: %clang_cc1 -verify=omp51,expected -fopenmp -ferror-limit 100 %s
// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 -ferror-limit 100 -DOMP52 %s
+// RUN: %clang_cc1 -verify=expected,omp60 -fopenmp -fopenmp-version=60 -ferror-limit 100 -DOMP60 %s
// RUN: %clang_cc1 -verify=omp50,expected -fopenmp-simd -fopenmp-version=50 -ferror-limit 100 -DOMP50 %s
// RUN: %clang_cc1 -verify=omp51-simd,expected -fopenmp-simd -ferror-limit 100 %s
// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 -ferror-limit 100 -DOMP52 %s
+// RUN: %clang_cc1 -verify=expected,omp60-simd -fopenmp-simd -fopenmp-version=60 -ferror-limit 100 -DOMP60 %s
int temp; // expected-note {{'temp' declared here}}
@@ -32,11 +34,11 @@ struct vec { // expec
#pragma omp declare mapper(struct vec v) map(v.len) // expected-error {{redefinition of user-defined mapper for type 'struct vec' with name 'default'}}
#pragma omp declare mapper(int v) map(v) // expected-error {{mapper type must be of struct, union or class type}}
-#ifndef OMP52
-// omp51-simd-error at +6 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}
-// omp50-error at +5 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}
-// omp51-error at +4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}
-// expected-error at +3 {{only variable 'vvec' is allowed in map clauses of this 'omp declare mapper' directive}}
+#if !defined(OMP52) && !defined(OMP60)
+// omp51-simd-error at +6 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}
+// omp50-error at +5 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'ompx_hold'}}
+// omp51-error at +4 {{incorrect map type modifier, expected one of: 'always', 'close', 'mapper', 'present', 'ompx_hold'}}
+// expected-error at +3 {{only variable 'vvec' is allowed in map clauses of this 'omp declare mapper' directive}}
// expected-error at +2 {{expected at least one clause on '#pragma omp declare mapper' directive}}
// expected-note at +1 {{'it' declared here}}
#pragma omp declare mapper(id2: struct vec vvec) map(iterator(it=0:vvec.len:2), tofrom:vvec.data[it])
@@ -68,15 +70,28 @@ int fun(int arg) {
{}
#pragma omp target map(mapper(aa :vv) // expected-error {{use of undeclared identifier 'aa'}} expected-error {{expected ')'}} expected-error {{call to undeclared function 'mapper'}} expected-note {{to match this '('}}
{}
+#ifndef OMP60
#pragma omp target map(mapper(ab) :vv) // expected-error {{missing map type}} expected-error {{cannot find a valid user-defined mapper for type 'struct vec' with name 'ab'}}
+#endif
{}
+#ifndef OMP60
#pragma omp target map(mapper(ab) :arr[0:2]) // expected-error {{missing map type}} expected-error {{cannot find a valid user-defined mapper for type 'struct vec' with name 'ab'}}
+#endif
{}
-#pragma omp target map(mapper(aa) :vv) // expected-error {{missing map type}}
+#ifndef OMP60
+#pragma omp target map(mapper(aa) :vv) // omp50-error {{missing map type}} omp51-error {{missing map type}} omp52-error {{missing map type}} omp51-simd-error {{missing map type}}
{}
-#pragma omp target map(mapper(aa) to:d) // expected-error {{mapper type must be of struct, union or class type}} omp52-error{{missing ',' after map type modifier}}
+#endif
+// expected-error at +4 {{mapper type must be of struct, union or class type}}
+// omp52-error at +3 {{missing ',' after map type modifier}}
+// omp60-error at +2 {{missing ',' after map type modifier}}
+// omp60-simd-error at +1 {{missing ',' after map type modifier}}
+#pragma omp target map(mapper(aa) to:d)
{}
-#pragma omp target map(mapper(aa) to:vv) map(close mapper(aa) from:v1) map(mapper(aa) to:arr[0]) // omp52-error 4 {{missing ',' after map type modifier}}
+// omp52-error at +3 4 {{missing ',' after map type modifier}}
+// omp60-error at +2 4 {{missing ',' after map type modifier}}
+// omp60-simd-error at +1 4 {{missing ',' after map type modifier}}
+#pragma omp target map(mapper(aa) to:vv) map(close mapper(aa) from:v1) map(mapper(aa) to:arr[0])
{}
#pragma omp target update to(mapper) // expected-error {{expected '(' after 'mapper'}} expected-error {{expected expression}} expected-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
diff --git a/clang/test/OpenMP/declare_target_ast_print.cpp b/clang/test/OpenMP/declare_target_ast_print.cpp
index 3334b7491fab8a..27d7a9fe21e529 100644
--- a/clang/test/OpenMP/declare_target_ast_print.cpp
+++ b/clang/test/OpenMP/declare_target_ast_print.cpp
@@ -4,6 +4,8 @@
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=50 -I %S/Inputs -ast-print %s | FileCheck %s --check-prefix=CHECK --check-prefix=OMP50
// RUN: %clang_cc1 -verify -fopenmp -I %S/Inputs -ast-print %s | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=52 -I %S/Inputs -ast-print %s | FileCheck %s --check-prefix=CHECK --check-prefix=OMP52
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -I %S/Inputs -ast-print %s | FileCheck %s --check-prefix=CHECK
+
// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -std=c++11 -I %S/Inputs -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -std=c++11 -include-pch %t -I %S/Inputs -verify %s -ast-print | FileCheck %s --check-prefix=CHECK --check-prefix=OMP50
// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -I %S/Inputs -emit-pch -o %t %s
@@ -229,7 +231,7 @@ void f1() {
int b1, b2, b3;
void f2() {
}
-#if _OPENMP == 202111
+#if _OPENMP >= 202111
#pragma omp declare target enter(b1) enter(b2), enter(b3, f2)
#else
#pragma omp declare target to(b1) to(b2), to(b3, f2)
@@ -336,7 +338,7 @@ int baz() { return 1; }
#pragma omp declare target
int abc1() { return 1; }
-#if _OPENMP == 202111
+#if _OPENMP >= 202111
#pragma omp declare target enter(abc1) device_type(nohost)
#else
#pragma omp declare target to(abc1) device_type(nohost)
@@ -379,7 +381,7 @@ int main (int argc, char **argv) {
baz<float>();
baz<int>();
-#if _OPENMP == 202111
+#if _OPENMP >= 202111
#pragma omp declare target enter(foo2)
#else
#pragma omp declare target to (foo2)
diff --git a/clang/test/OpenMP/declare_target_messages.cpp b/clang/test/OpenMP/declare_target_messages.cpp
index de831f8575ee5f..ce5a833b3866a9 100644
--- a/clang/test/OpenMP/declare_target_messages.cpp
+++ b/clang/test/OpenMP/declare_target_messages.cpp
@@ -1,46 +1,92 @@
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp45 -fopenmp -fopenmp-version=45 -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp5,host5 -fopenmp -fopenmp-version=50 -fopenmp-targets=x86_64-apple-macos10.7.0 -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp5,dev5 -fopenmp -fopenmp-version=50 -fopenmp-is-target-device -fopenmp-targets=x86_64-apple-macos10.7.0 -aux-triple x86_64-apple-macos10.7.0 -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp5,host5 -fopenmp-simd -fopenmp-version=50 -fopenmp-targets=x86_64-apple-macos10.7.0 -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp5,host5 -fopenmp-simd -fopenmp-version=50 -fopenmp-is-target-device -fopenmp-targets=x86_64-apple-macos10.7.0 -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp45 -fopenmp-version=45 -fopenmp-simd -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp51 -fopenmp -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp51 -fopenmp -fnoopenmp-use-tls -ferror-limit 100 -DTESTEND=1 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp51 -fopenmp -fnoopenmp-use-tls -ferror-limit 100 -I%S/Inputs -DTESTENDINC=1 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp51 -fopenmp-simd -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp51 -fopenmp-simd -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp52 -fopenmp -fopenmp-version=52 -DVERBOSE_MODE=1 -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp5 -fopenmp -fopenmp-version=50 -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify=expected,omp51 -fopenmp -fnoopenmp-use-tls -ferror-limit 100 -o - %s
-#pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}}
-
-int a, b, z; // omp5-error {{variable captured in declare target region must appear in a to clause}} // omp51-error {{variable captured in declare target region must appear in a to clause}} omp52-error {{variable captured in declare target region must appear in a to clause}}
-__thread int t; // expected-note {{defined as threadprivate or thread local}}
-
-#pragma omp declare target . // expected-error {{expected '(' after 'declare target'}}
+// DEFINE: %{common_opts_mac} = -triple x86_64-apple-macos10.7.0
+// DEFINE: %{limit} = -fnoopenmp-use-tls -ferror-limit 100
+// DEFINE: %{target_mac} = -fopenmp-targets=x86_64-apple-macos10.7.0
+// DEFINE: %{aux_triple} = -aux-triple x86_64-apple-macos10.7.0
+// DEFINE: %{openmp45} = -fopenmp -fopenmp-version=45
+// DEFINE: %{openmp50} = -fopenmp -fopenmp-version=50
+// DEFINE: %{openmp50_simd} = -fopenmp-simd -fopenmp-version=50
+// DEFINE: %{openmp52} = -fopenmp -fopenmp-version=52
+// DEFINE: %{openmp60} = -fopenmp -fopenmp-version=60
+// DEFINE: %{openmp60_simd} = -fopenmp-simd -fopenmp-version=60
+
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp45,omp45-to-51,omp45-to-51-var,omp45-to-51-clause,omp45-to-51-clause %{openmp45} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51 %{openmp50} %{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} %{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51,dev5 %{openmp50} -fopenmp-is-target-device %{target_mac} %{aux_triple} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} -fopenmp-is-target-device %{target_mac} %{aux_triple} %{limit} -o - %s
+
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51 %{openmp50_simd} %{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60_simd} %{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51 %{openmp50_simd} -fopenmp-is-target-device %{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60_simd} -fopenmp-is-target-device %{target_mac} %{limit} -o - %s
+
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp45,omp45-to-51,omp45-to-51-var,omp45-to-51-clause -fopenmp-version=45 -fopenmp-simd %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -DTESTEND=1 -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -I%S/Inputs -DTESTENDINC=1 -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp-simd %{limit} -o - %s
+
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp52} -DVERBOSE_MODE=1 %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} -DVERBOSE_MODE=1 %{limit} -o - %s
+
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 %{openmp50} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51 -fopenmp %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} -verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} %{limit} -o - %s
+
+
+// expected-error at +1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
+#pragma omp end declare target
+
+// ompvar-error at +1 {{variable captured in declare target region must appear in a to clause}}
+int a, b, z;
+// expected-note at +1 {{defined as threadprivate or thread local}}
+__thread int t;
+
+// expected-error at +1 {{expected '(' after 'declare target'}}
+#pragma omp declare target .
#pragma omp declare target
void f();
-#pragma omp end declare target shared(a) // expected-warning {{extra tokens at the end of '#pragma omp end declare target' are ignored}}
-
-#pragma omp declare target map(a) // omp45-error {{expected at least one 'to' or 'link' clause}} omp5-error {{expected at least one 'to' or 'link' clause}} omp51-error {{expected at least one 'to', 'link' or 'indirect' clause}} omp45-error {{unexpected 'map' clause, only 'to' or 'link' clauses expected}} omp5-error {{unexpected 'map' clause, only 'to', 'link' or 'device_type' clauses expected}} omp51-error {{unexpected 'map' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}} omp52-error {{unexpected 'map' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-
-#pragma omp declare target to(foo1) // omp45-error {{use of undeclared identifier 'foo1'}} omp5-error {{use of undeclared identifier 'foo1'}} omp51-error {{use of undeclared identifier 'foo1'}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-
-#pragma omp declare target link(foo2) // expected-error {{use of undeclared identifier 'foo2'}}
-
-#pragma omp declare target to(f) device_type(host) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} dev5-note {{marked as 'device_type(host)' here}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// expected-warning at +1 {{extra tokens at the end of '#pragma omp end declare target' are ignored}}
+#pragma omp end declare target shared(a)
+
+// omp52-error at +8 {{unexpected 'map' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}
+// omp52-error at +7 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp51-error at +6 {{unexpected 'map' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}}
+// omp51-error at +5 {{expected at least one 'to', 'link' or 'indirect' clause}}
+// omp5-error at +4 {{unexpected 'map' clause, only 'to', 'link' or 'device_type' clauses expected}}
+// omp5-error at +3 {{expected at least one 'to' or 'link' clause}}
+// omp45-error at +2 {{unexpected 'map' clause, only 'to' or 'link' clauses expected}}
+// omp45-error at +1 {{expected at least one 'to' or 'link' clause}}
+#pragma omp declare target map(a)
+
+// omp52-error at +3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp45-to-51-error at +1 {{use of undeclared identifier 'foo1'}}
+#pragma omp declare target to(foo1)
+
+// expected-error at +1 {{use of undeclared identifier 'foo2'}}
+#pragma omp declare target link(foo2)
+
+// omp52-error at +4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// dev5-note at +2 {{marked as 'device_type(host)' here}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(f) device_type(host)
void q();
-#pragma omp declare target to(q) device_type(any) device_type(any) device_type(host) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} omp5-warning {{more than one 'device_type' clause is specified}} // omp51-warning {{more than one 'device_type' clause is specified}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp52-error at +4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp5-and-51-warning at +2 {{more than one 'device_type' clause is specified}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(q) device_type(any) device_type(any) device_type(host)
#if _OPENMP == 202011
// omp51-error at +1 {{directive '#pragma omp declare target' cannot contain more than one 'indirect' clause}}
#pragma omp declare target to(q) indirect(true) indirect(false)
-int xxx; //expected-note {{declared here}}
+// expected-note at +1 {{declared here}}
+int xxx;
// omp51-error at +2 {{expression is not an integral constant expression}}
// omp51-note at +1 {{read of non-const variable 'xxx' is not allowed in a constant expression}}
#pragma omp declare target to(q) indirect(xxx)
@@ -67,13 +113,20 @@ void bar();
void c();
-void func() {} // expected-note {{'func' defined here}}
+// expected-note at +1 {{'func' defined here}}
+void func() {}
-#pragma omp declare target link(func) allocate(a) // expected-error {{function name is not allowed in 'link' clause}} omp45-error {{unexpected 'allocate' clause, only 'to' or 'link' clauses expected}} omp5-error {{unexpected 'allocate' clause, only 'to', 'link' or 'device_type' clauses expected}} omp51-error {{unexpected 'allocate' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}} omp52-error {{unexpected 'allocate' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}
+// omp52-error at +5 {{unexpected 'allocate' clause, only 'enter', 'link', 'device_type' or 'indirect' clauses expected}}
+// omp51-error at +4 {{unexpected 'allocate' clause, only 'to', 'link', 'device_type' or 'indirect' clauses expected}}
+// omp5-error at +3 {{unexpected 'allocate' clause, only 'to', 'link' or 'device_type' clauses expected}}
+// expected-error at +2 {{function name is not allowed in 'link' clause}}
+// omp45-error at +1 {{unexpected 'allocate' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target link(func) allocate(a)
void bar();
void baz() {bar();}
-#pragma omp declare target(bar) // omp5-warning {{declaration marked as declare target after first use, it may lead to incorrect results}} // omp51-warning {{declaration marked as declare target after first use, it may lead to incorrect results}} omp52-warning {{declaration marked as declare target after first use, it may lead to incorrect results}}
+// omp5-or-later-warning at +1 {{declaration marked as declare target after first use, it may lead to incorrect results}}
+#pragma omp declare target(bar)
extern int b;
@@ -113,7 +166,8 @@ void t2() {
void abc();
#pragma omp end declare target
void cba();
-#pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}}
+// expected-error at +1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
+#pragma omp end declare target
#pragma omp declare target
#pragma omp declare target
@@ -122,7 +176,8 @@ void def();
void fed();
#pragma omp declare target
-#pragma omp threadprivate(a) // expected-note {{defined as threadprivate or thread local}}
+// expected-note at +1 {{defined as threadprivate or thread local}}
+#pragma omp threadprivate(a)
extern int b;
int g;
@@ -150,27 +205,32 @@ int C::method1() {
}
void foo(int p) {
- a = 0; // expected-error {{threadprivate variables cannot be used in target constructs}}
+// expected-error at +1 {{threadprivate variables cannot be used in target constructs}}
+ a = 0;
b = 0;
- t = 1; // expected-error {{threadprivate variables cannot be used in target constructs}}
+// expected-error at +1 {{threadprivate variables cannot be used in target constructs}}
+ t = 1;
C object;
VC object1;
g = object.method();
g += object.method1();
g += object1.method() + p;
- f(); // dev5-error {{function with 'device_type(host)' is not available on device}}
+ // dev5-error at +1 {{function with 'device_type(host)' is not available on device}}
+ f();
q();
c();
}
#pragma omp declare target
void foo1() {
- [&](){ (void)(b+z);}(); // omp5-note {{variable 'z' is captured here}} //omp51-note {{variable 'z' is captured here}} omp52-note {{variable 'z' is captured here}}
+ // omp5-or-later-var-note at +1 {{variable 'z' is captured here}}
+ [&](){ (void)(b+z);}();
}
#pragma omp end declare target
#pragma omp end declare target
#pragma omp end declare target
-#pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}}
+// expected-error at +1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
+#pragma omp end declare target
int C::method() {
return 0;
@@ -190,12 +250,20 @@ int *y;
int **w = &y;
int main (int argc, char **argv) {
int a = 2;
-#pragma omp declare target // expected-error {{unexpected OpenMP directive '#pragma omp declare target'}}
+// expected-error at +1 {{unexpected OpenMP directive '#pragma omp declare target'}}
+#pragma omp declare target
int v;
-#pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}}
+// expected-error at +1 {{unexpected OpenMP directive '#pragma omp end declare target'}}
+#pragma omp end declare target
foo(v);
-#pragma omp declare target to(foo3) link(w) // omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-#pragma omp declare target to(a) //omp45-error {{local variable 'a' should not be used in 'declare target' directive}} omp5-error {{local variable 'a' should not be used in 'declare target' directive}} omp51-error {{local variable 'a' should not be used in 'declare target' directive}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
+
+ // omp52-error at +2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+ // omp52-error at +1 {{unexpected 'to' clause, use 'enter' instead}}
+#pragma omp declare target to(foo3) link(w)
+ // omp52-error at +3 {{unexpected 'to' clause, use 'enter' instead}}
+ // omp52-error at +2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+ // omp45-to-51-var-error at +1 {{local variable 'a' should not be used in 'declare target' directive}}
+#pragma omp declare target to(a)
return (0);
}
@@ -205,77 +273,134 @@ namespace {
}
#pragma omp end declare target
-#pragma omp declare target link(S) // expected-error {{'S' used in declare target directive is not a variable or a function name}}
+// expected-error at +1 {{'S' used in declare target directive is not a variable or a function name}}
+#pragma omp declare target link(S)
-#pragma omp declare target (x, x) // expected-error {{'x' appears multiple times in clauses on the same declare target directive}}
-#pragma omp declare target to(x) to(x) // omp45-error {{'x' appears multiple times in clauses on the same declare target directive}} omp5-error {{'x' appears multiple times in clauses on the same declare target directive}} omp51-error {{'x' appears multiple times in clauses on the same declare target directive}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-#pragma omp declare target link(x) // expected-error {{'x' must not appear in both clauses 'to' and 'link'}}
+// expected-error at +1 {{'x' appears multiple times in clauses on the same declare target directive}}
+#pragma omp declare target (x, x)
+// omp52-error at +3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp45-to-51-clause-error at +1 {{'x' appears multiple times in clauses on the same declare target directive}}
+#pragma omp declare target to(x) to(x)
+// expected-error at +1 {{'x' must not appear in both clauses 'to' and 'link'}}
+#pragma omp declare target link(x)
void bazz() {}
-#pragma omp declare target to(bazz) device_type(nohost) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} host5-note 3{{marked as 'device_type(nohost)' here}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp52-error at +4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// host5-note at +2 3 {{marked as 'device_type(nohost)' here}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(bazz) device_type(nohost)
void bazzz() {bazz();}
-#pragma omp declare target to(bazzz) device_type(nohost) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-void any() {bazz();} // host5-error {{function with 'device_type(nohost)' is not available on host}}
-void host1() {bazz();} // host5-error {{function with 'device_type(nohost)' is not available on host}}
-#pragma omp declare target to(host1) device_type(host) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} dev5-note 3 {{marked as 'device_type(host)' here}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-void host2() {bazz();} //host5-error {{function with 'device_type(nohost)' is not available on host}}
-#pragma omp declare target to(host2) // omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-void device() {host1();} // dev5-error {{function with 'device_type(host)' is not available on device}}
-#pragma omp declare target to(device) device_type(nohost) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} host5-note 2 {{marked as 'device_type(nohost)' here}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp52-error at +3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(bazzz) device_type(nohost)
+// host5-error at +1 {{function with 'device_type(nohost)' is not available on host}}
+void any() {bazz();}
+// host5-error at +1 {{function with 'device_type(nohost)' is not available on host}}
+void host1() {bazz();}
+// omp52-error at +4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// dev5-note at +2 3 {{marked as 'device_type(host)' here}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(host1) device_type(host)
+//host5-error at +1 {{function with 'device_type(nohost)' is not available on host}}
+void host2() {bazz();}
+// omp52-error at +2 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +1 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+#pragma omp declare target to(host2)
+// dev5-error at +1 {{function with 'device_type(host)' is not available on device}}
+void device() {host1();}
+// omp52-error at +4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// host5-note at +2 2 {{marked as 'device_type(nohost)' here}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(device) device_type(nohost)
void host3() {host1();} // dev5-error {{function with 'device_type(host)' is not available on device}}
-#pragma omp declare target to(host3) // omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp52-error at +2 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +1 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+#pragma omp declare target to(host3)
#pragma omp declare target
void any1() {any();}
-void any2() {host1();} // dev5-error {{function with 'device_type(host)' is not available on device}}
-void any3() {device();} // host5-error {{function with 'device_type(nohost)' is not available on host}}
+// dev5-error at +1 {{function with 'device_type(host)' is not available on device}}
+void any2() {host1();}
+// host5-error at +1 {{function with 'device_type(nohost)' is not available on host}}
+void any3() {device();}
void any4() {any2();}
#pragma omp end declare target
void any5() {any();}
void any6() {host1();}
-void any7() {device();} // host5-error {{function with 'device_type(nohost)' is not available on host}}
+// host5-error at +1 {{function with 'device_type(nohost)' is not available on host}}
+void any7() {device();}
void any8() {any2();}
int MultiDevTy;
-#pragma omp declare target to(MultiDevTy) device_type(any) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-#pragma omp declare target to(MultiDevTy) device_type(host) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} omp5-error {{'device_type(host)' does not match previously specified 'device_type(any)' for the same declaration}} omp51-error {{'device_type(host)' does not match previously specified 'device_type(any)' for the same declaration}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-#pragma omp declare target to(MultiDevTy) device_type(nohost) // omp45-error {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}} omp5-error {{'device_type(nohost)' does not match previously specified 'device_type(any)' for the same declaration}} // omp51-error {{'device_type(nohost)' does not match previously specified 'device_type(any)' for the same declaration}} omp52-error {{unexpected 'to' clause, use 'enter' instead}} omp52-error {{expected at least one 'enter', 'link' or 'indirect' clause}}
-
-static int variable = 100; //expected-warning {{declaration is not declared in any declare target region}}
+// omp52-error at +3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +2 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(MultiDevTy) device_type(any)
+// omp52-error at +4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// host-5-and-51-error at +2 {{'device_type(host)' does not match previously specified 'device_type(any)' for the same declaration}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(MultiDevTy) device_type(host)
+// omp52-error at +4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error at +3 {{expected at least one 'enter', 'link' or 'indirect' clause}}
+// no-host5-and-51-error at +2 {{'device_type(nohost)' does not match previously specified 'device_type(any)' for the same declaration}}
+// omp45-error at +1 {{unexpected 'device_type' clause, only 'to' or 'link' clauses expected}}
+#pragma omp declare target to(MultiDevTy) device_type(nohost)
+
+// expected-warning at +1 {{declaration is not declared in any declare target region}}
+static int variable = 100;
static float variable1 = 200;
-static float variable2 = variable1; //expected-warning {{declaration is not declared in any declare target region}}
+// expected-warning at +1 {{declaration is not declared in any declare target region}}
+static float variable2 = variable1;
-static int var = 1; //expected-warning {{declaration is not declared in any declare target region}}
+// expected-warning at +1 {{declaration is not declared in any declare target region}}
+static int var = 1;
static int var1 = 10;
static int *var2 = &var1;
-static int **ptr1 = &var2; //expected-warning {{declaration is not declared in any declare target region}}
+// expected-warning at +1 {{declaration is not declared in any declare target region}}
+static int **ptr1 = &var2;
int arr[2] = {1,2};
-int (*arrptr)[2] = &arr; //expected-warning {{declaration is not declared in any declare target region}}
+// expected-warning at +1 {{declaration is not declared in any declare target region}}
+int (*arrptr)[2] = &arr;
class declare{
public: int x;
void print();
};
declare obj1;
-declare *obj2 = &obj1; //expected-warning {{declaration is not declared in any declare target region}}
+// expected-warning at +1 {{declaration is not declared in any declare target region}}
+declare *obj2 = &obj1;
struct target{
int x;
void print();
};
-static target S; //expected-warning {{declaration is not declared in any declare target region}}
+// expected-warning at +1 {{declaration is not declared in any declare target region}}
+static target S;
#pragma omp declare target
-int target_var = variable; //expected-note {{used here}}
-float target_var1 = variable2; //expected-note {{used here}}
-int *ptr = &var; //expected-note {{used here}}
-int ***ptr2 = &ptr1; //expected-note {{used here}}
-int (**ptr3)[2] = &arrptr; //expected-note {{used here}}
-declare **obj3 = &obj2; //expected-note {{used here}}
-target *S1 = &S; //expected-note {{used here}}
+// expected-note at +1 {{used here}}
+int target_var = variable;
+// expected-note at +1 {{used here}}
+float target_var1 = variable2;
+// expected-note at +1 {{used here}}
+int *ptr = &var;
+// expected-note at +1 {{used here}}
+int ***ptr2 = &ptr1;
+// expected-note at +1 {{used here}}
+int (**ptr3)[2] = &arrptr;
+// expected-note at +1 {{used here}}
+declare **obj3 = &obj2;
+// expected-note at +1 {{used here}}
+target *S1 = &S;
#pragma omp end declare target
#if TESTENDINC
diff --git a/clang/test/OpenMP/depobj_messages.cpp b/clang/test/OpenMP/depobj_messages.cpp
index 9d750f651d81f3..a57ae0200e0865 100644
--- a/clang/test/OpenMP/depobj_messages.cpp
+++ b/clang/test/OpenMP/depobj_messages.cpp
@@ -4,6 +4,8 @@
// RUN: -ferror-limit 100 %s -Wuninitialized
// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 \
// RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=60 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
// RUN: %clang_cc1 -verify=expected,omp50 -fopenmp-simd -fopenmp-version=50 \
// RUN: -ferror-limit 100 %s -Wuninitialized
@@ -11,6 +13,8 @@
// RUN: -ferror-limit 100 %s -Wuninitialized
// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 \
// RUN: -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=60 \
+// RUN: -ferror-limit 100 %s -Wuninitialized
struct S1 { // expected-note 2 {{declared here}}
int a;
diff --git a/clang/test/OpenMP/distribute_parallel_for_ast_print.cpp b/clang/test/OpenMP/distribute_parallel_for_ast_print.cpp
index 7af4e5f6b2b440..f91afd7ae11411 100644
--- a/clang/test/OpenMP/distribute_parallel_for_ast_print.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_ast_print.cpp
@@ -7,6 +7,9 @@
// RUN: %clang_cc1 -verify -std=c++11 -fopenmp -fopenmp-version=51 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -verify -std=c++11 -fopenmp -fopenmp-version=60 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -verify -std=c++11 -fopenmp-simd -fopenmp-version=45 -ast-print %s -Wno-openmp-mapping | FileCheck %s --check-prefix=CHECK --check-prefix=OMP45
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
@@ -17,6 +20,9 @@
// RUN: %clang_cc1 -verify -std=c++11 -fopenmp-simd -fopenmp-version=51 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -verify -std=c++11 -fopenmp-simd -fopenmp-version=60 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// expected-no-diagnostics
#ifndef HEADER
diff --git a/clang/test/OpenMP/distribute_parallel_for_simd_ast_print.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_ast_print.cpp
index ae3caa88d4547a..0495bff45b72ad 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_ast_print.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_ast_print.cpp
@@ -7,6 +7,9 @@
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=51 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -ast-print %s -Wno-openmp-mapping | FileCheck %s --check-prefix CHECK --check-prefix OMP45
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
@@ -17,6 +20,9 @@
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix CHECK --check-prefix OMP51
// expected-no-diagnostics
#ifndef HEADER
diff --git a/clang/test/OpenMP/distribute_simd_ast_print.cpp b/clang/test/OpenMP/distribute_simd_ast_print.cpp
index 9130203008311a..0fbc0e1342a57b 100644
--- a/clang/test/OpenMP/distribute_simd_ast_print.cpp
+++ b/clang/test/OpenMP/distribute_simd_ast_print.cpp
@@ -4,6 +4,11 @@
// RUN: %clang_cc1 -verify -fopenmp -ast-print %s -Wno-openmp-mapping -DOMP5 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP50
// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s -DOMP5
// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP5 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP50
+
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=51 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
@@ -20,6 +25,9 @@
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ast-print %s -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -Wno-openmp-mapping -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// expected-no-diagnostics
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=52 -ast-print %s -Wno-openmp-mapping -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP52
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP52
diff --git a/clang/test/OpenMP/distribute_simd_misc_messages.c b/clang/test/OpenMP/distribute_simd_misc_messages.c
index f78b0ea8c56ce7..8cbf96cd7a014b 100644
--- a/clang/test/OpenMP/distribute_simd_misc_messages.c
+++ b/clang/test/OpenMP/distribute_simd_misc_messages.c
@@ -1,16 +1,20 @@
// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized
-// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -verify=expected,omp50 %s -Wuninitialized
-// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp51 %s -Wuninitialized
+// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -verify=expected,omp50,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
+// RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=60 -verify=expected,omp60,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
+// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp51,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized
-// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50 %s -Wuninitialized
-// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp51 %s -Wuninitialized
+// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
+// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=60 -verify=expected,omp60,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
+// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp51,omp-clause,omp-50-and-later,omp-50-and-later-temporal,omp50-temporal,omp50-and-later-var %s -Wuninitialized
void xxx(int argc) {
- int x; // expected-note {{initialize the variable 'x' to silence this warning}}
+ // expected-note at +1 {{initialize the variable 'x' to silence this warning}}
+ int x;
#pragma omp distribute simd
for (int i = 0; i < 10; ++i)
- argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}
+ // expected-warning at +1 {{variable 'x' is uninitialized when used here}}
+ argc = x;
}
// expected-error at +1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
@@ -49,9 +53,11 @@ void test_branch_protected_scope(void) {
#pragma omp distribute simd
for (i = 0; i < 16; ++i) {
if (i == 5)
- goto L1; // expected-error {{use of undeclared label 'L1'}}
+ // expected-error at +1 {{use of undeclared label 'L1'}}
+ goto L1;
else if (i == 6)
- return; // expected-error {{cannot return from OpenMP region}}
+ // expected-error at +1 {{cannot return from OpenMP region}}
+ return;
else if (i == 7)
goto L2;
else if (i == 8) {
@@ -61,7 +67,8 @@ void test_branch_protected_scope(void) {
}
if (x[0] == 0)
- goto L2; // expected-error {{use of undeclared label 'L2'}}
+ // expected-error at +1 {{use of undeclared label 'L2'}}
+ goto L2;
else if (x[1] == 1)
goto L1;
}
@@ -411,41 +418,49 @@ void test_collapse(void) {
// expected-note at +1 {{to match this '('}} expected-note at +1 {{as specified in 'collapse' clause}}
#pragma omp distribute simd collapse(4
for (i = 0; i < 16; ++i)
- ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+// expected-error at +1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+ ;
#pragma omp target
#pragma omp teams
// expected-error at +2 {{expected ')'}}
// expected-note at +1 {{to match this '('}} expected-note at +1 {{as specified in 'collapse' clause}}
#pragma omp distribute simd collapse(4,
for (i = 0; i < 16; ++i)
- ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+// expected-error at +1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+ ;
#pragma omp target
#pragma omp teams
// expected-error at +2 {{expected ')'}}
// expected-note at +1 {{to match this '('}} expected-note at +1 {{as specified in 'collapse' clause}}
#pragma omp distribute simd collapse(4, )
for (i = 0; i < 16; ++i)
- ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+// expected-error at +1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+ ;
#pragma omp target
#pragma omp teams
-// xxpected-error at +1 {{expected expression}} expected-note at +1 {{as specified in 'collapse' clause}}
+// expected-note at +1 {{as specified in 'collapse' clause}}
#pragma omp distribute simd collapse(4)
for (i = 0; i < 16; ++i)
- ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+// expected-error at +1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+ ;
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected ')'}}
-// expected-note at +1 {{to match this '('}} expected-note at +1 {{as specified in 'collapse' clause}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
+// expected-note at +1 {{as specified in 'collapse' clause}}
#pragma omp distribute simd collapse(4 4)
for (i = 0; i < 16; ++i)
- ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+// expected-error at +1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+ ;
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected ')'}}
-// expected-note at +1 {{to match this '('}} expected-note at +1 {{as specified in 'collapse' clause}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
+// expected-note at +1 {{as specified in 'collapse' clause}}
#pragma omp distribute simd collapse(4, , 4)
for (i = 0; i < 16; ++i)
- ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+// expected-error at +1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+ ;
#pragma omp target
#pragma omp teams
#pragma omp distribute simd collapse(4)
@@ -456,11 +471,13 @@ void test_collapse(void) {
foo();
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected ')'}}
-// expected-note at +1 {{to match this '('}} expected-note at +1 {{as specified in 'collapse' clause}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
+// expected-note at +1 {{as specified in 'collapse' clause}}
#pragma omp distribute simd collapse(4, 8)
for (i = 0; i < 16; ++i)
- ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+// expected-error at +1 {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
+ ;
#pragma omp target
#pragma omp teams
// expected-error at +1 {{integer constant expression}}
@@ -719,14 +736,16 @@ void test_private(void) {
int i;
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected expression}}
-// expected-error at +1 {{expected ')'}} expected-note at +1 {{to match this '('}}
+// expected-error at +3 {{expected expression}}
+// expected-error at +2 {{expected ')'}}
+// expected-note at +1 {{to match this '('}}
#pragma omp distribute simd private(
for (i = 0; i < 16; ++i)
;
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected ')'}} expected-note at +2 {{to match this '('}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
// expected-error at +1 2 {{expected expression}}
#pragma omp distribute simd private(,
for (i = 0; i < 16; ++i)
@@ -779,7 +798,8 @@ void test_firstprivate(void) {
int i;
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected ')'}} expected-note at +2 {{to match this '('}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
// expected-error at +1 {{expected expression}}
#pragma omp distribute simd firstprivate(
for (i = 0; i < 16; ++i)
@@ -790,7 +810,8 @@ void test_lastprivate(void) {
int i;
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected ')'}} expected-note at +2 {{to match this '('}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
// expected-error at +1 {{expected expression}}
#pragma omp distribute simd lastprivate(
for (i = 0; i < 16; ++i)
@@ -798,7 +819,8 @@ void test_lastprivate(void) {
#pragma omp target
#pragma omp teams
-// expected-error at +2 {{expected ')'}} expected-note at +2 {{to match this '('}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
// expected-error at +1 2 {{expected expression}}
#pragma omp distribute simd lastprivate(,
for (i = 0; i < 16; ++i)
@@ -850,7 +872,8 @@ void test_reduction(void) {
int i, x, y;
#pragma omp target
#pragma omp teams
-// expected-error at +3 {{expected ')'}} expected-note at +3 {{to match this '('}}
+// expected-error at +4 {{expected ')'}}
+// expected-note at +3 {{to match this '('}}
// expected-error at +2 {{expected identifier}}
// expected-warning at +1 {{missing ':' after reduction identifier - ignoring}}
#pragma omp distribute simd reduction(
@@ -878,7 +901,8 @@ void test_reduction(void) {
;
#pragma omp target
#pragma omp teams
-// expected-error at +3 {{expected ')'}} expected-note at +3 {{to match this '('}}
+// expected-error at +4 {{expected ')'}}
+// expected-note at +3 {{to match this '('}}
// expected-error at +2 {{expected identifier}}
// expected-warning at +1 {{missing ':' after reduction identifier - ignoring}}
#pragma omp distribute simd reduction(,
@@ -886,7 +910,8 @@ void test_reduction(void) {
;
#pragma omp target
#pragma omp teams
-// expected-error at +3 {{expected ')'}} expected-note at +3 {{to match this '('}}
+// expected-error at +4 {{expected ')'}}
+// expected-note at +3 {{to match this '('}}
// expected-error at +2 {{expected expression}}
// expected-warning at +1 {{missing ':' after reduction identifier - ignoring}}
#pragma omp distribute simd reduction(+
@@ -895,8 +920,8 @@ void test_reduction(void) {
#pragma omp target
#pragma omp teams
-// expected-error at +3 {{expected ')'}} expected-note at +3 {{to match this '('}}
-//
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
// expected-error at +1 {{expected expression}}
#pragma omp distribute simd reduction(+:
for (i = 0; i < 16; ++i)
@@ -938,6 +963,7 @@ void test_reduction(void) {
;
#pragma omp target
#pragma omp teams
+ // omp60-error at +1 {{incorrect reduction identifier, expected one of '+', '*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type 'int'}}
#pragma omp distribute simd reduction(- : x)
for (i = 0; i < 16; ++i)
;
@@ -1020,77 +1046,103 @@ void linear_modifiers(int argc) {
for (k = 0; k < argc; ++k) ++k;
#pragma omp target
#pragma omp teams
+ // omp60-error at +1 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
#pragma omp distribute simd linear(val(k))
for (k = 0; k < argc; ++k) ++k;
#pragma omp target
#pragma omp teams
-#pragma omp distribute simd linear(uval(k)) // expected-error {{expected 'val' modifier}}
+ // omp60-error at +2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
+ // expected-error at +1 {{expected 'val' modifier}}
+#pragma omp distribute simd linear(uval(k))
for (k = 0; k < argc; ++k) ++k;
#pragma omp target
#pragma omp teams
-#pragma omp distribute simd linear(ref(k)) // expected-error {{expected 'val' modifier}}
+// omp60-error at +2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
+// expected-error at +1 {{expected 'val' modifier}}
+#pragma omp distribute simd linear(ref(k))
for (k = 0; k < argc; ++k) ++k;
#pragma omp target
#pragma omp teams
-#pragma omp distribute simd linear(foo(k)) // expected-error {{expected 'val' modifier}}
+// omp60-error at +2 {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
+// expected-error at +1 {{expected 'val' modifier}}
+#pragma omp distribute simd linear(foo(k))
for (k = 0; k < argc; ++k) ++k;
}
void test_nontemporal(void) {
int i;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{expected expression}} expected-error at +1 {{expected ')'}} expected-note at +1 {{to match this '('}}
+// omp45-error at +4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +3 {{expected expression}}
+// expected-error at +2 {{expected ')'}}
+// expected-note at +1 {{to match this '('}}
#pragma omp distribute simd nontemporal(
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 2 {{expected expression}} expected-error at +1 {{expected ')'}} expected-note at +1 {{to match this '('}}
+// omp45-error at +4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +3 2 {{expected expression}}
+// expected-error at +2 {{expected ')'}}
+// expected-note at +1 {{to match this '('}}
#pragma omp distribute simd nontemporal(,
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 2 {{expected expression}}
+// omp45-error at +2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +1 2 {{expected expression}}
#pragma omp distribute simd nontemporal(, )
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{expected expression}}
+// omp45-error at +2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +1 {{expected expression}}
#pragma omp distribute simd nontemporal()
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{expected expression}}
+// omp45-error at +2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +1 {{expected expression}}
#pragma omp distribute simd nontemporal(int)
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} omp50-error at +1 {{expected variable name}} omp51-error at +1 {{expected variable name}}
+// omp45-error at +2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// omp50-and-later-var-error at +1 {{expected variable name}}
#pragma omp distribute simd nontemporal(0)
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{use of undeclared identifier 'x'}}
+// omp45-error at +2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +1 {{use of undeclared identifier 'x'}}
#pragma omp distribute simd nontemporal(x)
for (i = 0; i < 16; ++i)
;
-// expected-error at +2 {{use of undeclared identifier 'x'}}
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{use of undeclared identifier 'y'}}
+// expected-error at +3 {{use of undeclared identifier 'x'}}
+// omp45-error at +2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +1 {{use of undeclared identifier 'y'}}
#pragma omp distribute simd nontemporal(x, y)
for (i = 0; i < 16; ++i)
;
-// expected-error at +3 {{use of undeclared identifier 'x'}}
-// expected-error at +2 {{use of undeclared identifier 'y'}}
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{use of undeclared identifier 'z'}}
+// expected-error at +4 {{use of undeclared identifier 'x'}}
+// expected-error at +3 {{use of undeclared identifier 'y'}}
+// omp45-error at +2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +1 {{use of undeclared identifier 'z'}}
#pragma omp distribute simd nontemporal(x, y, z)
for (i = 0; i < 16; ++i)
;
int x, y;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error at +1 {{expected ')'}} expected-note at +1 {{to match this '('}}
+// omp45-error at +4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +3 {{expected ',' or ')' in 'nontemporal' clause}}
+// expected-error at +2 {{expected ')'}}
+// expected-note at +1 {{to match this '('}}
#pragma omp distribute simd nontemporal(x :)
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-error at +1 {{expected ')'}} expected-note at +1 {{to match this '('}} expected-error at +1 {{expected ',' or ')' in 'nontemporal' clause}}
+// omp45-error at +4 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-error at +3 {{expected ')'}}
+// expected-note at +2 {{to match this '('}}
+// expected-error at +1 {{expected ',' or ')' in 'nontemporal' clause}}
#pragma omp distribute simd nontemporal(x :, )
for (i = 0; i < 16; ++i)
;
-// omp51-note at +3 {{defined as nontemporal}}
-// omp50-note at +2 {{defined as nontemporal}}
-// omp45-error at +1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} omp50-error at +1 {{a variable cannot appear in more than one nontemporal clause}} omp51-error at +1 {{a variable cannot appear in more than one nontemporal clause}}
+// omp50-temporal-note at +3 {{defined as nontemporal}}
+// omp-50-and-later-temporal-error at +2 {{a variable cannot appear in more than one nontemporal clause}}
+// omp45-error at +1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
#pragma omp distribute simd nontemporal(x) nontemporal(x)
for (i = 0; i < 16; ++i)
;
@@ -1105,7 +1157,9 @@ void test_nontemporal(void) {
for (i = 0; i < 16; ++i)
;
-// omp45-error at +1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}} expected-note at +1 {{to match this '('}} expected-error at +1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error at +1 {{expected ')'}}
+// omp45-error at +3 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp distribute simd'}}
+// expected-note at +2 {{to match this '('}}
+// expected-error at +1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error at +1 {{expected ')'}}
#pragma omp distribute simd nontemporal(x, y : 0)
for (i = 0; i < 16; ++i)
;
@@ -1119,35 +1173,60 @@ void test_nontemporal(void) {
#pragma omp distribute simd lastprivate(x) nontemporal(x)
for (i = 0; i < 16; ++i)
;
-#pragma omp distribute simd order // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} expected-error {{expected '(' after 'order'}}
+// omp45-error at +2 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+// expected-error at +1 {{expected '(' after 'order'}}
+#pragma omp distribute simd order
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order( // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}
+// omp-50-and-later-error at +4 {{expected 'concurrent' in OpenMP clause 'order'}}
+// expected-note at +3 {{to match this '('}}
+// expected-error at +2 {{expected ')'}}
+// omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(none // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}
+// omp-50-and-later-error at +4 {{expected 'concurrent' in OpenMP clause 'order'}}
+// expected-note at +3 {{to match this '('}}
+// expected-error at +2 {{expected ')'}}
+// omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(none
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
+// expected-note at +3 {{to match this '('}}
+// expected-error at +2 {{expected ')'}}
+// omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(concurrent
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+// omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(concurrent)
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(unconstrained:) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}} omp51-error {{expected 'concurrent' in OpenMP clause 'order'}}
+ // omp-50-and-later-error at +2 {{expected 'concurrent' in OpenMP clause 'order'}}
+ // omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(unconstrained:)
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(reproducible:concurrent // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} expected-error {{expected ')'}} expected-note {{to match this '('}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}
+ // omp50-error at +4 {{expected 'concurrent' in OpenMP clause 'order'}}
+ // expected-note at +3 {{to match this '('}}
+ // expected-error at +2 {{expected ')'}}
+ // omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(reproducible:concurrent
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(reproducible:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}
+ // omp50-error at +2 {{expected 'concurrent' in OpenMP clause 'order'}}
+ // omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(reproducible:concurrent)
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(unconstrained:concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} omp50-error {{expected 'concurrent' in OpenMP clause 'order'}}
+ // omp50-error at +2 {{expected 'concurrent' in OpenMP clause 'order'}}
+ // omp45-error at +1 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(unconstrained:concurrent)
for (int i = 0; i < 10; ++i)
;
-#pragma omp distribute simd order(concurrent) order(concurrent) // omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} omp45-error {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}} omp51-error {{directive '#pragma omp distribute simd' cannot contain more than one 'order' clause}}
+ // omp-clause-error at +2 {{directive '#pragma omp distribute simd' cannot contain more than one 'order' clause}}
+ // omp45-error at +1 2 {{unexpected OpenMP clause 'order' in directive '#pragma omp distribute simd'}}
+#pragma omp distribute simd order(concurrent) order(concurrent)
for (int i = 0; i < 10; ++i)
;
}
-
diff --git a/clang/test/OpenMP/driver.c b/clang/test/OpenMP/driver.c
index 0e9b2f71aae40d..9ed791ba99da7b 100644
--- a/clang/test/OpenMP/driver.c
+++ b/clang/test/OpenMP/driver.c
@@ -15,9 +15,11 @@
// RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=1 | FileCheck --check-prefix=CHECK-DEFAULT-VERSION %s
// RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=0 | FileCheck --check-prefix=CHECK-DEFAULT-VERSION %s
// RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=100 | FileCheck --check-prefix=CHECK-DEFAULT-VERSION %s
+// RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=60 | FileCheck --check-prefix=CHECK-60-VERSION %s
// RUN: %clang %s -c -E -dM -fopenmp=libomp | FileCheck --check-prefix=CHECK-DEFAULT-VERSION %s
// CHECK-DEFAULT-VERSION: #define _OPENMP 202011
+// CHECK-60-VERSION: #define _OPENMP 202411
// RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=31 | FileCheck --check-prefix=CHECK-31-VERSION %s
// CHECK-31-VERSION: #define _OPENMP 201107
@@ -33,6 +35,8 @@
// RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=50 | FileCheck --check-prefix=CHECK-50-VERSION %s
// CHECK-50-VERSION: #define _OPENMP 201811
+// RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=60 | FileCheck --check-prefix=CHECK-60-VERSION %s
+
// RUN: %clang %s -c -E -dM -fopenmp=libomp | FileCheck --check-prefix=CHECK-51-VERSION %s
// CHECK-51-VERSION: #define _OPENMP 202011
@@ -52,6 +56,7 @@
// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=31 | FileCheck --check-prefix=CHECK-VERSION %s
// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=40 | FileCheck --check-prefix=CHECK-VERSION %s
// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=45 | FileCheck --check-prefix=CHECK-VERSION %s
+// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=60 | FileCheck --check-prefix=CHECK-VERSION %s
// RUN: %clang %s -c -E -dM -fopenmp-simd | FileCheck --check-prefix=CHECK-VERSION %s
// CHECK-VERSION-NOT: #define _OPENMP
diff --git a/clang/test/OpenMP/error_ast_print.cpp b/clang/test/OpenMP/error_ast_print.cpp
index 8e40f7da713247..43c6d8553dfded 100644
--- a/clang/test/OpenMP/error_ast_print.cpp
+++ b/clang/test/OpenMP/error_ast_print.cpp
@@ -2,9 +2,17 @@
// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -fopenmp-version=51 -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp -std=c++11 -fopenmp-version=51 -include-pch %t -verify %s -ast-print | FileCheck %s
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ast-print %s | FileCheck %s
+// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -fopenmp-version=60 -emit-pch -o %t %s
+// RUN: %clang_cc1 -fopenmp -std=c++11 -fopenmp-version=60 -include-pch %t -verify %s -ast-print | FileCheck %s
+
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s | FileCheck %s
// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -fopenmp-version=51 -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -fopenmp-version=51 -include-pch %t -verify %s -ast-print | FileCheck %s
+
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ast-print %s | FileCheck %s
+// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -fopenmp-version=60 -emit-pch -o %t %s
+// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -fopenmp-version=60 -include-pch %t -verify %s -ast-print | FileCheck %s
// expected-no-diagnostics
#ifndef HEADER
diff --git a/clang/test/OpenMP/error_codegen.cpp b/clang/test/OpenMP/error_codegen.cpp
index 0f4d1863e69fcd..70d493e01a709f 100644
--- a/clang/test/OpenMP/error_codegen.cpp
+++ b/clang/test/OpenMP/error_codegen.cpp
@@ -1,23 +1,30 @@
// RUN: %clang_cc1 -std=c++11 -fopenmp -fopenmp-version=51 -triple x86_64 \
// RUN: -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++11 -fopenmp -fopenmp-version=60 -triple x86_64 \
+// RUN: -emit-llvm -o - %s | FileCheck %s
+
// RUN: %clang_cc1 -std=c++11 -fopenmp-simd -fopenmp-version=51 \
// RUN: -debug-info-kind=limited -triple x86_64 -emit-llvm -o - %s | \
// RUN: FileCheck --check-prefix SIMD %s
+// RUN: %clang_cc1 -std=c++11 -fopenmp-simd -fopenmp-version=60 \
+// RUN: -debug-info-kind=limited -triple x86_64 -emit-llvm -o - %s | \
+// RUN: FileCheck --check-prefix SIMD %s
+
//CHECK: @.str = private unnamed_addr constant [23 x i8] c"GPU compiler required.\00", align 1
-//CHECK: @0 = private unnamed_addr constant {{.*}}error_codegen.cpp;main;52;1;;\00", align 1
+//CHECK: @0 = private unnamed_addr constant {{.*}}error_codegen.cpp;main;59;1;;\00", align 1
//CHECK: @1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 {{.*}}, ptr @0 }, align 8
//CHECK: @.str.1 = private unnamed_addr constant [27 x i8] c"Note this is functioncall.\00", align 1
-//CHECK: @2 = private unnamed_addr constant {{.*}}error_codegen.cpp;main;54;1;;\00", align 1
+//CHECK: @2 = private unnamed_addr constant {{.*}}error_codegen.cpp;main;61;1;;\00", align 1
//CHECK: @3 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 {{.*}}, ptr @2 }, align 8
//CHECK: @.str.2 = private unnamed_addr constant [23 x i8] c"GNU compiler required.\00", align 1
-//CHECK: @4 = private unnamed_addr constant {{.*}}error_codegen.cpp;tmain;29;1;;\00", align 1
+//CHECK: @4 = private unnamed_addr constant {{.*}}error_codegen.cpp;tmain;36;1;;\00", align 1
//CHECK: @5 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 {{.*}}, ptr @4 }, align 8
//CHECK: @.str.3 = private unnamed_addr constant [22 x i8] c"Notice: add for loop.\00", align 1
-//CHECK: @6 = private unnamed_addr constant {{.*}}error_codegen.cpp;tmain;32;1;;\00", align 1
+//CHECK: @6 = private unnamed_addr constant {{.*}}error_codegen.cpp;tmain;39;1;;\00", align 1
//CHECK: @7 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 {{.*}}, ptr @6 }, align 8
-//CHECK: @8 = private unnamed_addr constant {{.*}}error_codegen.cpp;tmain;38;1;;\00", align 1
+//CHECK: @8 = private unnamed_addr constant {{.*}}error_codegen.cpp;tmain;45;1;;\00", align 1
//CHECK: @9 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 {{.*}}, ptr @8 }, align 8
void foo() {}
diff --git a/clang/test/OpenMP/error_message.cpp b/clang/test/OpenMP/error_message.cpp
index 227cbf699777f0..aed2df99ea8f6f 100644
--- a/clang/test/OpenMP/error_message.cpp
+++ b/clang/test/OpenMP/error_message.cpp
@@ -1,6 +1,8 @@
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized
template <class T>
T tmain(T argc) {
diff --git a/clang/test/OpenMP/flush_ast_print.cpp b/clang/test/OpenMP/flush_ast_print.cpp
index 768282422032fd..484705e200eb65 100644
--- a/clang/test/OpenMP/flush_ast_print.cpp
+++ b/clang/test/OpenMP/flush_ast_print.cpp
@@ -2,9 +2,17 @@
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ast-print %s | FileCheck %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
+
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s | FileCheck %s
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
+
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ast-print %s | FileCheck %s
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s
// expected-no-diagnostics
#ifndef HEADER
diff --git a/clang/test/OpenMP/flush_codegen.cpp b/clang/test/OpenMP/flush_codegen.cpp
index fa2586d9fe258d..022bf856d82c91 100644
--- a/clang/test/OpenMP/flush_codegen.cpp
+++ b/clang/test/OpenMP/flush_codegen.cpp
@@ -5,10 +5,22 @@
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -fopenmp-enable-irbuilder -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -fopenmp-enable-irbuilder -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -debug-info-kind=limited -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -debug-info-kind=limited -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -fopenmp-enable-irbuilder -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -fopenmp-enable-irbuilder -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -fopenmp-enable-irbuilder -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -debug-info-kind=limited -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
+
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck --check-prefix SIMD-ONLY0 %s
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -debug-info-kind=limited -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s
// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
+
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck --check-prefix SIMD-ONLY0 %s
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -debug-info-kind=limited -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s
+// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
// expected-no-diagnostics
#ifndef HEADER
#define HEADER
diff --git a/clang/test/OpenMP/for_linear_messages.cpp b/clang/test/OpenMP/for_linear_messages.cpp
index d8d3391c0c2715..6253a3032c0e32 100644
--- a/clang/test/OpenMP/for_linear_messages.cpp
+++ b/clang/test/OpenMP/for_linear_messages.cpp
@@ -1,8 +1,10 @@
// RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized
// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 -DOMP52 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=60 -DOMP52 %s -Wuninitialized
// RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 -DOMP52 %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=60 -DOMP52 %s -Wuninitialized
extern int omp_default_mem_alloc;
diff --git a/clang/test/OpenMP/for_simd_ast_print.cpp b/clang/test/OpenMP/for_simd_ast_print.cpp
index 7f77107b8ed7ce..5ee0e3d7393b3e 100644
--- a/clang/test/OpenMP/for_simd_ast_print.cpp
+++ b/clang/test/OpenMP/for_simd_ast_print.cpp
@@ -7,6 +7,9 @@
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=51 -ast-print %s -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP52
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -ast-print %s -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP52
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=52 -ast-print %s -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP52
// RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP52
// RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP52
@@ -20,6 +23,9 @@
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ast-print %s -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP51
+// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=60 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP51
// expected-no-diagnostics
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=52 -ast-print %s -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP52
// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP52
More information about the cfe-commits
mailing list