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> 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 > 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 > 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 (added) > +++ cfe/trunk/test/CodeGenOpenCLCXX/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 > 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