[clang-repl] Do not assert if we have weak references left.
authorVassil Vassilev <v.g.vassilev@gmail.com>
Sun, 30 Apr 2023 17:23:04 +0000 (17:23 +0000)
committerVassil Vassilev <v.g.vassilev@gmail.com>
Mon, 8 May 2023 09:13:00 +0000 (09:13 +0000)
Non-incremental Clang can also exit with the WeakRefReferences not empty upon
such example. This patch makes clang-repl consistent to what Clang does.

Differential revision: https://reviews.llvm.org/D148435

clang/lib/CodeGen/CodeGenModule.cpp
clang/test/Interpreter/execute-weak.cpp

index 367f802..7534304 100644 (file)
@@ -7230,7 +7230,6 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) {
          "Newly created module should not have manglings");
   NewBuilder->Manglings = std::move(Manglings);
 
-  assert(WeakRefReferences.empty() && "Not all WeakRefRefs have been applied");
   NewBuilder->WeakRefReferences = std::move(WeakRefReferences);
 
   NewBuilder->TBAA = std::move(TBAA);
index 5b34351..66f2214 100644 (file)
@@ -2,11 +2,17 @@
 // RUN: clang-repl "int i = 10;" 'extern "C" int printf(const char*,...);' \
 // RUN:            'auto r1 = printf("i = %d\n", i);' | FileCheck --check-prefix=CHECK-DRIVER %s
 // CHECK-DRIVER: i = 10
+//
 // UNSUPPORTED: system-aix, system-windows
 // RUN: cat %s | clang-repl | FileCheck %s
+
 extern "C" int printf(const char *, ...);
 int __attribute__((weak)) bar() { return 42; }
 auto r4 = printf("bar() = %d\n", bar());
 // CHECK: bar() = 42
 
+int a = 12;
+static __typeof(a) b __attribute__((__weakref__("a")));
+int c = b;
+
 %quit