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