Files
clang-p2996/clang/test/ParserOpenACC/parse-constructs.cpp
erichkeane df1e102e2a [OpenACC] implement AST/Sema for 'routine' construct with argument
The 'routine' construct has two forms, one which takes the name of a
function that it applies to, and another where it implicitly figures it
out based on the next declaration. This patch implements the former with
the required restrictions on the name and the function-static-variables
as specified.

What has not been implemented is any clauses for this, any of the A.3.4
warnings, or the other form.
2025-03-06 06:42:17 -08:00

54 lines
1.8 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)
#pragma acc routine(NS::foo)
// 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)
// expected-error@+1{{OpenACC routine name 'NS::templ' names a set of overloads}}
#pragma acc routine(NS::templ)
// 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>)
// expected-error@+1{{OpenACC routine name 'NS::templ<int>' names a set of overloads}}
#pragma acc routine(NS::templ<int>)
// expected-error@+1{{use of undeclared identifier 'T'}}
#pragma acc routine(templ<T>)
// expected-error@+1{{use of undeclared identifier 'T'}}
#pragma acc routine(NS::templ<T>)
// expected-error@+2{{expected ')'}}
// expected-note@+1{{to match this '('}}
#pragma acc routine (NS::foo())
// expected-error@+1 {{expected unqualified-id}}
#pragma acc routine()
// expected-error@+1 {{expected unqualified-id}}
#pragma acc routine(int)
// expected-error@+2{{'C' does not refer to a value}}
// expected-note@#CDef{{declared here}}
#pragma acc routine (NS::C)
// 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)
#pragma acc routine (NS::C::public_mem_func)