Skip to content

[Sema][SYCL] Only defer device diags for constexpr var init under SYCL#22767

Open
wenju-he wants to merge 1 commit into
intel:syclfrom
wenju-he:sema-defer-device-diags-constexpr-var-init-SYCL
Open

[Sema][SYCL] Only defer device diags for constexpr var init under SYCL#22767
wenju-he wants to merge 1 commit into
intel:syclfrom
wenju-he:sema-defer-device-diags-constexpr-var-init-SYCL

Conversation

@wenju-he

Copy link
Copy Markdown
Contributor

InConstexprVarInit gates a mechanism (added for SYCL's "manifestly constant-evaluated" device-code exemption) that reroutes deferred device diagnostics into MaybeDeviceDeferredDiags, discarding them if the variable turns out to be constant-initialized. It was originally opt-in via LangOpts.SYCLAllowAllFeaturesInConstexpr (added in fa62920), but 10fee97 ("[SYCL][clang] Always lift SYCL device code restrictions in constant expressions") made it unconditional for any constexpr-capable global/static variable initializer, so it also swallowed CUDA/HIP deferred diagnostics (e.g. AMDGPU builtin argument checks) raised while initializing a global constexpr lambda, since SemaBase::SemaDiagnosticBuilder routes to whichever map InConstexprVarInit currently selects regardless of which DiagIfDeviceCode caller (SYCL or CUDA) created the deferred diagnostic. Restrict it to SYCL device compilation, its only real consumer (SemaSYCL::DiagIfDeviceCode).

Fix clang/test/SemaHIP/amdgpu-builtin-in-lambda.hip CMPLRLLVM-77209

InConstexprVarInit gates a mechanism (added for SYCL's "manifestly
constant-evaluated" device-code exemption) that reroutes deferred
device diagnostics into MaybeDeviceDeferredDiags, discarding them if
the variable turns out to be constant-initialized. It was originally
opt-in via LangOpts.SYCLAllowAllFeaturesInConstexpr (added in
fa62920), but 10fee97 ("[SYCL][clang] Always lift SYCL
device code restrictions in constant expressions") made it
unconditional for any constexpr-capable global/static variable
initializer, so it also swallowed CUDA/HIP deferred diagnostics (e.g.
AMDGPU builtin argument checks) raised while initializing a global
constexpr lambda, since SemaBase::SemaDiagnosticBuilder routes to
whichever map InConstexprVarInit currently selects regardless of which
DiagIfDeviceCode caller (SYCL or CUDA) created the deferred diagnostic.
Restrict it to SYCL device compilation, its only real consumer
(SemaSYCL::DiagIfDeviceCode).

Fix clang/test/SemaHIP/amdgpu-builtin-in-lambda.hip
CMPLRLLVM-77209

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@wenju-he
wenju-he requested a review from a team as a code owner July 26, 2026 01:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant