The intent of this patch is to selectively carry some states over to
the Builder so we won't lose the information of the previous symbols.
This used to be several downstream patches of Cling, it aims to fix
errors in Clang Interpreter when trying to use inline functions.
Before this patch:
clang-repl> inline int foo() { return 42;}
clang-repl> int x = foo();
JIT session error: Symbols not found: [ _Z3foov ]
error: Failed to materialize symbols:
{ (main, { x, $.incr_module_1.__inits.0, __orc_init_func.incr_module_1 }) }
Co-authored-by: Axel Naumann <Axel.Naumann@cern.ch>
Signed-off-by: Jun Zhang <jun@junz.org>
Differential Revision: https://reviews.llvm.org/D126781
21 lines
631 B
C++
21 lines
631 B
C++
// 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
|
|
// REQUIRES: host-supports-jit
|
|
// UNSUPPORTED: system-aix
|
|
// CHECK-DRIVER: i = 10
|
|
// RUN: cat %s | clang-repl | FileCheck %s
|
|
extern "C" int printf(const char *, ...);
|
|
int i = 42;
|
|
auto r1 = printf("i = %d\n", i);
|
|
// CHECK: i = 42
|
|
|
|
struct S { float f = 1.0; S *m = nullptr;} s;
|
|
|
|
auto r2 = printf("S[f=%f, m=0x%llx]\n", s.f, reinterpret_cast<unsigned long long>(s.m));
|
|
// CHECK-NEXT: S[f=1.000000, m=0x0]
|
|
|
|
inline int foo() { return 42; }
|
|
int r3 = foo();
|
|
|
|
quit
|