[clang] da5e298 - [Sema][NFC] simplify deduceOpenCLAddressSpace (#181253)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 13 10:18:28 PST 2026
Author: Jameson Nash
Date: 2026-02-13T13:18:23-05:00
New Revision: da5e298dcc1015f20ee5f6990bc88c372bd3a97f
URL: https://github.com/llvm/llvm-project/commit/da5e298dcc1015f20ee5f6990bc88c372bd3a97f
DIFF: https://github.com/llvm/llvm-project/commit/da5e298dcc1015f20ee5f6990bc88c372bd3a97f.diff
LOG: [Sema][NFC] simplify deduceOpenCLAddressSpace (#181253)
All callers of deduceOpenCLAddressSpace passed some sort of VarDecl
(such as a ParmVarDecl), so the dynamic cast and indentation was
unnecessary.
Added:
Modified:
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaDecl.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 9ae2fa52a441a..9424b80d5cdb6 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -4667,7 +4667,7 @@ class Sema final : public SemaBase {
/// Look for a locally scoped extern "C" declaration by the given name.
NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
- void deduceOpenCLAddressSpace(ValueDecl *decl);
+ void deduceOpenCLAddressSpace(VarDecl *decl);
void deduceHLSLAddressSpace(VarDecl *decl);
/// Adjust the \c DeclContext for a function or variable that might be a
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 7af6ce62d08dd..4dfde4bf8cedf 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -7050,45 +7050,43 @@ static void SetNestedNameSpecifier(Sema &S, DeclaratorDecl *DD, Declarator &D) {
DD->setQualifierInfo(SS.getWithLocInContext(S.Context));
}
-void Sema::deduceOpenCLAddressSpace(ValueDecl *Decl) {
- if (Decl->getType().hasAddressSpace())
+void Sema::deduceOpenCLAddressSpace(VarDecl *Var) {
+ QualType Type = Var->getType();
+ if (Type.hasAddressSpace())
return;
- if (Decl->getType()->isDependentType())
+ if (Type->isDependentType())
return;
- if (VarDecl *Var = dyn_cast<VarDecl>(Decl)) {
- QualType Type = Var->getType();
- if (Type->isSamplerT() || Type->isVoidType())
- return;
- LangAS ImplAS = LangAS::opencl_private;
- // OpenCL C v3.0 s6.7.8 - For OpenCL C 2.0 or with the
- // __opencl_c_program_scope_global_variables feature, the address space
- // for a variable at program scope or a static or extern variable inside
- // a function are inferred to be __global.
- if (getOpenCLOptions().areProgramScopeVariablesSupported(getLangOpts()) &&
- Var->hasGlobalStorage())
- ImplAS = LangAS::opencl_global;
- // If the original type from a decayed type is an array type and that array
- // type has no address space yet, deduce it now.
- if (auto DT = dyn_cast<DecayedType>(Type)) {
- auto OrigTy = DT->getOriginalType();
- if (!OrigTy.hasAddressSpace() && OrigTy->isArrayType()) {
- // Add the address space to the original array type and then propagate
- // that to the element type through `getAsArrayType`.
- OrigTy = Context.getAddrSpaceQualType(OrigTy, ImplAS);
- OrigTy = QualType(Context.getAsArrayType(OrigTy), 0);
- // Re-generate the decayed type.
- Type = Context.getDecayedType(OrigTy);
- }
- }
- Type = Context.getAddrSpaceQualType(Type, ImplAS);
- // Apply any qualifiers (including address space) from the array type to
- // the element type. This implements C99 6.7.3p8: "If the specification of
- // an array type includes any type qualifiers, the element type is so
- // qualified, not the array type."
- if (Type->isArrayType())
- Type = QualType(Context.getAsArrayType(Type), 0);
- Decl->setType(Type);
- }
+ if (Type->isSamplerT() || Type->isVoidType())
+ return;
+ LangAS ImplAS = LangAS::opencl_private;
+ // OpenCL C v3.0 s6.7.8 - For OpenCL C 2.0 or with the
+ // __opencl_c_program_scope_global_variables feature, the address space
+ // for a variable at program scope or a static or extern variable inside
+ // a function are inferred to be __global.
+ if (getOpenCLOptions().areProgramScopeVariablesSupported(getLangOpts()) &&
+ Var->hasGlobalStorage())
+ ImplAS = LangAS::opencl_global;
+ // If the original type from a decayed type is an array type and that array
+ // type has no address space yet, deduce it now.
+ if (auto DT = dyn_cast<DecayedType>(Type)) {
+ auto OrigTy = DT->getOriginalType();
+ if (!OrigTy.hasAddressSpace() && OrigTy->isArrayType()) {
+ // Add the address space to the original array type and then propagate
+ // that to the element type through `getAsArrayType`.
+ OrigTy = Context.getAddrSpaceQualType(OrigTy, ImplAS);
+ OrigTy = QualType(Context.getAsArrayType(OrigTy), 0);
+ // Re-generate the decayed type.
+ Type = Context.getDecayedType(OrigTy);
+ }
+ }
+ Type = Context.getAddrSpaceQualType(Type, ImplAS);
+ // Apply any qualifiers (including address space) from the array type to
+ // the element type. This implements C99 6.7.3p8: "If the specification of
+ // an array type includes any type qualifiers, the element type is so
+ // qualified, not the array type."
+ if (Type->isArrayType())
+ Type = QualType(Context.getAsArrayType(Type), 0);
+ Var->setType(Type);
}
static void checkWeakAttr(Sema &S, NamedDecl &ND) {
More information about the cfe-commits
mailing list