@@ -84,6 +84,38 @@ TEST(InterpreterTest, Evaluate) {
84
84
EXPECT_FALSE (HadError) ;
85
85
}
86
86
87
+ TEST (InterpreterTest, EvaluateExtensive) {
88
+ #ifdef EMSCRIPTEN
89
+ GTEST_SKIP () << " Test fails for Emscipten builds" ;
90
+ #endif
91
+ #ifdef _WIN32
92
+ GTEST_SKIP () << " Disabled on Windows. Needs fixing." ;
93
+ #endif
94
+ if (llvm::sys::RunningOnValgrind ())
95
+ GTEST_SKIP () << " XFAIL due to Valgrind report" ;
96
+ Cpp::CreateInterpreter ();
97
+ EXPECT_TRUE (Cpp::Evaluate (" __cplusplus" ) == 201402 );
98
+
99
+ bool HadError;
100
+ EXPECT_TRUE (Cpp::Evaluate (" #error" , &HadError) == (intptr_t )~0UL );
101
+ EXPECT_TRUE (HadError);
102
+ // for llvm < 19 this tests all different overloads of __clang_Interpreter_SetValueNoAlloc
103
+ EXPECT_EQ (Cpp::Evaluate (" int i = 11; ++i" , &HadError), 12 );
104
+ EXPECT_FALSE (HadError) ;
105
+ EXPECT_EQ (Cpp::Evaluate (" double a = 12.; a" , &HadError), 12 .);
106
+ EXPECT_FALSE (HadError) ;
107
+ EXPECT_EQ (Cpp::Evaluate (" float b = 13.; b" , &HadError), 13 .);
108
+ EXPECT_FALSE (HadError) ;
109
+ EXPECT_EQ (Cpp::Evaluate (" long double c = 14.; c" , &HadError), 14 .);
110
+ EXPECT_FALSE (HadError) ;
111
+ EXPECT_EQ (Cpp::Evaluate (" long double d = 15.; d" , &HadError), 15 .);
112
+ EXPECT_FALSE (HadError);
113
+ EXPECT_EQ (Cpp::Evaluate (" unsigned long long e = 16; e" , &HadError), 16 );
114
+ EXPECT_FALSE (HadError) ;
115
+ EXPECT_NE (Cpp::Evaluate (" struct S{} s; s" , &HadError), (intptr_t )~0UL );
116
+ EXPECT_FALSE (HadError) ;
117
+ }
118
+
87
119
TEST (InterpreterTest, DeleteInterpreter) {
88
120
auto * I1 = Cpp::CreateInterpreter ();
89
121
auto * I2 = Cpp::CreateInterpreter ();
0 commit comments