forked from OSchip/llvm-project
[Syntax] Test both the default and windows target platforms in unittests
Summary: This increases the coverage for things that differ between Linux and Windows, such as -fdelayed-template-parsing. This would have prevented the rollback of https://reviews.llvm.org/D76346. While at it, update -std=c++11 to c++17 for the test. Reviewers: gribozavr2 Reviewed By: gribozavr2 Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D76497
This commit is contained in:
parent
94061df6e5
commit
eddede9d51
|
@ -47,7 +47,9 @@ static llvm::ArrayRef<syntax::Token> tokens(syntax::Node *N) {
|
|||
class SyntaxTreeTest : public ::testing::Test {
|
||||
protected:
|
||||
// Build a syntax tree for the code.
|
||||
syntax::TranslationUnit *buildTree(llvm::StringRef Code) {
|
||||
syntax::TranslationUnit *
|
||||
buildTree(llvm::StringRef Code,
|
||||
const std::string &Target = "x86_64-pc-linux-gnu") {
|
||||
// FIXME: this code is almost the identical to the one in TokensTest. Share
|
||||
// it.
|
||||
class BuildSyntaxTree : public ASTConsumer {
|
||||
|
@ -98,9 +100,10 @@ protected:
|
|||
if (!Diags->getClient())
|
||||
Diags->setClient(new IgnoringDiagConsumer);
|
||||
// Prepare to run a compiler.
|
||||
std::vector<const char *> Args = {"syntax-test", "-std=c++11",
|
||||
"-fno-delayed-template-parsing",
|
||||
"-fsyntax-only", FileName};
|
||||
std::vector<const char *> Args = {
|
||||
"syntax-test", "-target", Target.c_str(),
|
||||
FileName, "-fsyntax-only", "-std=c++17",
|
||||
};
|
||||
Invocation = createInvocationFromCommandLine(Args, Diags, FS);
|
||||
assert(Invocation);
|
||||
Invocation->getFrontendOpts().DisableFree = false;
|
||||
|
@ -121,14 +124,30 @@ protected:
|
|||
return Root;
|
||||
}
|
||||
|
||||
void expectTreeDumpEqual(StringRef code, StringRef tree) {
|
||||
SCOPED_TRACE(code);
|
||||
void expectTreeDumpEqual(StringRef Code, StringRef Tree,
|
||||
bool RunWithDelayedTemplateParsing = true) {
|
||||
SCOPED_TRACE(Code);
|
||||
|
||||
auto *Root = buildTree(code);
|
||||
std::string Expected = tree.trim().str();
|
||||
std::string Actual =
|
||||
std::string(llvm::StringRef(Root->dump(*Arena)).trim());
|
||||
EXPECT_EQ(Expected, Actual) << "the resulting dump is:\n" << Actual;
|
||||
std::string Expected = Tree.trim().str();
|
||||
|
||||
// We want to run the test with -fdelayed-template-parsing enabled and
|
||||
// disabled, therefore we use these representative targets that differ in
|
||||
// the default value.
|
||||
// We are not passing -fdelayed-template-parsing directly but we are using
|
||||
// the `-target` to improve coverage and discover differences in behavior
|
||||
// early.
|
||||
for (const std::string Target :
|
||||
{"x86_64-pc-linux-gnu", "x86_64-pc-win32-msvc"}) {
|
||||
if (!RunWithDelayedTemplateParsing &&
|
||||
Target == "x86_64-pc-win32-msvc") {
|
||||
continue;
|
||||
}
|
||||
auto *Root = buildTree(Code, Target);
|
||||
std::string Actual = std::string(StringRef(Root->dump(*Arena)).trim());
|
||||
EXPECT_EQ(Expected, Actual)
|
||||
<< "for target " << Target << " the resulting dump is:\n"
|
||||
<< Actual;
|
||||
}
|
||||
}
|
||||
|
||||
// Adds a file to the test VFS.
|
||||
|
@ -794,7 +813,10 @@ template <class T> int fun() {}
|
|||
`-CompoundStatement
|
||||
|-{
|
||||
`-}
|
||||
)txt");
|
||||
)txt",
|
||||
// FIXME: Make this test work on windows by generating the expected Syntax
|
||||
// tree when -fdelayed-template-parsing is active.
|
||||
/*RunWithDelayedTemplateParsing=*/false);
|
||||
}
|
||||
|
||||
TEST_F(SyntaxTreeTest, NestedTemplates) {
|
||||
|
|
Loading…
Reference in New Issue