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)
181 lines
13 KiB
C++
181 lines
13 KiB
C++
// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 150 %s
|
|
|
|
// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 150 %s
|
|
|
|
template <class T>
|
|
T tmain() {
|
|
static T argc;
|
|
#pragma omp for
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
;
|
|
}
|
|
#pragma omp for
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan allocate(argc) // expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp scan'}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
#pragma omp scan untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp scan'}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
#pragma omp scan unknown // expected-warning {{extra tokens at the end of '#pragma omp scan' are ignored}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
}
|
|
#pragma omp for simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
if (argc)
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
if (argc) {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
while (argc)
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
while (argc) {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
do
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
while (argc)
|
|
;
|
|
#pragma omp simd reduction(inscan, +: argc) // expected-error {{the inscan reduction list item must appear as a list item in an 'inclusive' or 'exclusive' clause on an inner 'omp scan' directive}}
|
|
for (int i = 0; i < 10; ++i)
|
|
do {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
} while (argc);
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
switch (argc)
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
switch (argc)
|
|
case 1:
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
switch (argc)
|
|
case 1: {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc) // expected-error {{the inscan reduction list item must appear as a list item in an 'inclusive' or 'exclusive' clause on an inner 'omp scan' directive}}
|
|
for (int i = 0; i < 10; ++i)
|
|
switch (argc) {
|
|
#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
case 1:
|
|
#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
break;
|
|
default: {
|
|
#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
} break;
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
for (;;)
|
|
#pragma omp scan exclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
for (;;) {
|
|
#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i) {
|
|
label:
|
|
#pragma omp scan exclusive(argc)
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan inclusive(argc) // expected-note {{previous 'scan' directive used here}}
|
|
#pragma omp scan inclusive(argc) // expected-error {{exactly one 'scan' directive must appear in the loop body of an enclosing directive}}
|
|
label1 : {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
}}
|
|
|
|
return T();
|
|
}
|
|
|
|
int main() {
|
|
static int argc;
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan inclusive(argc) inclusive(argc) // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
;
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan exclusive(argc) inclusive(argc) // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
;
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan exclusive(argc) exclusive(argc) // expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
;
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc) // expected-error {{the inscan reduction list item must appear as a list item in an 'inclusive' or 'exclusive' clause on an inner 'omp scan' directive}}
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan untied // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp scan'}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
#pragma omp scan unknown // expected-warning {{extra tokens at the end of '#pragma omp scan' are ignored}} expected-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
if (argc)
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
if (argc) {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
while (argc)
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
while (argc) {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
do
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
while (argc)
|
|
;
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
do {
|
|
#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
} while (argc);
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
switch (argc)
|
|
#pragma omp scan exclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
switch (argc)
|
|
case 1:
|
|
#pragma omp scan exclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}
|
|
switch (argc)
|
|
case 1: {
|
|
#pragma omp scan exclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
switch (argc) {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
case 1:
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
break;
|
|
default: {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
} break;
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i)
|
|
for (;;)
|
|
#pragma omp scan inclusive(argc) // expected-error {{'#pragma omp scan' cannot be an immediate substatement}} expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
for (;;) {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}} expected-error {{the list item must appear in 'reduction' clause with the 'inscan' modifier of the parent directive}}
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i) {
|
|
label:
|
|
#pragma omp scan inclusive(argc)
|
|
}
|
|
#pragma omp simd reduction(inscan, +: argc)
|
|
for (int i = 0; i < 10; ++i) {
|
|
#pragma omp scan inclusive(argc) // expected-note {{previous 'scan' directive used here}}
|
|
#pragma omp scan inclusive(argc) // expected-error {{exactly one 'scan' directive must appear in the loop body of an enclosing directive}}
|
|
label1 : {
|
|
#pragma omp scan inclusive(argc) // expected-error {{orphaned 'omp scan' directives are prohibited; perhaps you forget to enclose the directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
|
|
}
|
|
}
|
|
|
|
return tmain<int>(); // expected-note {{in instantiation of function template specialization 'tmain<int>' requested here}}
|
|
}
|