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@+6 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present', 'ompx_hold'}} 
-// omp50-error@+5 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'ompx_hold'}} 
-// omp51-error@+4 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'ompx_hold'}} 
-// expected-error@+3 {{only variable 'vvec' is allowed in map clauses of this 
'omp declare mapper' directive}} 
+#if !defined(OMP52) && !defined(OMP60)
+// omp51-simd-error@+6 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present', 'ompx_hold'}}
+// omp50-error@+5 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'ompx_hold'}}
+// omp51-error@+4 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'ompx_hold'}}
+// expected-error@+3 {{only variable 'vvec' is allowed in map clauses of this 
'omp declare mapper' directive}}
 // expected-error@+2 {{expected at least one clause on '#pragma omp declare 
mapper' directive}}
 // expected-note@+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@+4 {{mapper type must be of struct, union or class type}}
+// omp52-error@+3 {{missing ',' after map type modifier}}
+// omp60-error@+2 {{missing ',' after map type modifier}}
+// omp60-simd-error@+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@+3 4 {{missing ',' after map type modifier}}
+// omp60-error@+2 4 {{missing ',' after map type modifier}}
+// omp60-simd-error@+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@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+#pragma omp end declare target 
+
+// ompvar-error@+1 {{variable captured in declare target region must appear in 
a to clause}}
+int a, b, z;
+// expected-note@+1 {{defined as threadprivate or thread local}}
+__thread int t;
+
+// expected-error@+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@+1 {{extra tokens at the end of '#pragma omp end declare 
target' are ignored}}
+#pragma omp end declare target shared(a) 
+
+// omp52-error@+8 {{unexpected 'map' clause, only 'enter', 'link', 
'device_type' or 'indirect' clauses expected}}
+// omp52-error@+7 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp51-error@+6 {{unexpected 'map' clause, only 'to', 'link', 'device_type' 
or 'indirect' clauses expected}} 
+// omp51-error@+5 {{expected at least one 'to', 'link' or 'indirect' clause}}
+// omp5-error@+4 {{unexpected 'map' clause, only 'to', 'link' or 'device_type' 
clauses expected}}
+// omp5-error@+3 {{expected at least one 'to' or 'link' clause}}
+// omp45-error@+2 {{unexpected 'map' clause, only 'to' or 'link' clauses 
expected}}
+// omp45-error@+1 {{expected at least one 'to' or 'link' clause}} 
+#pragma omp declare target map(a)
+
+// omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp45-to-51-error@+1 {{use of undeclared identifier 'foo1'}}
+#pragma omp declare target to(foo1) 
+
+// expected-error@+1 {{use of undeclared identifier 'foo2'}}
+#pragma omp declare target link(foo2) 
+
+// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// dev5-note@+2 {{marked as 'device_type(host)' here}}
+// omp45-error@+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@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp5-and-51-warning@+2 {{more than one 'device_type' clause is specified}}
+// omp45-error@+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@+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@+1 {{declared here}}
+int xxx;
 // omp51-error@+2 {{expression is not an integral constant expression}}
 // omp51-note@+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@+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@+5 {{unexpected 'allocate' clause, only 'enter', 'link', 
'device_type' or 'indirect' clauses expected}}
+// omp51-error@+4 {{unexpected 'allocate' clause, only 'to', 'link', 
'device_type' or 'indirect' clauses expected}}
+// omp5-error@+3 {{unexpected 'allocate' clause, only 'to', 'link' or 
'device_type' clauses expected}}
+// expected-error@+2 {{function name is not allowed in 'link' clause}}
+// omp45-error@+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@+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@+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@+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@+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@+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@+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@+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@+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@+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@+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@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+  // omp52-error@+1 {{unexpected 'to' clause, use 'enter' instead}}
+#pragma omp declare target to(foo3) link(w)
+  // omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
+  // omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+  // omp45-to-51-var-error@+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@+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@+1 {{'x' appears multiple times in clauses on the same 
declare target directive}}
+#pragma omp declare target (x, x) 
+// omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp45-to-51-clause-error@+1 {{'x' appears multiple times in clauses on the 
same declare target directive}}
+#pragma omp declare target to(x) to(x)
+// expected-error@+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@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// host5-note@+2 3 {{marked as 'device_type(nohost)' here}}
+// omp45-error@+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@+3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
+#pragma omp declare target to(bazzz) device_type(nohost) 
+// host5-error@+1 {{function with 'device_type(nohost)' is not available on 
host}}
+void any() {bazz();} 
+// host5-error@+1 {{function with 'device_type(nohost)' is not available on 
host}}
+void host1() {bazz();}
+// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// dev5-note@+2 3 {{marked as 'device_type(host)' here}}
+// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
+#pragma omp declare target to(host1) device_type(host)
+//host5-error@+1 {{function with 'device_type(nohost)' is not available on 
host}}
+void host2() {bazz();}
+// omp52-error@+2 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+1 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+#pragma omp declare target to(host2) 
+// dev5-error@+1 {{function with 'device_type(host)' is not available on 
device}}
+void device() {host1();}
+// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// host5-note@+2 2 {{marked as 'device_type(nohost)' here}} 
+// omp45-error@+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@+2 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+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@+1 {{function with 'device_type(host)' is not available on 
device}}
+void any2() {host1();} 
+// host5-error@+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@+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@+3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
+#pragma omp declare target to(MultiDevTy) device_type(any)
+// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// host-5-and-51-error@+2 {{'device_type(host)' does not match previously 
specified 'device_type(any)' for the same declaration}}
+// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
+#pragma omp declare target to(MultiDevTy) device_type(host)
+// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// no-host5-and-51-error@+2 {{'device_type(nohost)' does not match previously 
specified 'device_type(any)' for the same declaration}}
+// omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
+#pragma omp declare target to(MultiDevTy) device_type(nohost)
+
+// expected-warning@+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@+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@+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@+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@+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@+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@+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@+1 {{used here}}
+int target_var = variable;  
+// expected-note@+1 {{used here}}
+float target_var1 = variable2;  
+// expected-note@+1 {{used here}}
+int *ptr = &var;  
+// expected-note@+1 {{used here}}
+int ***ptr2 = &ptr1; 
+// expected-note@+1 {{used here}}
+int (**ptr3)[2] = &arrptr;
+// expected-note@+1 {{used here}}
+declare **obj3 = &obj2;
+// expected-note@+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@+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@+1 {{variable 'x' is uninitialized when used here}}
+    argc = x;
 }
 
 // expected-error@+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@+1 {{use of undeclared label 'L1'}}
+      goto L1;
     else if (i == 6)
-      return; // expected-error {{cannot return from OpenMP region}}
+      // expected-error@+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@+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@+1 {{to match this '('}} expected-note@+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@+1 {{expected 4 for loops after '#pragma omp distribute 
simd', but found only 1}}
+    ;
 #pragma omp target
 #pragma omp teams
 // expected-error@+2 {{expected ')'}}
 // expected-note@+1 {{to match this '('}} expected-note@+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@+1 {{expected 4 for loops after '#pragma omp distribute 
simd', but found only 1}}
+    ;
 #pragma omp target
 #pragma omp teams
 // expected-error@+2 {{expected ')'}}
 // expected-note@+1 {{to match this '('}} expected-note@+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@+1 {{expected 4 for loops after '#pragma omp distribute 
simd', but found only 1}}
+    ;
 #pragma omp target
 #pragma omp teams
-// xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified 
in 'collapse' clause}}
+// expected-note@+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@+1 {{expected 4 for loops after '#pragma omp distribute 
simd', but found only 1}}
+    ;
 #pragma omp target
 #pragma omp teams
-// expected-error@+2 {{expected ')'}}
-// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 
'collapse' clause}}
+// expected-error@+3 {{expected ')'}}
+// expected-note@+2 {{to match this '('}}
+// expected-note@+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@+1 {{expected 4 for loops after '#pragma omp distribute 
simd', but found only 1}}
+    ;
 #pragma omp target
 #pragma omp teams
-// expected-error@+2 {{expected ')'}}
-// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 
'collapse' clause}}
+// expected-error@+3 {{expected ')'}}
+// expected-note@+2 {{to match this '('}}
+// expected-note@+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@+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@+2 {{expected ')'}}
-// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 
'collapse' clause}}
+// expected-error@+3 {{expected ')'}}
+// expected-note@+2 {{to match this '('}}
+// expected-note@+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@+1 {{expected 4 for loops after '#pragma omp distribute 
simd', but found only 1}}
+    ;
 #pragma omp target
 #pragma omp teams
 // expected-error@+1 {{integer constant expression}}
@@ -719,14 +736,16 @@ void test_private(void) {
   int i;
 #pragma omp target
 #pragma omp teams
-// expected-error@+2 {{expected expression}}
-// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
+// expected-error@+3 {{expected expression}}
+// expected-error@+2 {{expected ')'}}
+// expected-note@+1 {{to match this '('}}
 #pragma omp distribute simd private(
   for (i = 0; i < 16; ++i)
     ;
 #pragma omp target
 #pragma omp teams
-// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
+// expected-error@+3 {{expected ')'}}
+//  expected-note@+2 {{to match this '('}}
 // expected-error@+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@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
+// expected-error@+3 {{expected ')'}}
+//  expected-note@+2 {{to match this '('}}
 // expected-error@+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@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
+// expected-error@+3 {{expected ')'}}
+// expected-note@+2 {{to match this '('}}
 // expected-error@+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@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
+// expected-error@+3 {{expected ')'}}
+// expected-note@+2 {{to match this '('}}
 // expected-error@+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@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
+// expected-error@+4 {{expected ')'}}
+// expected-note@+3 {{to match this '('}}
 // expected-error@+2 {{expected identifier}}
 // expected-warning@+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@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
+// expected-error@+4 {{expected ')'}}
+// expected-note@+3 {{to match this '('}}
 // expected-error@+2 {{expected identifier}}
 // expected-warning@+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@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
+// expected-error@+4 {{expected ')'}}
+// expected-note@+3 {{to match this '('}}
 // expected-error@+2 {{expected expression}}
 // expected-warning@+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@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
-//
+// expected-error@+3 {{expected ')'}}
+//  expected-note@+2 {{to match this '('}}
 // expected-error@+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@+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@+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@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause 
was deprecated, use new syntax 'linear(list: [linear-modifier,] 
step(step-size))'}}
+  // expected-error@+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@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was 
deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
+// expected-error@+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@+2 {{old syntax 'linear-modifier(list)' on 'linear' clause was 
deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}}
+// expected-error@+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@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{expected expression}} 
expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
+// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+3 {{expected expression}}
+// expected-error@+2 {{expected ')'}}
+// expected-note@+1 {{to match this '('}}
 #pragma omp distribute simd nontemporal(
   for (i = 0; i < 16; ++i)
     ;
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 2 {{expected expression}} 
expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
+// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+3 2 {{expected expression}}
+// expected-error@+2 {{expected ')'}}
+// expected-note@+1 {{to match this '('}}
 #pragma omp distribute simd nontemporal(,
   for (i = 0; i < 16; ++i)
     ;
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 2 {{expected expression}}
+// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+1 2 {{expected expression}}
 #pragma omp distribute simd nontemporal(, )
   for (i = 0; i < 16; ++i)
     ;
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{expected expression}}
+// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+1 {{expected expression}}
 #pragma omp distribute simd nontemporal()
   for (i = 0; i < 16; ++i)
     ;
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{expected expression}}
+// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+1 {{expected expression}}
 #pragma omp distribute simd nontemporal(int)
   for (i = 0; i < 16; ++i)
     ;
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} omp50-error@+1 {{expected variable name}} 
omp51-error@+1 {{expected variable name}}
+// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// omp50-and-later-var-error@+1 {{expected variable name}}
 #pragma omp distribute simd nontemporal(0)
   for (i = 0; i < 16; ++i)
     ;
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{use of undeclared 
identifier 'x'}}
+// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+1 {{use of undeclared identifier 'x'}}
 #pragma omp distribute simd nontemporal(x)
   for (i = 0; i < 16; ++i)
     ;
-// expected-error@+2 {{use of undeclared identifier 'x'}}
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{use of undeclared 
identifier 'y'}}
+// expected-error@+3 {{use of undeclared identifier 'x'}}
+// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+1 {{use of undeclared identifier 'y'}}
 #pragma omp distribute simd nontemporal(x, y)
   for (i = 0; i < 16; ++i)
     ;
-// expected-error@+3 {{use of undeclared identifier 'x'}}
-// expected-error@+2 {{use of undeclared identifier 'y'}}
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{use of undeclared 
identifier 'z'}}
+// expected-error@+4 {{use of undeclared identifier 'x'}}
+// expected-error@+3 {{use of undeclared identifier 'y'}}
+// omp45-error@+2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+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@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{expected ',' or ')' in 
'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to 
match this '('}}
+// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+3 {{expected ',' or ')' in 'nontemporal' clause}}
+// expected-error@+2 {{expected ')'}}
+// expected-note@+1 {{to match this '('}}
 #pragma omp distribute simd nontemporal(x :)
   for (i = 0; i < 16; ++i)
     ;
-// omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-error@+1 {{expected ')'}} 
expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' 
in 'nontemporal' clause}}
+// omp45-error@+4 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-error@+3 {{expected ')'}}
+// expected-note@+2 {{to match this '('}}
+// expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}
 #pragma omp distribute simd nontemporal(x :, )
   for (i = 0; i < 16; ++i)
     ;
 
-// omp51-note@+3 {{defined as nontemporal}}
-// omp50-note@+2 {{defined as nontemporal}}
-// omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} omp50-error@+1 {{a variable cannot appear in 
more than one nontemporal clause}} omp51-error@+1 {{a variable cannot appear in 
more than one nontemporal clause}}
+// omp50-temporal-note@+3 {{defined as nontemporal}}
+// omp-50-and-later-temporal-error@+2 {{a variable cannot appear in more than 
one nontemporal clause}}
+// omp45-error@+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@+1 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}} expected-note@+1 {{to match this '('}} 
expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} 
expected-error@+1 {{expected ')'}}
+// omp45-error@+3 {{unexpected OpenMP clause 'nontemporal' in directive 
'#pragma omp distribute simd'}}
+// expected-note@+2 {{to match this '('}}
+// expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} 
expected-error@+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@+2 {{unexpected OpenMP clause 'order' in directive '#pragma omp 
distribute simd'}}
+// expected-error@+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@+4 {{expected 'concurrent' in OpenMP clause 'order'}}
+// expected-note@+3 {{to match this '('}}
+// expected-error@+2 {{expected ')'}}
+// omp45-error@+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@+4 {{expected 'concurrent' in OpenMP clause 'order'}}
+// expected-note@+3 {{to match this '('}}
+// expected-error@+2 {{expected ')'}} 
+// omp45-error@+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@+3 {{to match this '('}}
+// expected-error@+2 {{expected ')'}}
+// omp45-error@+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@+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@+2 {{expected 'concurrent' in OpenMP clause 
'order'}}
+  // omp45-error@+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@+4 {{expected 'concurrent' in OpenMP clause 'order'}}
+  // expected-note@+3 {{to match this '('}}
+  // expected-error@+2 {{expected ')'}}
+  // omp45-error@+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@+2 {{expected 'concurrent' in OpenMP clause 'order'}}
+  // omp45-error@+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@+2 {{expected 'concurrent' in OpenMP clause 'order'}}
+  // omp45-error@+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@+2 {{directive '#pragma omp distribute simd' cannot 
contain more than one 'order' clause}}
+  // omp45-error@+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


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to