https://github.com/wenju-he updated https://github.com/llvm/llvm-project/pull/181602
>From 2b014e12d738f03e1a6b17eae3f61c8401e287b5 Mon Sep 17 00:00:00 2001 From: Wenju He <[email protected]> Date: Mon, 16 Feb 2026 07:18:28 +0100 Subject: [PATCH 1/2] [OpenCL] Suppress -Wreturn-stack-address for function-scope local variable when __cl_clang_function_scope_local_variables extension is enabled. OpenCL local variable has lifetime of work-group, not function call stack. --- clang/lib/Sema/CheckExprLifetime.cpp | 7 +++++++ .../test/SemaOpenCL/function-scope-local-return.cl | 13 +++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 clang/test/SemaOpenCL/function-scope-local-return.cl diff --git a/clang/lib/Sema/CheckExprLifetime.cpp b/clang/lib/Sema/CheckExprLifetime.cpp index 5d4b4508541b7..c2f2aa8fc9487 100644 --- a/clang/lib/Sema/CheckExprLifetime.cpp +++ b/clang/lib/Sema/CheckExprLifetime.cpp @@ -1337,6 +1337,13 @@ checkExprLifetimeImpl(Sema &SemaRef, const InitializedEntity *InitEntity, // expression. if (LK == LK_StmtExprResult) return false; + if (auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) { + if (VD->getType().getAddressSpace() == LangAS::opencl_local && + SemaRef.getOpenCLOptions().isAvailableOption( + "__cl_clang_function_scope_local_variables", + SemaRef.getLangOpts())) + return false; + } SemaRef.Diag(DiagLoc, diag::warn_ret_stack_addr_ref) << InitEntity->getType()->isReferenceType() << DRE->getDecl() << isa<ParmVarDecl>(DRE->getDecl()) << (LK == LK_MustTail) diff --git a/clang/test/SemaOpenCL/function-scope-local-return.cl b/clang/test/SemaOpenCL/function-scope-local-return.cl new file mode 100644 index 0000000000000..1de86b4293a9a --- /dev/null +++ b/clang/test/SemaOpenCL/function-scope-local-return.cl @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=CL3.0 + +// Check returning a pointer to a local address space variable does not warn +// if __cl_clang_function_scope_local_variables extension is enabled. + +// expected-no-diagnostics + +#pragma OPENCL EXTENSION __cl_clang_function_scope_local_variables : enable + +local int* get_group_scratch() { + local int data[64]; + return data; +} >From 69dadbb4ffda1af0d1bc0e268facb0a6bc29ad76 Mon Sep 17 00:00:00 2001 From: Wenju He <[email protected]> Date: Thu, 19 Feb 2026 03:51:17 +0100 Subject: [PATCH 2/2] drop __cl_clang_function_scope_local_variables check --- clang/lib/Sema/CheckExprLifetime.cpp | 8 ++------ clang/test/SemaOpenCL/function-scope-local-return.cl | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/clang/lib/Sema/CheckExprLifetime.cpp b/clang/lib/Sema/CheckExprLifetime.cpp index c2f2aa8fc9487..4e050e9bf6045 100644 --- a/clang/lib/Sema/CheckExprLifetime.cpp +++ b/clang/lib/Sema/CheckExprLifetime.cpp @@ -1337,13 +1337,9 @@ checkExprLifetimeImpl(Sema &SemaRef, const InitializedEntity *InitEntity, // expression. if (LK == LK_StmtExprResult) return false; - if (auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) { - if (VD->getType().getAddressSpace() == LangAS::opencl_local && - SemaRef.getOpenCLOptions().isAvailableOption( - "__cl_clang_function_scope_local_variables", - SemaRef.getLangOpts())) + if (auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) + if (VD->getType().getAddressSpace() == LangAS::opencl_local) return false; - } SemaRef.Diag(DiagLoc, diag::warn_ret_stack_addr_ref) << InitEntity->getType()->isReferenceType() << DRE->getDecl() << isa<ParmVarDecl>(DRE->getDecl()) << (LK == LK_MustTail) diff --git a/clang/test/SemaOpenCL/function-scope-local-return.cl b/clang/test/SemaOpenCL/function-scope-local-return.cl index 1de86b4293a9a..8b3c5e6cbe2f0 100644 --- a/clang/test/SemaOpenCL/function-scope-local-return.cl +++ b/clang/test/SemaOpenCL/function-scope-local-return.cl @@ -1,7 +1,7 @@ // RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=CL3.0 -// Check returning a pointer to a local address space variable does not warn -// if __cl_clang_function_scope_local_variables extension is enabled. +// Check tjat returning a pointer to a local address space variable does not +// trigger -Wreturn-stack-address. // expected-no-diagnostics _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
