@@ -83,6 +83,40 @@ TYPED_TEST(CppInterOpTest, InterpreterTestEvaluate) {
8383 EXPECT_FALSE (HadError) ;
8484}
8585
86+ TYPED_TEST (CppInterOpTest, InterpreterTestEvaluateExtensive) {
87+ #ifdef EMSCRIPTEN
88+ GTEST_SKIP () << " Test fails for Emscipten builds" ;
89+ #endif
90+ #ifdef _WIN32
91+ GTEST_SKIP () << " Disabled on Windows. Needs fixing." ;
92+ #endif
93+ if (llvm::sys::RunningOnValgrind ())
94+ GTEST_SKIP () << " XFAIL due to Valgrind report" ;
95+ if (TypeParam::isOutOfProcess)
96+ GTEST_SKIP () << " Test fails for OOP JIT builds" ;
97+
98+ Cpp::CreateInterpreter ();
99+ EXPECT_TRUE (Cpp::Evaluate (" __cplusplus" ) == 201402 );
100+
101+ bool HadError;
102+ EXPECT_TRUE (Cpp::Evaluate (" #error" , &HadError) == (intptr_t )~0UL );
103+ EXPECT_TRUE (HadError);
104+ // for llvm < 19 this tests different overloads of
105+ // __clang_Interpreter_SetValueNoAlloc
106+ EXPECT_EQ (Cpp::Evaluate (" double a = 12.; a" , &HadError), 12 .);
107+ EXPECT_FALSE (HadError);
108+ EXPECT_EQ (Cpp::Evaluate (" float b = 13.; b" , &HadError), 13 .);
109+ EXPECT_FALSE (HadError);
110+ EXPECT_EQ (Cpp::Evaluate (" long double c = 14.; c" , &HadError), 14 .);
111+ EXPECT_FALSE (HadError);
112+ EXPECT_EQ (Cpp::Evaluate (" long double d = 15.; d" , &HadError), 15 .);
113+ EXPECT_FALSE (HadError);
114+ EXPECT_EQ (Cpp::Evaluate (" unsigned long long e = 16; e" , &HadError), 16 );
115+ EXPECT_FALSE (HadError);
116+ EXPECT_NE (Cpp::Evaluate (" struct S{} s; s" , &HadError), (intptr_t )~0UL );
117+ EXPECT_FALSE (HadError);
118+ }
119+
86120TYPED_TEST (CppInterOpTest, InterpreterTestDeleteInterpreter) {
87121 if (TypeParam::isOutOfProcess)
88122 GTEST_SKIP () << " Test fails for OOP JIT builds" ;
0 commit comments