https://github.com/linuxrocks123 updated https://github.com/llvm/llvm-project/pull/200942
>From b9175405a1103751becac80b1ad38525f237fece Mon Sep 17 00:00:00 2001 From: Patrick Simmons <[email protected]> Date: Mon, 1 Jun 2026 16:27:48 -0500 Subject: [PATCH 1/3] Emitting VTables across multiple TUs. Make them weak. --- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 87e9824e677ba..8f0630fdc3403 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -1849,6 +1849,9 @@ void CGOpenMPRuntime::emitAndRegisterVTable(CodeGenModule &CGM, CGM.EmitVTable(CXXRecord); CodeGenVTables VTables = CGM.getVTables(); llvm::GlobalVariable *VTablesAddr = VTables.GetAddrOfVTable(CXXRecord); + // Must set VTables to weak since we're emitting them in multiple TUs now + if(!VTablesAddr->hasWeakLinkage()) + VTablesAddr->setLinkage(llvm::GlobalValue::WeakODRLinkage); assert(VTablesAddr && "Expected non-null VTable address"); CGM.getOpenMPRuntime().registerVTableOffloadEntry(VTablesAddr, VD); // Emit VTable for all the fields containing dynamic CXXRecord >From 2ce8df629761931053b54bed9c2ec02cd2a8442f Mon Sep 17 00:00:00 2001 From: Patrick Simmons <[email protected]> Date: Mon, 1 Jun 2026 16:30:08 -0500 Subject: [PATCH 2/3] Fix formatting --- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 8f0630fdc3403..5d666d205a680 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -1850,7 +1850,7 @@ void CGOpenMPRuntime::emitAndRegisterVTable(CodeGenModule &CGM, CodeGenVTables VTables = CGM.getVTables(); llvm::GlobalVariable *VTablesAddr = VTables.GetAddrOfVTable(CXXRecord); // Must set VTables to weak since we're emitting them in multiple TUs now - if(!VTablesAddr->hasWeakLinkage()) + if (!VTablesAddr->hasWeakLinkage()) VTablesAddr->setLinkage(llvm::GlobalValue::WeakODRLinkage); assert(VTablesAddr && "Expected non-null VTable address"); CGM.getOpenMPRuntime().registerVTableOffloadEntry(VTablesAddr, VD); >From 7496a3d825366102abee8b518ff56121f1de5e9d Mon Sep 17 00:00:00 2001 From: Patrick Simmons <[email protected]> Date: Mon, 1 Jun 2026 16:50:55 -0500 Subject: [PATCH 3/3] Restrict linkage reset to vtables with ExternalLinkage only --- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 5d666d205a680..ab36b7b8d0c5b 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -1850,7 +1850,7 @@ void CGOpenMPRuntime::emitAndRegisterVTable(CodeGenModule &CGM, CodeGenVTables VTables = CGM.getVTables(); llvm::GlobalVariable *VTablesAddr = VTables.GetAddrOfVTable(CXXRecord); // Must set VTables to weak since we're emitting them in multiple TUs now - if (!VTablesAddr->hasWeakLinkage()) + if (VTablesAddr->hasExternalLinkage()) VTablesAddr->setLinkage(llvm::GlobalValue::WeakODRLinkage); assert(VTablesAddr && "Expected non-null VTable address"); CGM.getOpenMPRuntime().registerVTableOffloadEntry(VTablesAddr, VD); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
