Skip to content

Commit fab8aae

Browse files
authored
Fix diff
1 parent e08f20b commit fab8aae

File tree

1 file changed

+0
-200
lines changed

1 file changed

+0
-200
lines changed

clang/unittests/Interpreter/InterpreterTest.cpp

Lines changed: 0 additions & 200 deletions
Original file line numberDiff line numberDiff line change
@@ -310,206 +310,6 @@ TEST_F(InterpreterTest, InstantiateTemplate) {
310310
EXPECT_EQ(42, fn(NewA.getPtr()));
311311
}
312312

313-
TEST_F(InterpreterTest, Value) {
314-
// FIXME : This test doesn't current work for Emscripten builds.
315-
// It should be possible to make it work.For details on how it fails and
316-
// the current progress to enable this test see
317-
// the following Github issue https: //
318-
// github.com/llvm/llvm-project/issues/153461
319-
ECT_TRUE(!!RecoverErr);
320-
}
321-
322-
// Here we test whether the user can mix declarations and statements. The
323-
// interpreter should be smart enough to recognize the declarations from the
324-
// statements and wrap the latter into a declaration, producing valid code.
325-
326-
TEST_F(InterpreterTest, DeclsAndStatements) {
327-
Args ExtraArgs = {"-Xclang", "-diagnostic-log-file", "-Xclang", "-"};
328-
329-
// Create the diagnostic engine with unowned consumer.
330-
std::string DiagnosticOutput;
331-
llvm::raw_string_ostream DiagnosticsOS(DiagnosticOutput);
332-
DiagnosticOptions DiagOpts;
333-
auto DiagPrinter =
334-
std::make_unique<TextDiagnosticPrinter>(DiagnosticsOS, DiagOpts);
335-
336-
auto Interp = createInterpreter(ExtraArgs, DiagPrinter.get());
337-
auto R1 = Interp->Parse(
338-
"int var1 = 42; extern \"C\" int printf(const char*, ...);");
339-
// gtest doesn't expand into explicit bool conversions.
340-
EXPECT_TRUE(!!R1);
341-
342-
auto *PTU1 = R1->TUPart;
343-
EXPECT_EQ(2U, DeclsSize(PTU1));
344-
345-
auto R2 = Interp->Parse("var1++; printf(\"var1 value %d\\n\", var1);");
346-
EXPECT_TRUE(!!R2);
347-
}
348-
349-
TEST_F(InterpreterTest, UndoCommand) {
350-
// FIXME : This test doesn't current work for Emscripten builds.
351-
// It should be possible to make it work.For details on how it fails and
352-
// the current progress to enable this test see
353-
// the following Github issue https: //
354-
// github.com/llvm/llvm-project/issues/153461
355-
#ifdef __EMSCRIPTEN__
356-
GTEST_SKIP() << "Test fails for Emscipten builds";
357-
#endif
358-
Args ExtraArgs = {"-Xclang", "-diagnostic-log-file", "-Xclang", "-"};
359-
360-
// Create the diagnostic engine with unowned consumer.
361-
std::string DiagnosticOutput;
362-
llvm::raw_string_ostream DiagnosticsOS(DiagnosticOutput);
363-
DiagnosticOptions DiagOpts;
364-
auto DiagPrinter =
365-
std::make_unique<TextDiagnosticPrinter>(DiagnosticsOS, DiagOpts);
366-
367-
auto Interp = createInterpreter(ExtraArgs, DiagPrinter.get());
368-
369-
// Fail to undo.
370-
auto Err1 = Interp->Undo();
371-
EXPECT_EQ("Operation failed. No input left to undo",
372-
llvm::toString(std::move(Err1)));
373-
auto Err2 = Interp->Parse("int foo = 42;");
374-
EXPECT_TRUE(!!Err2);
375-
auto Err3 = Interp->Undo(2);
376-
EXPECT_EQ("Operation failed. Wanted to undo 2 inputs, only have 1.",
377-
llvm::toString(std::move(Err3)));
378-
379-
// Succeed to undo.
380-
auto Err4 = Interp->Parse("int x = 42;");
381-
EXPECT_TRUE(!!Err4);
382-
auto Err5 = Interp->Undo();
383-
EXPECT_FALSE(Err5);
384-
auto Err6 = Interp->Parse("int x = 24;");
385-
EXPECT_TRUE(!!Err6);
386-
auto Err7 = Interp->Parse("#define X 42");
387-
EXPECT_TRUE(!!Err7);
388-
auto Err8 = Interp->Undo();
389-
EXPECT_FALSE(Err8);
390-
auto Err9 = Interp->Parse("#define X 24");
391-
EXPECT_TRUE(!!Err9);
392-
393-
// Undo input contains errors.
394-
auto Err10 = Interp->Parse("int y = ;");
395-
EXPECT_FALSE(!!Err10);
396-
EXPECT_EQ("Parsing failed.", llvm::toString(Err10.takeError()));
397-
auto Err11 = Interp->Parse("int y = 42;");
398-
EXPECT_TRUE(!!Err11);
399-
auto Err12 = Interp->Undo();
400-
EXPECT_FALSE(Err12);
401-
}
402-
403-
static std::string MangleName(NamedDecl *ND) {
404-
ASTContext &C = ND->getASTContext();
405-
std::unique_ptr<MangleContext> MangleC(C.createMangleContext());
406-
std::string mangledName;
407-
llvm::raw_string_ostream RawStr(mangledName);
408-
MangleC->mangleName(ND, RawStr);
409-
return mangledName;
410-
}
411-
412-
TEST_F(InterpreterTest, FindMangledNameSymbol) {
413-
std::unique_ptr<Interpreter> Interp = createInterpreter();
414-
415-
auto &PTU(cantFail(Interp->Parse("int f(const char*) {return 0;}")));
416-
EXPECT_EQ(1U, DeclsSize(PTU.TUPart));
417-
auto R1DeclRange = PTU.TUPart->decls();
418-
419-
NamedDecl *FD = cast<FunctionDecl>(*R1DeclRange.begin());
420-
// Lower the PTU
421-
if (llvm::Error Err = Interp->Execute(PTU)) {
422-
// We cannot execute on the platform.
423-
consumeError(std::move(Err));
424-
return;
425-
}
426-
427-
std::string MangledName = MangleName(FD);
428-
auto Addr = Interp->getSymbolAddress(MangledName);
429-
EXPECT_FALSE(!Addr);
430-
EXPECT_NE(0U, Addr->getValue());
431-
GlobalDecl GD(FD);
432-
EXPECT_EQ(*Addr, cantFail(Interp->getSymbolAddress(GD)));
433-
cantFail(
434-
Interp->ParseAndExecute("extern \"C\" int printf(const char*,...);"));
435-
Addr = Interp->getSymbolAddress("printf");
436-
EXPECT_FALSE(!Addr);
437-
438-
// FIXME: Re-enable when we investigate the way we handle dllimports on Win.
439-
#ifndef _WIN32
440-
EXPECT_EQ((uintptr_t)&printf, Addr->getValue());
441-
#endif // _WIN32
442-
}
443-
444-
static Value AllocateObject(TypeDecl *TD, Interpreter &Interp) {
445-
std::string Name = TD->getQualifiedNameAsString();
446-
Value Addr;
447-
// FIXME: Consider providing an option in clang::Value to take ownership of
448-
// the memory created from the interpreter.
449-
// cantFail(Interp.ParseAndExecute("new " + Name + "()", &Addr));
450-
451-
// The lifetime of the temporary is extended by the clang::Value.
452-
cantFail(Interp.ParseAndExecute(Name + "()", &Addr));
453-
return Addr;
454-
}
455-
456-
static NamedDecl *LookupSingleName(Interpreter &Interp, const char *Name) {
457-
Sema &SemaRef = Interp.getCompilerInstance()->getSema();
458-
ASTContext &C = SemaRef.getASTContext();
459-
DeclarationName DeclName = &C.Idents.get(Name);
460-
LookupResult R(SemaRef, DeclName, SourceLocation(), Sema::LookupOrdinaryName);
461-
SemaRef.LookupName(R, SemaRef.TUScope);
462-
assert(!R.empty());
463-
return R.getFoundDecl();
464-
}
465-
466-
TEST_F(InterpreterTest, InstantiateTemplate) {
467-
// FIXME : This test doesn't current work for Emscripten builds.
468-
// It should be possible to make it work.For details on how it fails and
469-
// the current progress to enable this test see
470-
// the following Github issue https: //
471-
// github.com/llvm/llvm-project/issues/153461
472-
#ifdef __EMSCRIPTEN__
473-
GTEST_SKIP() << "Test fails for Emscipten builds";
474-
#endif
475-
// FIXME: We cannot yet handle delayed template parsing. If we run with
476-
// -fdelayed-template-parsing we try adding the newly created decl to the
477-
// active PTU which causes an assert.
478-
std::vector<const char *> Args = {"-fno-delayed-template-parsing"};
479-
std::unique_ptr<Interpreter> Interp = createInterpreter(Args);
480-
481-
llvm::cantFail(Interp->Parse("extern \"C\" int printf(const char*,...);"
482-
"class A {};"
483-
"struct B {"
484-
" template<typename T>"
485-
" static int callme(T) { return 42; }"
486-
"};"));
487-
auto &PTU = llvm::cantFail(Interp->Parse("auto _t = &B::callme<A*>;"));
488-
auto PTUDeclRange = PTU.TUPart->decls();
489-
EXPECT_EQ(1, std::distance(PTUDeclRange.begin(), PTUDeclRange.end()));
490-
491-
// Lower the PTU
492-
if (llvm::Error Err = Interp->Execute(PTU)) {
493-
// We cannot execute on the platform.
494-
consumeError(std::move(Err));
495-
return;
496-
}
497-
498-
TypeDecl *TD = cast<TypeDecl>(LookupSingleName(*Interp, "A"));
499-
Value NewA = AllocateObject(TD, *Interp);
500-
501-
// Find back the template specialization
502-
VarDecl *VD = static_cast<VarDecl *>(*PTUDeclRange.begin());
503-
UnaryOperator *UO = llvm::cast<UnaryOperator>(VD->getInit());
504-
NamedDecl *TmpltSpec = llvm::cast<DeclRefExpr>(UO->getSubExpr())->getDecl();
505-
506-
std::string MangledName = MangleName(TmpltSpec);
507-
typedef int (*TemplateSpecFn)(void *);
508-
auto fn =
509-
cantFail(Interp->getSymbolAddress(MangledName)).toPtr<TemplateSpecFn>();
510-
EXPECT_EQ(42, fn(NewA.getPtr()));
511-
}
512-
513313
TEST_F(InterpreterTest, Value) {
514314
// FIXME : This test doesn't current work for Emscripten builds.
515315
// It should be possible to make it work.For details on how it fails and

0 commit comments

Comments
 (0)