// RUN: %clang_cc1 -triple spirv64 -aux-triple x86_64-unknown-linux-gnu \ // RUN: -fcuda-is-device -verify -fsyntax-only %s #define __global__ __attribute__((global)) __attribute__((reqd_work_group_size(0x100000000, 1, 1))) // expected-error {{integer constant expression evaluates to value 4294967296 that cannot be represented in a 32-bit unsigned integer type}} __global__ void TestTooBigArg1(void); __attribute__((work_group_size_hint(0x100000000, 1, 1))) // expected-error {{integer constant expression evaluates to value 4294967296 that cannot be represented in a 32-bit unsigned integer type}} __global__ void TestTooBigArg2(void); template __attribute__((reqd_work_group_size(Args))) // expected-error {{expression contains unexpanded parameter pack 'Args'}} __global__ void TestTemplateVariadicArgs1(void) {} template __attribute__((work_group_size_hint(Args))) // expected-error {{expression contains unexpanded parameter pack 'Args'}} __global__ void TestTemplateVariadicArgs2(void) {} template // expected-note {{declared here}} __attribute__((reqd_work_group_size(a, 1, 1))) // expected-error {{'a' does not refer to a value}} __global__ void TestTemplateArgClass1(void) {} template // expected-note {{declared here}} __attribute__((work_group_size_hint(a, 1, 1))) // expected-error {{'a' does not refer to a value}} __global__ void TestTemplateArgClass2(void) {} constexpr int A = 512; __attribute__((reqd_work_group_size(A, A, A))) __global__ void TestConstIntArg1(void) {} __attribute__((work_group_size_hint(A, A, A))) __global__ void TestConstIntArg2(void) {} int B = 512; __attribute__((reqd_work_group_size(B, 1, 1))) // expected-error {{attribute requires parameter 0 to be an integer constant}} __global__ void TestNonConstIntArg1(void) {} __attribute__((work_group_size_hint(B, 1, 1))) // expected-error {{attribute requires parameter 0 to be an integer constant}} __global__ void TestNonConstIntArg2(void) {} constexpr int C = -512; __attribute__((reqd_work_group_size(C, 1, 1))) // expected-error {{attribute requires a non-negative integral compile time constant expression}} __global__ void TestNegativeConstIntArg1(void) {} __attribute__((work_group_size_hint(C, 1, 1))) // expected-error {{attribute requires a non-negative integral compile time constant expression}} __global__ void TestNegativeConstIntArg2(void) {} __attribute__((reqd_work_group_size(A, 0, 1))) // expected-error {{attribute must be greater than 0}} __global__ void TestZeroArg1(void) {} __attribute__((work_group_size_hint(A, 0, 1))) // expected-error {{attribute must be greater than 0}} __global__ void TestZeroArg2(void) {}