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

Reply via email to