[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