https://github.com/anutosh491 updated 
https://github.com/llvm/llvm-project/pull/166368

>From 560ccf47c2cb4b56c4dbf805e89c323ba31af41a Mon Sep 17 00:00:00 2001
From: anutosh491 <[email protected]>
Date: Tue, 4 Nov 2025 18:30:09 +0530
Subject: [PATCH 1/3] Fix inconsistent flushing between in-process and
 out-of-process

---
 clang/lib/Interpreter/Interpreter.cpp | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/clang/lib/Interpreter/Interpreter.cpp 
b/clang/lib/Interpreter/Interpreter.cpp
index cde354c9cd8d1..f3927fc341341 100644
--- a/clang/lib/Interpreter/Interpreter.cpp
+++ b/clang/lib/Interpreter/Interpreter.cpp
@@ -351,6 +351,15 @@ const char *const Runtimes = R"(
   EXTERN_C void __clang_Interpreter_SetValueNoAlloc(void *This, void *OutVal, 
void *OpaqueType, ...);
 )";
 
+const char *const OOPRuntimes = R"(
+  #include <stdio.h>
+  __attribute__((constructor))
+  static void __clang_repl_ioinit(void) {
+    setvbuf(stdout, NULL, _IONBF, 0);
+    setvbuf(stderr, NULL, _IONBF, 0);
+  }
+)";
+
 llvm::Expected<std::pair<std::unique_ptr<llvm::orc::LLJITBuilder>, uint32_t>>
 Interpreter::outOfProcessJITBuilder(JITConfig Config) {
   std::unique_ptr<llvm::orc::ExecutorProcessControl> EPC;
@@ -463,6 +472,11 @@ Interpreter::create(std::unique_ptr<CompilerInstance> CI, 
JITConfig Config) {
   if (auto E = Interp->ParseAndExecute(Runtimes))
     return std::move(E);
 
+  if (Config.IsOutOfProcess) {
+    if (auto E = Interp->ParseAndExecute(OOPRuntimes))
+      return std::move(E);
+  }
+
   Interp->markUserCodeStart();
 
   return std::move(Interp);

>From 54f577c9131f54815fad71e9b5ef932adc1bb288 Mon Sep 17 00:00:00 2001
From: anutosh491 <[email protected]>
Date: Thu, 6 Nov 2025 13:11:13 +0530
Subject: [PATCH 2/3] Initialize streams to be unbuffered

---
 clang/lib/Interpreter/Interpreter.cpp | 14 --------------
 clang/tools/clang-repl/ClangRepl.cpp  | 14 ++++++++++++++
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/clang/lib/Interpreter/Interpreter.cpp 
b/clang/lib/Interpreter/Interpreter.cpp
index f3927fc341341..cde354c9cd8d1 100644
--- a/clang/lib/Interpreter/Interpreter.cpp
+++ b/clang/lib/Interpreter/Interpreter.cpp
@@ -351,15 +351,6 @@ const char *const Runtimes = R"(
   EXTERN_C void __clang_Interpreter_SetValueNoAlloc(void *This, void *OutVal, 
void *OpaqueType, ...);
 )";
 
-const char *const OOPRuntimes = R"(
-  #include <stdio.h>
-  __attribute__((constructor))
-  static void __clang_repl_ioinit(void) {
-    setvbuf(stdout, NULL, _IONBF, 0);
-    setvbuf(stderr, NULL, _IONBF, 0);
-  }
-)";
-
 llvm::Expected<std::pair<std::unique_ptr<llvm::orc::LLJITBuilder>, uint32_t>>
 Interpreter::outOfProcessJITBuilder(JITConfig Config) {
   std::unique_ptr<llvm::orc::ExecutorProcessControl> EPC;
@@ -472,11 +463,6 @@ Interpreter::create(std::unique_ptr<CompilerInstance> CI, 
JITConfig Config) {
   if (auto E = Interp->ParseAndExecute(Runtimes))
     return std::move(E);
 
-  if (Config.IsOutOfProcess) {
-    if (auto E = Interp->ParseAndExecute(OOPRuntimes))
-      return std::move(E);
-  }
-
   Interp->markUserCodeStart();
 
   return std::move(Interp);
diff --git a/clang/tools/clang-repl/ClangRepl.cpp 
b/clang/tools/clang-repl/ClangRepl.cpp
index c7879422cd7df..530955b31814e 100644
--- a/clang/tools/clang-repl/ClangRepl.cpp
+++ b/clang/tools/clang-repl/ClangRepl.cpp
@@ -352,6 +352,20 @@ int main(int argc, const char **argv) {
     Interp = ExitOnErr(clang::Interpreter::create(std::move(CI), Config));
   }
 
+  if (Config.IsOutOfProcess) {
+    static const char *const InitUnbufferedStreams = R"(
+      #include <stdio.h>
+      __attribute__((constructor))
+      static void __clang_repl_ioinit(void) {
+        setvbuf(stdout, NULL, _IONBF, 0);
+        setvbuf(stderr, NULL, _IONBF, 0);
+      }
+    )";
+
+    if (auto Err = Interp->ParseAndExecute(InitUnbufferedStreams))
+      llvm::logAllUnhandledErrors(std::move(Err), llvm::errs(), "error: ");
+  }
+
   bool HasError = false;
 
   for (const std::string &input : OptInputs) {

>From 181acda02109a1fca7f6e88654426788b14154c4 Mon Sep 17 00:00:00 2001
From: anutosh491 <[email protected]>
Date: Thu, 6 Nov 2025 13:39:08 +0530
Subject: [PATCH 3/3] Add tests

---
 clang/test/Interpreter/out-of-process.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/clang/test/Interpreter/out-of-process.cpp 
b/clang/test/Interpreter/out-of-process.cpp
index 6922ca6e82053..cfbca644cdc90 100644
--- a/clang/test/Interpreter/out-of-process.cpp
+++ b/clang/test/Interpreter/out-of-process.cpp
@@ -4,6 +4,11 @@
 
 extern "C" int printf(const char *, ...);
 
+printf("FLUSH_START");
+// CHECK: FLUSH_START
+printf("\nFLUSH_OK\n");
+// CHECK: FLUSH_OK
+
 int intVar = 0;
 double doubleVar = 3.14;
 %undo
@@ -85,4 +90,7 @@ int complexFunc(int x) \
 auto r11 = printf("complexFunc(5) = %d\n", complexFunc(5));
 // CHECK: complexFunc(5) = 15
 
+printf("FINAL_FLUSH");
+// CHECK: FINAL_FLUSH
+
 %quit
\ No newline at end of file

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to