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

Reply via email to