88 lines · cpp
1// REQUIRES: host-supports-jit, host-supports-out-of-process-jit, x86_64-linux2 3// RUN: cat %s | clang-repl -oop-executor -orc-runtime | FileCheck %s4 5extern "C" int printf(const char *, ...);6 7int intVar = 0;8double doubleVar = 3.14;9%undo10double doubleVar = 2.71;11 12auto r1 = printf("intVar = %d\n", intVar);13// CHECK: intVar = 014auto r2 = printf("doubleVar = %.2f\n", doubleVar);15// CHECK: doubleVar = 2.7116 17// Test redefinition with inline and static functions.18int add(int a, int b, int c) { return a + b + c; }19%undo // Revert to the initial version of add20inline int add(int a, int b) { return a + b; }21 22auto r3 = printf("add(1, 2) = %d\n", add(1, 2));23// CHECK-NEXT: add(1, 2) = 324 25// Test inline and lambda functions with variations.26inline int square(int x) { return x * x; }27auto lambdaSquare = [](int x) { return x * x; };28auto lambdaMult = [](int a, int b) { return a * b; };29 30auto r4 = printf("square(4) = %d\n", square(4));31// CHECK-NEXT: square(4) = 1632auto lambda_r1 = printf("lambdaSquare(5) = %d\n", lambdaSquare(5));33// CHECK-NEXT: lambdaSquare(5) = 2534auto lambda_r2 = printf("lambdaMult(2, 3) = %d\n", lambdaMult(2, 3));35// CHECK-NEXT: lambdaMult(2, 3) = 636 37%undo // Undo previous lambda assignments38auto lambda_r3 = lambdaMult(3, 4); // Should fail or revert to the original lambda39 40// Test weak and strong symbol linkage.41int __attribute__((weak)) weakFunc() { return 42; }42int strongFunc() { return 100; }43%undo // Revert the weak function44 45auto r5 = printf("weakFunc() = %d\n", weakFunc());46// CHECK: weakFunc() = 4247auto r6 = printf("strongFunc() = %d\n", strongFunc());48// CHECK-NEXT: strongFunc() = 10049 50// Weak variable linkage with different types.51int varA = 20;52static __typeof(varA) weakVarA __attribute__((__weakref__("varA")));53char charVar = 'c';54static __typeof(charVar) weakCharVar __attribute__((__weakref__("charVar")));55auto r7 = printf("weakVarA = %d\n", weakVarA);56// CHECK: weakVarA = 2057auto r8 = printf("weakCharVar = %c\n", weakCharVar);58// CHECK-NEXT: weakCharVar = c59 60// Test complex lambdas with captures.61int captureVar = 5;62auto captureLambda = [](int x) { return x + captureVar; };63int result1 = captureLambda(10);64%undo // Undo capture lambda65 66auto r9 = printf("captureLambda(10) = %d\n", result1);67// CHECK: captureLambda(10) = 1568 69// Multiline statement test with arithmetic operations.70int sum = \71 5 + \72 10;73int prod = sum * 2;74auto r10 = printf("sum = %d, prod = %d\n", sum, prod);75// CHECK: sum = 15, prod = 3076 77// Test multiline functions and macro behavior.78#define MULTIPLY(a, b) ((a) * (b))79 80int complexFunc(int x) \81{ \82 return MULTIPLY(x, 2) + x; \83}84 85auto r11 = printf("complexFunc(5) = %d\n", complexFunc(5));86// CHECK: complexFunc(5) = 1587 88%quit