
In interactive C++ it is convenient to roll back to a previous state of the compiler. For example: clang-repl> int x = 42; clang-repl> %undo clang-repl> float x = 24 // not an error To support this, the patch extends the functionality used to recover from errors and adds functionality to recover the low-level execution infrastructure. The current implementation is based on watermarks. It exploits the fact that at each incremental input the underlying compiler infrastructure is in a valid state. We can only go N incremental inputs back to a previous valid state. We do not need and do not do any further dependency tracking. This patch was co-developed with V. Vassilev, relies on the past work of Purva Chaudhari in clang-repl and is inspired by the past work on the same feature in the Cling interpreter. Co-authored-by: Purva-Chaudhari <purva.chaudhari02@gmail.com> Co-authored-by: Vassil Vassilev <v.g.vassilev@gmail.com> Signed-off-by: Jun Zhang <jun@junz.org>
14 lines
463 B
C++
14 lines
463 B
C++
// RUN: cat %s | clang-repl -Xcc -Xclang -Xcc -load -Xcc -Xclang \
|
|
// RUN: -Xcc %llvmshlibdir/PrintFunctionNames%pluginext -Xcc -Xclang\
|
|
// RUN: -Xcc -add-plugin -Xcc -Xclang -Xcc print-fns 2>&1 | FileCheck %s
|
|
// REQUIRES: host-supports-jit, plugins, examples
|
|
|
|
int i = 10;
|
|
extern "C" int printf(const char*,...);
|
|
auto r1 = printf("i = %d\n", i);
|
|
%quit
|
|
|
|
// CHECK: top-level-decl: "i"
|
|
// CHECK-NEXT: top-level-decl: "r1"
|
|
// CHECK-NEXT: i = 10
|