[PATCH] D156537: [CodeGen] Keep track of eagerly emitted globals

Jonas Hahnfeld via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 17 23:57:02 PDT 2023


Hahnfeld updated this revision to Diff 551401.
Hahnfeld added a comment.

Disable RTTI to (hopefully) avoid problems on Windows.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D156537/new/

https://reviews.llvm.org/D156537

Files:
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/test/Interpreter/inline-virtual.cpp


Index: clang/test/Interpreter/inline-virtual.cpp
===================================================================
--- /dev/null
+++ clang/test/Interpreter/inline-virtual.cpp
@@ -0,0 +1,24 @@
+// REQUIRES: host-supports-jit
+// UNSUPPORTED: system-aix
+//
+// We disable RTTI to avoid problems on Windows for non-RTTI builds of LLVM
+// where the JIT cannot find ??_7type_info@@6B at .
+// RUN: cat %s | clang-repl -Xcc -fno-rtti | FileCheck %s
+// RUN: cat %s | clang-repl -Xcc -fno-rtti -Xcc -O2 | FileCheck %s
+
+extern "C" int printf(const char *, ...);
+
+struct A { int a; A(int a) : a(a) {} virtual ~A(); };
+
+// Then define the virtual destructor as inline out-of-line, in a separate
+// PartialTranslationUnit.
+inline A::~A() { printf("~A(%d)\n", a); }
+
+// Create one instance with new and delete it.
+A *a1 = new A(1);
+delete a1;
+// CHECK: ~A(1)
+
+// Also create one global that will be auto-destructed.
+A a2(2);
+// CHECK: ~A(2)
Index: clang/lib/CodeGen/CodeGenModule.cpp
===================================================================
--- clang/lib/CodeGen/CodeGenModule.cpp
+++ clang/lib/CodeGen/CodeGenModule.cpp
@@ -3658,6 +3658,7 @@
   if (MustBeEmitted(Global) && MayBeEmittedEagerly(Global)) {
     // Emit the definition if it can't be deferred.
     EmitGlobalDefinition(GD);
+    addEmittedDeferredDecl(GD);
     return;
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156537.551401.patch
Type: text/x-patch
Size: 1360 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230818/e3be59b3/attachment-0001.bin>


More information about the cfe-commits mailing list