[clang] 6dc06fa - [SyntaxTree] Add tests for the assignment of the `canModify` tag.
Eduardo Caldas via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 22 06:17:44 PDT 2020
Author: Eduardo Caldas
Date: 2020-09-22T13:17:33Z
New Revision: 6dc06fa09d1a259df1f897dc821ba1544e2bcd24
URL: https://github.com/llvm/llvm-project/commit/6dc06fa09d1a259df1f897dc821ba1544e2bcd24
DIFF: https://github.com/llvm/llvm-project/commit/6dc06fa09d1a259df1f897dc821ba1544e2bcd24.diff
LOG: [SyntaxTree] Add tests for the assignment of the `canModify` tag.
Differential Revision: https://reviews.llvm.org/D88077
Added:
Modified:
clang/unittests/Tooling/Syntax/BuildTreeTest.cpp
Removed:
################################################################################
diff --git a/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp b/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp
index 52bd5988b44ec..ecb4a7ce73a50 100644
--- a/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp
+++ b/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp
@@ -3855,8 +3855,76 @@ TranslationUnit Detached
)txt"));
}
-TEST_P(BuildSyntaxTreeTest, NonModifiableNodes) {
- // Some nodes are non-modifiable, they are marked with 'I:'.
+TEST_P(BuildSyntaxTreeTest, Macro_ObjectLike_Leaf) {
+ // All nodes can be mutated.
+ EXPECT_TRUE(treeDumpEqual(
+ R"cpp(
+#define OPEN {
+#define CLOSE }
+
+void test() {
+ OPEN
+ 1;
+ CLOSE
+
+ OPEN
+ 2;
+ }
+}
+)cpp",
+ R"txt(
+TranslationUnit Detached
+`-SimpleDeclaration
+ |-'void'
+ |-SimpleDeclarator Declarator
+ | |-'test'
+ | `-ParametersAndQualifiers
+ | |-'(' OpenParen
+ | `-')' CloseParen
+ `-CompoundStatement
+ |-'{' OpenParen
+ |-CompoundStatement Statement
+ | |-'{' OpenParen
+ | |-ExpressionStatement Statement
+ | | |-IntegerLiteralExpression Expression
+ | | | `-'1' LiteralToken
+ | | `-';'
+ | `-'}' CloseParen
+ |-CompoundStatement Statement
+ | |-'{' OpenParen
+ | |-ExpressionStatement Statement
+ | | |-IntegerLiteralExpression Expression
+ | | | `-'2' LiteralToken
+ | | `-';'
+ | `-'}' CloseParen
+ `-'}' CloseParen
+)txt"));
+}
+
+TEST_P(BuildSyntaxTreeTest, Macro_ObjectLike_MatchTree) {
+ // Some nodes are unmodifiable, they are marked with 'unmodifiable'.
+ EXPECT_TRUE(treeDumpEqual(
+ R"cpp(
+#define BRACES {}
+
+void test() BRACES
+)cpp",
+ R"txt(
+TranslationUnit Detached
+`-SimpleDeclaration
+ |-'void'
+ |-SimpleDeclarator Declarator
+ | |-'test'
+ | `-ParametersAndQualifiers
+ | |-'(' OpenParen
+ | `-')' CloseParen
+ `-CompoundStatement
+ |-'{' OpenParen unmodifiable
+ `-'}' CloseParen unmodifiable
+)txt"));
+}
+
+TEST_P(BuildSyntaxTreeTest, Macro_ObjectLike_MismatchTree) {
EXPECT_TRUE(treeDumpEqual(
R"cpp(
#define HALF_IF if (1+
@@ -3896,21 +3964,16 @@ TranslationUnit Detached
)txt"));
}
-TEST_P(BuildSyntaxTreeTest, ModifiableNodes) {
- // All nodes can be mutated.
+TEST_P(BuildSyntaxTreeTest, Macro_FunctionLike_ModifiableArguments) {
+ // FIXME: Note that the substitutions for `X` and `Y` are marked modifiable.
+ // However we cannot change `X` freely. Indeed if we change its substitution
+ // in the condition we should also change it the then-branch.
EXPECT_TRUE(treeDumpEqual(
R"cpp(
-#define OPEN {
-#define CLOSE }
+#define MIN(X,Y) X < Y ? X : Y
void test() {
- OPEN
- 1;
- CLOSE
-
- OPEN
- 2;
- }
+ MIN(1,2);
}
)cpp",
R"txt(
@@ -3924,24 +3987,109 @@ TranslationUnit Detached
| `-')' CloseParen
`-CompoundStatement
|-'{' OpenParen
- |-CompoundStatement Statement
- | |-'{' OpenParen
- | |-ExpressionStatement Statement
- | | |-IntegerLiteralExpression Expression
+ |-ExpressionStatement Statement
+ | |-UnknownExpression Expression
+ | | |-BinaryOperatorExpression unmodifiable
+ | | | |-IntegerLiteralExpression LeftHandSide
+ | | | | `-'1' LiteralToken
+ | | | |-'<' OperatorToken unmodifiable
+ | | | `-IntegerLiteralExpression RightHandSide
+ | | | `-'2' LiteralToken
+ | | |-'?' unmodifiable
+ | | |-IntegerLiteralExpression
| | | `-'1' LiteralToken
- | | `-';'
- | `-'}' CloseParen
- |-CompoundStatement Statement
- | |-'{' OpenParen
- | |-ExpressionStatement Statement
- | | |-IntegerLiteralExpression Expression
- | | | `-'2' LiteralToken
- | | `-';'
- | `-'}' CloseParen
+ | | |-':' unmodifiable
+ | | `-IntegerLiteralExpression
+ | | `-'2' LiteralToken
+ | `-';'
`-'}' CloseParen
)txt"));
}
+TEST_P(BuildSyntaxTreeTest, Macro_FunctionLike_MismatchTree) {
+ EXPECT_TRUE(treeDumpEqual(
+ R"cpp(
+#define HALF_IF(X) if (X &&
+#define HALF_IF_2(Y) Y) {}
+void test() {
+ HALF_IF(1) HALF_IF_2(0) else {}
+})cpp",
+ R"txt(
+TranslationUnit Detached
+`-SimpleDeclaration
+ |-'void'
+ |-SimpleDeclarator Declarator
+ | |-'test'
+ | `-ParametersAndQualifiers
+ | |-'(' OpenParen
+ | `-')' CloseParen
+ `-CompoundStatement
+ |-'{' OpenParen
+ |-IfStatement Statement
+ | |-'if' IntroducerKeyword unmodifiable
+ | |-'(' unmodifiable
+ | |-BinaryOperatorExpression unmodifiable
+ | | |-IntegerLiteralExpression LeftHandSide
+ | | | `-'1' LiteralToken
+ | | |-'&&' OperatorToken unmodifiable
+ | | `-IntegerLiteralExpression RightHandSide
+ | | `-'0' LiteralToken
+ | |-')' unmodifiable
+ | |-CompoundStatement ThenStatement unmodifiable
+ | | |-'{' OpenParen unmodifiable
+ | | `-'}' CloseParen unmodifiable
+ | |-'else' ElseKeyword
+ | `-CompoundStatement ElseStatement
+ | |-'{' OpenParen
+ | `-'}' CloseParen
+ `-'}' CloseParen
+)txt"));
+}
+
+TEST_P(BuildSyntaxTreeTest, Macro_FunctionLike_Variadic) {
+ EXPECT_TRUE(treeDumpEqualOnAnnotations(
+ R"cpp(
+#define CALL(F_NAME, ...) F_NAME(__VA_ARGS__)
+
+void f(int);
+void g(int, int);
+void test() [[{
+ CALL(f, 0);
+ CALL(g, 0, 1);
+}]]
+)cpp",
+ {R"txt(
+CompoundStatement
+|-'{' OpenParen
+|-ExpressionStatement Statement
+| |-CallExpression Expression
+| | |-IdExpression Callee
+| | | `-UnqualifiedId UnqualifiedId
+| | | `-'f'
+| | |-'(' OpenParen unmodifiable
+| | |-CallArguments Arguments
+| | | `-IntegerLiteralExpression ListElement
+| | | `-'0' LiteralToken
+| | `-')' CloseParen unmodifiable
+| `-';'
+|-ExpressionStatement Statement
+| |-CallExpression Expression
+| | |-IdExpression Callee
+| | | `-UnqualifiedId UnqualifiedId
+| | | `-'g'
+| | |-'(' OpenParen unmodifiable
+| | |-CallArguments Arguments
+| | | |-IntegerLiteralExpression ListElement
+| | | | `-'0' LiteralToken
+| | | |-',' ListDelimiter
+| | | `-IntegerLiteralExpression ListElement
+| | | `-'1' LiteralToken
+| | `-')' CloseParen unmodifiable
+| `-';'
+`-'}' CloseParen
+)txt"}));
+}
+
TEST_P(BuildSyntaxTreeTest, InitDeclarator_Equal) {
if (!GetParam().isCXX()) {
return;
More information about the cfe-commits
mailing list