File tree Expand file tree Collapse file tree 2 files changed +11
-2
lines changed Expand file tree Collapse file tree 2 files changed +11
-2
lines changed Original file line number Diff line number Diff line change @@ -410,8 +410,11 @@ static bool IsSyclMathFunc(unsigned BuiltinID) {
410
410
bool Sema::isKnownGoodSYCLDecl (const Decl *D) {
411
411
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
412
412
const IdentifierInfo *II = FD->getIdentifier ();
413
- if (FD->getBuiltinID () == Builtin::BIprintf)
414
- return true ;
413
+ // Allow to use `::printf` only for CUDA.
414
+ if (Context.getTargetInfo ().getTriple ().isNVPTX ()) {
415
+ if (FD->getBuiltinID () == Builtin::BIprintf)
416
+ return true ;
417
+ }
415
418
const DeclContext *DC = FD->getDeclContext ();
416
419
if (II && II->isStr (" __spirv_ocl_printf" ) &&
417
420
!FD->isDefined () &&
Original file line number Diff line number Diff line change @@ -47,6 +47,8 @@ __attribute__((sycl_kernel)) void kernel_single_task(const Func &kernelFunc) {
47
47
kernelFunc (); // expected-note 2+ {{called by 'kernel_single_task}}
48
48
}
49
49
50
+ extern " C" int printf (const char *fmt, ...);
51
+
50
52
int main () {
51
53
// expected-error@+1 {{SYCL kernel cannot call a variadic function}}
52
54
kernel_single_task<class fake_kernel >([]() { foo (6 ); });
@@ -58,6 +60,10 @@ int main() {
58
60
kernel_single_task<class fake_kernel >([]() { A::__spirv_ocl_printf (" Hello world! %d%d\n " , 4 , 2 ); });
59
61
// expected-error@+1 {{SYCL kernel cannot call a variadic function}}
60
62
kernel_single_task<class fake_kernel >([]() { __spirv_ocl_printf (" Hello world! %d%d\n " , 4 , 2 ); });
63
+
64
+ // Check that default printf is not allowed.
65
+ // expected-error@+1 {{SYCL kernel cannot call a variadic function}}
66
+ kernel_single_task<class fake_kernel >([]() { printf (" Hello world! %d%d\n " , 4 , 2 ); });
61
67
#elif defined(PRINTF_INVALID_DEF)
62
68
// expected-error@+1 {{SYCL kernel cannot call a variadic function}}
63
69
kernel_single_task<class fake_kernel >([]() { __spirv_ocl_printf (" Hello world! %d%d\n " , 4 , 2 ); });
You can’t perform that action at this time.
0 commit comments