58 lines
1.7 KiB
Plaintext
58 lines
1.7 KiB
Plaintext
// REQUIRES: x86-registered-target
|
|
// REQUIRES: nvptx-registered-target
|
|
// RUN: %clang_cc1 -triple nvptx64-nvidia-cuda -fcuda-is-device -fsyntax-only \
|
|
// RUN: -verify -DEXPECT_VA_ARG_ERR -DEXPECT_VARARG_ERR %s
|
|
// RUN: %clang_cc1 -triple nvptx64-nvidia-cuda -fcuda-is-device -fsyntax-only \
|
|
// RUN: -fcuda-allow-variadic-functions -verify -DEXPECT_VA_ARG_ERR %s
|
|
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fsyntax-only -verify \
|
|
// RUN: -DEXPECT_VARARG_ERR %s
|
|
|
|
#include <stdarg.h>
|
|
#include "Inputs/cuda.h"
|
|
|
|
__device__ void foo() {
|
|
va_list list;
|
|
va_arg(list, int);
|
|
#ifdef EXPECT_VA_ARG_ERR
|
|
// expected-error@-2 {{CUDA device code does not support va_arg}}
|
|
#endif
|
|
}
|
|
|
|
void bar() {
|
|
va_list list;
|
|
va_arg(list, int); // OK: host-only
|
|
}
|
|
|
|
__device__ void baz() {
|
|
#if !defined(__CUDA_ARCH__)
|
|
va_list list;
|
|
va_arg(list, int); // OK: only seen when compiling for host
|
|
#endif
|
|
}
|
|
|
|
__device__ void vararg(const char* x, ...) {}
|
|
#ifdef EXPECT_VARARG_ERR
|
|
// expected-error@-2 {{CUDA device code does not support variadic functions}}
|
|
#endif
|
|
|
|
template <typename T>
|
|
__device__ void vararg(T t, ...) {}
|
|
#ifdef EXPECT_VARARG_ERR
|
|
// expected-error@-2 {{CUDA device code does not support variadic functions}}
|
|
#endif
|
|
|
|
extern "C" __device__ int printf(const char* fmt, ...); // OK, special case.
|
|
|
|
// Definition of printf not allowed.
|
|
extern "C" __device__ int printf(const char* fmt, ...) { return 0; }
|
|
#ifdef EXPECT_VARARG_ERR
|
|
// expected-error@-2 {{CUDA device code does not support variadic functions}}
|
|
#endif
|
|
|
|
namespace ns {
|
|
__device__ int printf(const char* fmt, ...);
|
|
#ifdef EXPECT_VARARG_ERR
|
|
// expected-error@-2 {{CUDA device code does not support variadic functions}}
|
|
#endif
|
|
}
|