llvm-project/clang/test/ParserOpenACC/parse-constructs.cpp
erichkeane 1b75b9e665 [OpenACC] Handle sema for gang, worker, vector, seq clauses on routine
These 4 clauses are mutually exclusive, AND require at least one of
them. Additionally, gang has some additional restrictions in that only
the 'dim' specifier is permitted. This patch implements all of this, and
ends up refactoring the handling of each of these clauses for
readabililty.
2025-03-06 11:53:46 -08:00

54 lines
1.9 KiB
C++

// RUN: %clang_cc1 %s -verify -fopenacc
namespace NS {
void foo(); // expected-note{{declared here}}
template<typename T>
void templ(); // expected-note 2{{declared here}}
class C { // #CDef
void private_mem_func(); // #PrivateMemFunc
public:
void public_mem_func();
};
}
// expected-error@+1{{use of undeclared identifier 'foo'; did you mean 'NS::foo'?}}
#pragma acc routine(foo) seq
#pragma acc routine(NS::foo) seq
// expected-error@+2{{use of undeclared identifier 'templ'; did you mean 'NS::templ'?}}
// expected-error@+1{{OpenACC routine name 'NS::templ' names a set of overloads}}
#pragma acc routine(templ) seq
// expected-error@+1{{OpenACC routine name 'NS::templ' names a set of overloads}}
#pragma acc routine(NS::templ) seq
// expected-error@+2{{use of undeclared identifier 'templ'; did you mean 'NS::templ'?}}
// expected-error@+1{{OpenACC routine name 'NS::templ' names a set of overloads}}
#pragma acc routine(templ<int>) seq
// expected-error@+1{{OpenACC routine name 'NS::templ<int>' names a set of overloads}}
#pragma acc routine(NS::templ<int>) seq
// expected-error@+1{{use of undeclared identifier 'T'}}
#pragma acc routine(templ<T>) seq
// expected-error@+1{{use of undeclared identifier 'T'}}
#pragma acc routine(NS::templ<T>) seq
// expected-error@+2{{expected ')'}}
// expected-note@+1{{to match this '('}}
#pragma acc routine (NS::foo()) seq
// expected-error@+1 {{expected unqualified-id}}
#pragma acc routine() seq
// expected-error@+1 {{expected unqualified-id}}
#pragma acc routine(int) seq
// expected-error@+2{{'C' does not refer to a value}}
// expected-note@#CDef{{declared here}}
#pragma acc routine (NS::C) seq
// expected-error@+2{{'private_mem_func' is a private member of 'NS::C'}}
// expected-note@#PrivateMemFunc{{implicitly declared private here}}
#pragma acc routine (NS::C::private_mem_func) seq
#pragma acc routine (NS::C::public_mem_func) seq