This revision was automatically updated to reflect the committed changes.
Closed by commit rG551092bc3dfb: Revert AST Matchers default to AsIs mode
(authored by stephenkelly).
Changed prior to commit:
https://reviews.llvm.org/D83076?vs=275248&id=275458#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83076/new/
https://reviews.llvm.org/D83076
Files:
clang-tools-extra/clang-query/Query.cpp
clang-tools-extra/clang-query/QuerySession.h
clang/docs/ReleaseNotes.rst
clang/include/clang/AST/ParentMapContext.h
clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
Index: clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
===================================================================
--- clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
+++ clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
@@ -1207,7 +1207,12 @@
}
TEST_P(ASTMatchersTest, CastExpr_DoesNotMatchNonCasts) {
- EXPECT_TRUE(notMatches("char c = '0';", castExpr()));
+ if (GetParam().Language == Lang_C89 || GetParam().Language == Lang_C99) {
+ // This does have a cast in C
+ EXPECT_TRUE(matches("char c = '0';", implicitCastExpr()));
+ } else {
+ EXPECT_TRUE(notMatches("char c = '0';", castExpr()));
+ }
EXPECT_TRUE(notMatches("int i = (0);", castExpr()));
EXPECT_TRUE(notMatches("int i = 0;", castExpr()));
}
Index: clang/include/clang/AST/ParentMapContext.h
===================================================================
--- clang/include/clang/AST/ParentMapContext.h
+++ clang/include/clang/AST/ParentMapContext.h
@@ -67,7 +67,7 @@
private:
ASTContext &ASTCtx;
class ParentMap;
- TraversalKind Traversal = TK_IgnoreUnlessSpelledInSource;
+ TraversalKind Traversal = TK_AsIs;
std::unique_ptr<ParentMap> Parents;
};
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -258,44 +258,7 @@
AST Matchers
------------
-- Traversal in AST Matchers was simplified to use the
- ``TK_IgnoreUnlessSpelledInSource`` mode by default, instead of ``TK_AsIs``.
- This means that many uses of the ``ignoringImplicit()`` and similar matchers
- is no longer necessary. Clients of AST Matchers which wish to match on
- implicit AST nodes can wrap their matcher in ``traverse(TK_AsIs, ...)`` or
- use ``TraversalKindScope`` if appropriate. The ``clang-query`` tool also
- uses ``IgnoreUnlessSpelledInSource`` by default. The mode can be changed
- using ``set traversal AsIs`` in the ``clang-query`` environment.
-
- As this change requires downstream tools which use AST Matchers to adapt
- to the new default, a porting guide may be useful for downstream tools
- needing to adapt.
-
- Note that although there are many steps below, only the first is
- non-optional. The steps are intentionally extemely granular to facilitate
- understanding of the guide itself. It is reasonable to do some of the
- steps at the same time if you understand the guide:
-
- 1. Use ``(your ASTContext instance).getParentMapContext().setTraversalKind(TK_AsIs)``
- to restore the previous behavior for your tool. All further steps in
- this porting guide are optional.
- 2. Wrap your existing matcher expressions with ``traverse(TK_AsIs, ...)``
- before passing them to ``ASTMatchFinder::addMatcher``.
- 3. Remove ``(your ASTContext instance).getParentMapContext().setTraversalKind(TK_AsIs)``
- from your tool so that the default behavior of your tool matches the
- default behavior of upstream clang. This is made possible by wrapping
- your matchers in ``traverse(TK_AsIs, ...)`` from step (2).
- 4. Audit your matcher expressions and remove ``traverse(TK_AsIs, ...)``
- where not needed.
- 5. Audit your matcher expressions and remove calls to ``ignoring*()``
- matchers where not needed.
- 6. Audit your matcher expressions and consider whether the matcher is
- better using the ``TK_AsIs`` mode or if it can be better expressed in
- the default mode. For example, some matchers explicitly match
- ``has(implicitCastExpr(has(...)))``. Such matchers are sometimes
- written by author who were unaware of the existence of the
- ``ignoring*()`` matchers.
-
+- ...
clang-format
------------
Index: clang-tools-extra/clang-query/QuerySession.h
===================================================================
--- clang-tools-extra/clang-query/QuerySession.h
+++ clang-tools-extra/clang-query/QuerySession.h
@@ -26,7 +26,7 @@
QuerySession(llvm::ArrayRef<std::unique_ptr<ASTUnit>> ASTs)
: ASTs(ASTs), PrintOutput(false), DiagOutput(true),
DetailedASTOutput(false), BindRoot(true), PrintMatcher(false),
- Terminate(false), TK(ast_type_traits::TK_IgnoreUnlessSpelledInSource) {}
+ Terminate(false), TK(ast_type_traits::TK_AsIs) {}
llvm::ArrayRef<std::unique_ptr<ASTUnit>> ASTs;
Index: clang-tools-extra/clang-query/Query.cpp
===================================================================
--- clang-tools-extra/clang-query/Query.cpp
+++ clang-tools-extra/clang-query/Query.cpp
@@ -46,12 +46,12 @@
" set traversal <kind> "
"Set traversal kind of clang-query session. Available kinds are:\n"
" AsIs "
- "Print and match the AST as clang sees it.\n"
+ "Print and match the AST as clang sees it. This mode is the "
+ "default.\n"
" IgnoreImplicitCastsAndParentheses "
"Omit implicit casts and parens in matching and dumping.\n"
" IgnoreUnlessSpelledInSource "
- "Omit AST nodes unless spelled in the source. This mode is the "
- "default.\n"
+ "Omit AST nodes unless spelled in the source.\n"
" set output <feature> "
"Set whether to output only <feature> content.\n"
" enable output <feature> "
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits