2020-06-25 07:01:15 +00:00
// RUN: %clang_cc1 -verify=expected,omp4 -fopenmp -fopenmp-version=45 -std=c++11 -o - %s
[OpenMP] Update the default version of OpenMP to 5.1
The default version of OpenMP is updated from 5.0 to 5.1 which means if -fopenmp is specified but -fopenmp-version is not specified with clang, the default version of OpenMP is taken to be 5.1. After modifying the Frontend for that, various LIT tests were updated. This patch contains all such changes. At a high level, these are the patterns of changes observed in LIT tests -
# RUN lines which mentioned `-fopenmp-version=50` need to kept only if the IR for version 5.0 and 5.1 are different. Otherwise only one RUN line with no version info(i.e. default version) needs to be there.
# Test cases of this sort already had the RUN lines with respect to the older default version 5.0 and the version 5.1. Only swapping the version specification flag `-fopenmp-version` from newer version RUN line to older version RUN line is required.
# Diagnostics: Remove the 5.0 version specific RUN lines if there was no difference in the Diagnostics messages with respect to the default 5.1.
# Diagnostics: In case there was any difference in diagnostics messages between 5.0 and 5.1, mention version specific messages in tests.
# If the test contained version specific ifdef's e.g. "#ifdef OMP5" but there were no RUN lines for any other version than 5.X, then bring the code guarded by ifdef's outside and remove the ifdef's.
# Some tests had RUN lines for both 5.0 and 5.1 versions, but it is found that the IR for 5.0 is not different from the 5.1, therefore such RUN lines are redundant. So, such duplicated lines are removed.
# To generate CHECK lines automatically, use the script llvm/utils/update_cc_test_checks.py
Reviewed By: saiislam, ABataev
Differential Revision: https://reviews.llvm.org/D129635
(cherry picked from commit 9dd2999907dc791136a75238a6000f69bf67cf4e)
2023-06-06 16:16:13 +05:30
// RUN: %clang_cc1 -verify=expected,omp5 -fopenmp -o - -std=c++11 %s -Wuninitialized
2020-06-25 07:01:15 +00:00
2016-06-30 21:22:08 +00:00
// RUN: not %clang_cc1 -fopenmp -std=c++11 -fopenmp-targets=aaa-bbb-ccc-ddd -o - %s 2>&1 | FileCheck %s
2017-12-29 18:07:07 +00:00
2020-06-25 07:01:15 +00:00
// RUN: %clang_cc1 -verify=expected,omp4 -fopenmp-simd -fopenmp-version=45 -std=c++11 -o - %s
[OpenMP] Update the default version of OpenMP to 5.1
The default version of OpenMP is updated from 5.0 to 5.1 which means if -fopenmp is specified but -fopenmp-version is not specified with clang, the default version of OpenMP is taken to be 5.1. After modifying the Frontend for that, various LIT tests were updated. This patch contains all such changes. At a high level, these are the patterns of changes observed in LIT tests -
# RUN lines which mentioned `-fopenmp-version=50` need to kept only if the IR for version 5.0 and 5.1 are different. Otherwise only one RUN line with no version info(i.e. default version) needs to be there.
# Test cases of this sort already had the RUN lines with respect to the older default version 5.0 and the version 5.1. Only swapping the version specification flag `-fopenmp-version` from newer version RUN line to older version RUN line is required.
# Diagnostics: Remove the 5.0 version specific RUN lines if there was no difference in the Diagnostics messages with respect to the default 5.1.
# Diagnostics: In case there was any difference in diagnostics messages between 5.0 and 5.1, mention version specific messages in tests.
# If the test contained version specific ifdef's e.g. "#ifdef OMP5" but there were no RUN lines for any other version than 5.X, then bring the code guarded by ifdef's outside and remove the ifdef's.
# Some tests had RUN lines for both 5.0 and 5.1 versions, but it is found that the IR for 5.0 is not different from the 5.1, therefore such RUN lines are redundant. So, such duplicated lines are removed.
# To generate CHECK lines automatically, use the script llvm/utils/update_cc_test_checks.py
Reviewed By: saiislam, ABataev
Differential Revision: https://reviews.llvm.org/D129635
(cherry picked from commit 9dd2999907dc791136a75238a6000f69bf67cf4e)
2023-06-06 16:16:13 +05:30
// RUN: %clang_cc1 -verify=expected,omp5 -fopenmp-simd -std=c++11 -o - %s
2016-01-06 13:42:12 +00:00
// CHECK: error: OpenMP target is invalid: 'aaa-bbb-ccc-ddd'
2016-02-08 15:59:20 +00:00
// RUN: not %clang_cc1 -fopenmp -std=c++11 -triple nvptx64-nvidia-cuda -o - %s 2>&1 | FileCheck --check-prefix CHECK-UNSUPPORTED-HOST-TARGET %s
// RUN: not %clang_cc1 -fopenmp -std=c++11 -triple nvptx-nvidia-cuda -o - %s 2>&1 | FileCheck --check-prefix CHECK-UNSUPPORTED-HOST-TARGET %s
2021-08-05 07:04:03 -04:00
// CHECK-UNSUPPORTED-HOST-TARGET: error: target '{{nvptx64-nvidia-cuda|nvptx-nvidia-cuda}}' is not a supported OpenMP host target
2017-08-07 21:11:10 +00:00
// RUN: not %clang_cc1 -fopenmp -std=c++11 -fopenmp-targets=hexagon-linux-gnu -o - %s 2>&1 | FileCheck --check-prefix CHECK-UNSUPPORTED-DEVICE-TARGET %s
// CHECK-UNSUPPORTED-DEVICE-TARGET: OpenMP target is invalid: 'hexagon-linux-gnu'
2014-09-19 08:19:49 +00:00
2023-07-06 10:28:24 +01:00
// RUN: not %clang_cc1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path 1111.bc -o - 2>&1 | FileCheck --check-prefix NO-HOST-BC %s
2021-08-05 07:04:03 -04:00
// NO-HOST-BC: provided host compiler IR file '1111.bc' is required to generate code for OpenMP target regions but cannot be found
2018-04-30 16:26:57 +00:00
// RUN: %clang_cc1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc -DREGION_HOST
2023-07-06 10:28:24 +01:00
// RUN: not %clang_cc1 -verify=expected,omp4 -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - -DREGION_DEVICE 2>&1
// RUN: not %clang_cc1 -verify=expected,omp5 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - -DREGION_DEVICE 2>&1
2018-04-30 16:26:57 +00:00
# if defined(REGION_HOST) || defined(REGION_DEVICE)
void foo ( ) {
# ifdef REGION_HOST
2019-10-03 16:20:34 +00:00
# pragma omp target // expected-error {{Offloading entry for target region in _Z3foov is incorrect: either the address or the ID is invalid.}}
2018-04-30 16:26:57 +00:00
;
# endif
# ifdef REGION_DEVICE
# pragma omp target
;
# endif
}
2018-11-07 19:11:14 +00:00
# pragma omp declare target to(foo)
void bar ( ) {
# ifdef REGION_HOST
# pragma omp target
;
# endif
# ifdef REGION_DEVICE
# pragma omp target
;
# endif
}
2018-04-30 16:26:57 +00:00
# else
2014-09-19 08:19:49 +00:00
void foo ( ) {
}
2019-01-02 19:28:48 +00:00
class S {
public :
void zee ( ) {
# pragma omp target map(this[:2]) // expected-note {{expected length on mapping of 'this' array section expression to be '1'}} // expected-error {{invalid 'this' expression on 'map' clause}}
int a ;
# pragma omp target map(this[1:1]) // expected-note {{expected lower bound on mapping of 'this' array section expression to be '0' or not specified}} // expected-error {{invalid 'this' expression on 'map' clause}}
int b ;
# pragma omp target map(this[1]) // expected-note {{expected 'this' subscript expression on map clause to be 'this[0]'}} // expected-error {{invalid 'this' expression on 'map' clause}}
int c ;
2020-06-25 07:01:15 +00:00
# pragma omp target map(foo) // omp4-error {{expected expression containing only member accesses and/or array sections based on named variables}} omp5-error {{expected addressable lvalue in 'map' clause}}
2020-02-24 10:06:17 -05:00
int d ;
2020-06-25 07:01:15 +00:00
# pragma omp target map(zee) // omp4-error {{expected expression containing only member accesses and/or array sections based on named variables}} omp5-error {{expected addressable lvalue in 'map' clause}}
2020-02-24 10:06:17 -05:00
int e ;
2020-06-25 07:01:15 +00:00
# pragma omp target map(this->zee) // omp4-error {{expected expression containing only member accesses and/or array sections based on named variables}} omp5-error {{expected addressable lvalue in 'map' clause}}
2020-02-24 10:06:17 -05:00
int f ;
2019-01-02 19:28:48 +00:00
}
} ;
2014-09-19 08:19:49 +00:00
# pragma omp target // expected-error {{unexpected OpenMP directive '#pragma omp target'}}
int main ( int argc , char * * argv ) {
# pragma omp target { // expected-warning {{extra tokens at the end of '#pragma omp target' are ignored}}
foo ( ) ;
# pragma omp target ( // expected-warning {{extra tokens at the end of '#pragma omp target' are ignored}}
foo ( ) ;
# pragma omp target [ // expected-warning {{extra tokens at the end of '#pragma omp target' are ignored}}
foo ( ) ;
# pragma omp target ] // expected-warning {{extra tokens at the end of '#pragma omp target' are ignored}}
foo ( ) ;
# pragma omp target ) // expected-warning {{extra tokens at the end of '#pragma omp target' are ignored}}
foo ( ) ;
# pragma omp target } // expected-warning {{extra tokens at the end of '#pragma omp target' are ignored}}
foo ( ) ;
# pragma omp target
2016-02-02 04:00:47 +00:00
foo ( ) ;
2014-09-19 08:19:49 +00:00
// expected-warning@+1 {{extra tokens at the end of '#pragma omp target' are ignored}}
# pragma omp target unknown()
foo ( ) ;
L1 :
foo ( ) ;
# pragma omp target
;
# pragma omp target
{
goto L1 ; // expected-error {{use of undeclared label 'L1'}}
argc + + ;
}
for ( int i = 0 ; i < 10 ; + + i ) {
switch ( argc ) {
case ( 0 ) :
# pragma omp target
{
foo ( ) ;
break ; // expected-error {{'break' statement not in loop or switch statement}}
continue ; // expected-error {{'continue' statement not in loop statement}}
}
default :
break ;
}
}
goto L2 ; // expected-error {{use of undeclared label 'L2'}}
# pragma omp target
L2 :
foo ( ) ;
# pragma omp target
{
return 1 ; // expected-error {{cannot return from OpenMP region}}
}
[ [ ] ] // expected-error {{an attribute list cannot appear here}}
# pragma omp target
for ( int n = 0 ; n < 100 ; + + n ) { }
2020-06-25 07:01:15 +00:00
# pragma omp target map(foo) // omp4-error {{expected expression containing only member accesses and/or array sections based on named variables}} omp5-error {{expected addressable lvalue in 'map' clause}}
2020-02-24 10:06:17 -05:00
{ }
S s ;
2020-06-25 07:01:15 +00:00
# pragma omp target map(s.zee) // omp4-error {{expected expression containing only member accesses and/or array sections based on named variables}} omp5-error {{expected addressable lvalue in 'map' clause}}
2020-02-24 10:06:17 -05:00
{ }
2014-09-19 08:19:49 +00:00
return 0 ;
}
2020-01-17 20:39:04 -05:00
template < class > struct a { static bool b ; } ;
template < class c , bool = a < c > : : b > void e ( c ) { // expected-note {{candidate template ignored: substitution failure [with c = int]: non-type template argument is not a constant expression}}
# pragma omp target
{
int d ; e ( d ) ; // expected-error {{no matching function for call to 'e'}}
}
}
2018-04-30 16:26:57 +00:00
# endif