r264855 - [ASTMatchers] Existing matcher hasAnyArgument fixed
Nico Weber via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 30 05:24:10 PDT 2016
Looks like this broke clang-tidy/misc-dangling-handle.cpp (
http://lab.llvm.org:8011/builders/clang-bpf-build/builds/9704). Can you
take a look?
On Wed, Mar 30, 2016 at 4:22 AM, Gabor Horvath via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: xazax
> Date: Wed Mar 30 06:22:14 2016
> New Revision: 264855
>
> URL: http://llvm.org/viewvc/llvm-project?rev=264855&view=rev
> Log:
> [ASTMatchers] Existing matcher hasAnyArgument fixed
>
> Summary: A checker (will be uploaded after this patch) needs to check
> implicit casts. The checker needs matcher hasAnyArgument but it ignores
> implicit casts and parenthesized expressions which disables checking of
> implicit casts for arguments in the checker. However the documentation of
> the matcher contains a FIXME that this should be removed once separate
> matchers for ignoring implicit casts and parenthesized expressions are
> ready. Since these matchers were already there the fix could be executed.
> Only one Clang checker was affected which was also fixed
> (ignoreParenImpCasts added) and is separately uploaded. Third party
> checkers (not in the Clang repository) may be affected by this fix so the
> fix must be emphasized in the release notes.
>
> Reviewers: klimek, sbenza, alexfh
>
> Subscribers: alexfh, klimek, xazax.hun, cfe-commits
>
> Differential Revision: http://reviews.llvm.org/D18243
>
> Modified:
> cfe/trunk/docs/LibASTMatchersReference.html
> cfe/trunk/docs/ReleaseNotes.rst
> cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
> cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp
>
> Modified: cfe/trunk/docs/LibASTMatchersReference.html
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LibASTMatchersReference.html?rev=264855&r1=264854&r2=264855&view=diff
>
> ==============================================================================
> --- cfe/trunk/docs/LibASTMatchersReference.html (original)
> +++ cfe/trunk/docs/LibASTMatchersReference.html Wed Mar 30 06:22:14 2016
> @@ -3636,11 +3636,6 @@ callExpr(hasAnyArgument(declRefExpr()))
> matches x(1, y, 42)
> with hasAnyArgument(...)
> matching y
> -
> -FIXME: Currently this will ignore parentheses and implicit casts on
> -the argument before applying the inner matcher. We'll want to remove
> -this to allow for greater control by the user once ignoreImplicit()
> -has been implemented.
> </pre></td></tr>
>
>
> @@ -3907,11 +3902,6 @@ callExpr(hasAnyArgument(declRefExpr()))
> matches x(1, y, 42)
> with hasAnyArgument(...)
> matching y
> -
> -FIXME: Currently this will ignore parentheses and implicit casts on
> -the argument before applying the inner matcher. We'll want to remove
> -this to allow for greater control by the user once ignoreImplicit()
> -has been implemented.
> </pre></td></tr>
>
>
>
> Modified: cfe/trunk/docs/ReleaseNotes.rst
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=264855&r1=264854&r2=264855&view=diff
>
> ==============================================================================
> --- cfe/trunk/docs/ReleaseNotes.rst (original)
> +++ cfe/trunk/docs/ReleaseNotes.rst Wed Mar 30 06:22:14 2016
> @@ -120,6 +120,12 @@ this section should help get you past th
> AST Matchers
> ------------
>
> +- hasAnyArgument: Matcher no longer ignores parentheses and implicit
> casts on
> + the argument before applying the inner matcher. The fix was done to
> allow for
> + greater control by the user. In all existing checkers that use this
> matcher
> + all instances of code ``hasAnyArgument(<inner matcher>)`` must be
> changed to
> + ``hasAnyArgument(ignoringParenImpCasts(<inner matcher>))``.
> +
> ...
>
> libclang
>
> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=264855&r1=264854&r2=264855&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original)
> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Wed Mar 30 06:22:14
> 2016
> @@ -2989,18 +2989,13 @@ AST_MATCHER(CXXCtorInitializer, isMember
> /// matches x(1, y, 42)
> /// with hasAnyArgument(...)
> /// matching y
> -///
> -/// FIXME: Currently this will ignore parentheses and implicit casts on
> -/// the argument before applying the inner matcher. We'll want to remove
> -/// this to allow for greater control by the user once \c ignoreImplicit()
> -/// has been implemented.
> AST_POLYMORPHIC_MATCHER_P(hasAnyArgument,
> AST_POLYMORPHIC_SUPPORTED_TYPES(CallExpr,
>
> CXXConstructExpr),
> internal::Matcher<Expr>, InnerMatcher) {
> for (const Expr *Arg : Node.arguments()) {
> BoundNodesTreeBuilder Result(*Builder);
> - if (InnerMatcher.matches(*Arg->IgnoreParenImpCasts(), Finder,
> &Result)) {
> + if (InnerMatcher.matches(*Arg, Finder, &Result)) {
> *Builder = std::move(Result);
> return true;
> }
>
> Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp?rev=264855&r1=264854&r2=264855&view=diff
>
> ==============================================================================
> --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp (original)
> +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp Wed Mar 30
> 06:22:14 2016
> @@ -1633,10 +1633,15 @@ TEST(Matcher, Argument) {
>
> TEST(Matcher, AnyArgument) {
> StatementMatcher CallArgumentY = callExpr(
> - hasAnyArgument(declRefExpr(to(varDecl(hasName("y"))))));
> + hasAnyArgument(
> + ignoringParenImpCasts(declRefExpr(to(varDecl(hasName("y")))))));
> EXPECT_TRUE(matches("void x(int, int) { int y; x(1, y); }",
> CallArgumentY));
> EXPECT_TRUE(matches("void x(int, int) { int y; x(y, 42); }",
> CallArgumentY));
> EXPECT_TRUE(notMatches("void x(int, int) { x(1, 2); }", CallArgumentY));
> +
> + StatementMatcher ImplicitCastedArgument = callExpr(
> + hasAnyArgument(implicitCastExpr()));
> + EXPECT_TRUE(matches("void x(long) { int y; x(y); }",
> ImplicitCastedArgument));
> }
>
> TEST(ForEachArgumentWithParam, ReportsNoFalsePositives) {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160330/9911c0c2/attachment.html>
More information about the cfe-commits
mailing list