@@ -84,6 +84,38 @@ TEST(InterpreterTest, Evaluate) {
8484 EXPECT_FALSE (HadError) ;
8585}
8686
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+
87119TEST (InterpreterTest, DeleteInterpreter) {
88120 auto * I1 = Cpp::CreateInterpreter ();
89121 auto * I2 = Cpp::CreateInterpreter ();
0 commit comments