https://github.com/wenju-he updated 
https://github.com/llvm/llvm-project/pull/204968

>From dba9687c203534b1151997a27055f01e0a2d4a91 Mon Sep 17 00:00:00 2001
From: Wenju He <[email protected]>
Date: Sun, 21 Jun 2026 11:18:12 +0200
Subject: [PATCH 1/2] [Driver][SYCL] Treat stdin as C++ when -fsycl is active

1723b7a30145 added a frontend check that rejects C inputs when SYCL mode
is active (since SYCL requires C++). The stdin path in BuildInputs
hardcoded TY_C regardless of driver mode, so `-fsycl -dM -E -` would
pass -x c to cc1 and trigger the new diagnostic.

Fix: use TY_CXX for stdin when IsSYCL.

Also, upstream a downstream test that fails due to 1723b7a30145.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
---
 clang/lib/Driver/Driver.cpp                       |  4 ++++
 clang/test/Driver/sycl-print-internal-defines.cpp | 12 ++++++++++++
 2 files changed, 16 insertions(+)
 create mode 100644 clang/test/Driver/sycl-print-internal-defines.cpp

diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index d153e99d37280..d21e20c4aa445 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -3134,6 +3134,8 @@ void Driver::BuildInputs(const ToolChain &TC, 
DerivedArgList &Args,
       Diag(clang::diag::warn_drv_unused_x) << LastXArg->getValue();
   }
 
+  bool IsSYCL = Args.hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false);
+
   for (Arg *A : Args) {
     if (A->getOption().getKind() == Option::InputClass) {
       const char *Value = A->getValue();
@@ -3151,6 +3153,8 @@ void Driver::BuildInputs(const ToolChain &TC, 
DerivedArgList &Args,
             Ty = types::TY_Fortran;
           } else if (IsDXCMode()) {
             Ty = types::TY_HLSL;
+          } else if (IsSYCL) {
+            Ty = types::TY_CXX;
           } else {
             // If running with -E, treat as a C input (this changes the
             // builtin macros, for example). This may be overridden by -ObjC
diff --git a/clang/test/Driver/sycl-print-internal-defines.cpp 
b/clang/test/Driver/sycl-print-internal-defines.cpp
new file mode 100644
index 0000000000000..0fc412b5b33ab
--- /dev/null
+++ b/clang/test/Driver/sycl-print-internal-defines.cpp
@@ -0,0 +1,12 @@
+// UNSUPPORTED: system-windows
+// Test that clang can print defines in SYCL mode.
+// REQUIRES: x86-registered-target
+
+// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -dM -E %s 2>&1 \
+// RUN: | FileCheck --check-prefix CHECK-PRINT-INTERNAL-DEFINES %s
+// CHECK-PRINT-INTERNAL-DEFINES: #define
+
+// Printing defines also works when input is stdin.
+// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -dM -E - < /dev/null 
2>&1 \
+// RUN: | FileCheck 
--check-prefixes=CHECK-PRINT-INTERNAL-DEFINES,CHECK-NO-ERROR %s
+// CHECK-NO-ERROR-NOT: error:

>From eeef872a2ea58d2b69956aa40ee239d92c1fbd6b Mon Sep 17 00:00:00 2001
From: Wenju He <[email protected]>
Date: Wed, 24 Jun 2026 01:51:42 +0200
Subject: [PATCH 2/2] remove target options from test

---
 clang/test/Driver/sycl-print-internal-defines.cpp | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/clang/test/Driver/sycl-print-internal-defines.cpp 
b/clang/test/Driver/sycl-print-internal-defines.cpp
index 0fc412b5b33ab..389aaf25608c6 100644
--- a/clang/test/Driver/sycl-print-internal-defines.cpp
+++ b/clang/test/Driver/sycl-print-internal-defines.cpp
@@ -1,12 +1,8 @@
-// UNSUPPORTED: system-windows
 // Test that clang can print defines in SYCL mode.
-// REQUIRES: x86-registered-target
 
-// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -dM -E %s 2>&1 \
-// RUN: | FileCheck --check-prefix CHECK-PRINT-INTERNAL-DEFINES %s
+// RUN: %clangxx -fsycl -dM -E %s 2>&1 | FileCheck --check-prefix 
CHECK-PRINT-INTERNAL-DEFINES %s
 // CHECK-PRINT-INTERNAL-DEFINES: #define
 
 // Printing defines also works when input is stdin.
-// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -dM -E - < /dev/null 
2>&1 \
-// RUN: | FileCheck 
--check-prefixes=CHECK-PRINT-INTERNAL-DEFINES,CHECK-NO-ERROR %s
+// RUN: %clangxx -fsycl -dM -E - < /dev/null 2>&1 | FileCheck 
--check-prefixes=CHECK-PRINT-INTERNAL-DEFINES,CHECK-NO-ERROR %s
 // CHECK-NO-ERROR-NOT: error:

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to