JOE1994 wrote: > May it be possible that the wrapper function's return type is invalid and the > cast isn't needed?
LLVM-IR (from llvm without assertions, before this revision) shows that the wrapper function returns `ptr` while `MyGlobVar` has `addrspace(1)`. ```llvm $thread-local wrapper routine for MyGlobVar = comdat any @MyGlobVar = external thread_local addrspace(1) global i32, align 4 @__oclc_ABI_version = weak_odr hidden local_unnamed_addr addrspace(4) constant i32 500 define weak_odr hidden noundef ptr @thread-local wrapper routine for MyGlobVar() local_unnamed_addr #0 comdat { %1 = tail call align 4 ptr addrspace(1) @llvm.threadlocal.address.p1(ptr addrspace(1) align 4 @MyGlobVar) ret ptr addrspace(1) %1 } declare nonnull ptr addrspace(1) @llvm.threadlocal.address.p1(ptr addrspace(1) nonnull) #1 attributes #0 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="gfx906" "target-features"="+16-bit-insts,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx9-insts,+s-memrealtime,+s-memtime-inst,+wavefrontsize64" "uniform-work-group-size"="false" } attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) } ``` Updating the wrapper function's return type as below also fixes the error: ```diff --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -3078,6 +3078,10 @@ ItaniumCXXABI::getOrCreateThreadLocalWrapper(const VarDecl *VD, getContext().getPointerType(RetQT), FunctionArgList()); llvm::FunctionType *FnTy = CGM.getTypes().GetFunctionType(FI); + // Adjust wrapper function's ret type to have matching llvm addrspace with Val. + if (llvm::Type *WrapperRetTy = FnTy->getReturnType(); + WrapperRetTy->isPointerTy() && Val->getType()->isPointerTy() && WrapperRetTy != Val->getType()) + FnTy = llvm::FunctionType::get(Val->getType(), FnTy->params(), FnTy->isVarArg()); llvm::Function *Wrapper = llvm::Function::Create(FnTy, getThreadLocalWrapperLinkage(VD, CGM), WrapperName.str(), &CGM.getModule()); ``` https://github.com/llvm/llvm-project/pull/119246 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits