Hi Benjamin,
Thanks for reporting the issues, I think this should fix it: diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 1fe553000b..9ff631401f 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -7201,7 +7201,7 @@ static void deduceOpenCLImplicitAddrSpace(TypeProcessingState &State, (T->isVoidType() && !IsPointee)) return; - LangAS ImpAddr; + LangAS ImpAddr = LangAS::Default; // Put OpenCL automatic variable in private address space. // OpenCL v1.2 s6.5: // The default address space name for arguments to a function in a I am trying to reproduce and test the problem now to commit the fix. Cheers, Anastasia ________________________________ From: Benjamin Kramer <benny....@gmail.com> Sent: 19 November 2018 11:08 To: Anastasia Stulova Cc: cfe-commits Subject: Re: r347189 - [OpenCL] Fix address space deduction in template args. clang gives me this: llvm/tools/clang/lib/Sema/SemaType.cpp:7230:11: error: variable 'ImpAddr' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized] if (D.getContext() == DeclaratorContext::TemplateArgContext) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ llvm/tools/clang/lib/Sema/SemaType.cpp:7244:55: note: uninitialized use occurs here T = State.getSema().Context.getAddrSpaceQualType(T, ImpAddr); ^~~~~~~ llvm/tools/clang/lib/Sema/SemaType.cpp:7230:7: note: remove the 'if' if its condition is always false if (D.getContext() == DeclaratorContext::TemplateArgContext) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ llvm/tools/clang/lib/Sema/SemaType.cpp:7208:3: note: variable 'ImpAddr' is declared here LangAS ImpAddr; On Mon, Nov 19, 2018 at 12:02 PM Anastasia Stulova via cfe-commits <cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org>> wrote: Author: stulova Date: Mon Nov 19 03:00:14 2018 New Revision: 347189 URL: http://llvm.org/viewvc/llvm-project?rev=347189&view=rev Log: [OpenCL] Fix address space deduction in template args. Don't deduce address spaces for non-pointer-like types in template args. Fixes PR38603! Differential Revision: https://reviews.llvm.org/D54634 Added: cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl<http://template-address-spaces.cl> Modified: cfe/trunk/lib/Sema/SemaType.cpp Modified: cfe/trunk/lib/Sema/SemaType.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=347189&r1=347188&r2=347189&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaType.cpp (original) +++ cfe/trunk/lib/Sema/SemaType.cpp Mon Nov 19 03:00:14 2018 @@ -7227,7 +7227,9 @@ static void deduceOpenCLImplicitAddrSpac if (IsPointee) { ImpAddr = LangAS::opencl_generic; } else { - if (D.getContext() == DeclaratorContext::FileContext) { + if (D.getContext() == DeclaratorContext::TemplateArgContext) { + // Do not deduce address space for non-pointee type in template args + } else if (D.getContext() == DeclaratorContext::FileContext) { ImpAddr = LangAS::opencl_global; } else { if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static || Added: cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl<http://template-address-spaces.cl> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl?rev=347189&view=auto ============================================================================== --- cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl<http://template-address-spaces.cl> (added) +++ cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl<http://template-address-spaces.cl> Mon Nov 19 03:00:14 2018 @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -cl-std=c++ %s -emit-llvm -o - -O0 -triple spir-unknown-unknown | FileCheck %s + +template <typename T> +struct S{ + T a; + T foo(); +}; + +template<typename T> +T S<T>::foo() { return a;} + +//CHECK: %struct.S = type { i32 } +//CHECK: %struct.S.0 = type { i32 addrspace(4)* } +//CHECK: %struct.S.1 = type { i32 addrspace(1)* } + +//CHECK: i32 @_ZN1SIiE3fooEv(%struct.S* %this) +//CHECK: i32 addrspace(4)* @_ZN1SIPU3AS4iE3fooEv(%struct.S.0* %this) +//CHECK: i32 addrspace(1)* @_ZN1SIPU3AS1iE3fooEv(%struct.S.1* %this) + +void bar(){ + S<int> sint; + S<int*> sintptr; + S<__global int*> sintptrgl; + // FIXME: Preserve AS in TreeTransform + //S<__global int> sintgl; + + sint.foo(); + sintptr.foo(); + sintptrgl.foo(); + //sintgl.foo(); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits