r222646 - Adding 4 ASTMatchers: typedefDecl, isInMainFile, isInSystemFile, isInFileMatchingName
Aaron Ballman
aaron at aaronballman.com
Mon Nov 24 10:28:09 PST 2014
On Mon, Nov 24, 2014 at 12:46 PM, Manuel Klimek <klimek at google.com> wrote:
> Well, I think for windows we'd need to make the paths have \s in the
> tests...
I agree that the tests may have to be modified for Windows path separators.
~Aaron
>
>
> On Mon Nov 24 2014 at 6:41:36 PM Aaron Ballman <aaron at aaronballman.com>
> wrote:
>>
>> On Mon, Nov 24, 2014 at 12:40 PM, Manuel Klimek <klimek at google.com> wrote:
>> > I think the right fix will be to #ifdef out those test on windows ...
>>
>> Perhaps my revert was ever-so-slightly too quick. ;-)
>>
>> I'm uncertain of whether that's the right fix or not, since that would
>> mean we'd have no tests for this functionality on Windows, would it
>> not?
>>
>> ~Aaron
>>
>> >
>> >
>> > On Mon Nov 24 2014 at 6:37:48 PM Manuel Klimek <klimek at google.com>
>> > wrote:
>> >>
>> >> Sorry - feel free to roll back for now.
>> >>
>> >> On Mon Nov 24 2014 at 6:26:26 PM Aaron Ballman <aaron at aaronballman.com>
>> >> wrote:
>> >>>
>> >>> This also appears to have broken the build.
>> >>>
>> >>>
>> >>>
>> >>> http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/11716/steps/build_clang/logs/stdio
>> >>>
>> >>> I've made a fix in r222664 to get the build unbroken, however, the
>> >>> tests still fail for me on Windows.
>> >>>
>> >>> ~Aaron
>> >>>
>> >>> On Mon, Nov 24, 2014 at 10:51 AM, Aaron Ballman
>> >>> <aaron at aaronballman.com>
>> >>> wrote:
>> >>> > On Mon, Nov 24, 2014 at 4:10 AM, Manuel Klimek <klimek at google.com>
>> >>> > wrote:
>> >>> >> Author: klimek
>> >>> >> Date: Mon Nov 24 03:10:56 2014
>> >>> >> New Revision: 222646
>> >>> >>
>> >>> >> URL: http://llvm.org/viewvc/llvm-project?rev=222646&view=rev
>> >>> >> Log:
>> >>> >> Adding 4 ASTMatchers: typedefDecl, isInMainFile, isInSystemFile,
>> >>> >> isInFileMatchingName
>> >>> >>
>> >>> >> Summary:
>> >>> >> Often one is only interested in matches within the main-file or
>> >>> >> matches
>> >>> >> that are not within a system-header, for which this patch adds
>> >>> >> isInMainFile and isInSystemFile. They take no arguments and narrow
>> >>> >> down
>> >>> >> the matches.
>> >>> >>
>> >>> >> The isInFileMatchingName is mainly thought for interactive
>> >>> >> clang-query-sessions, to make a matcher more specific without
>> >>> >> restarting
>> >>> >> the session with the files you are interested in for that moment.
>> >>> >> It
>> >>> >> takes a string that will be used as regular-expression to match the
>> >>> >> filename of where the matched node is expanded.
>> >>> >>
>> >>> >> Patch by Hendrik von Prince.
>> >>> >>
>> >>> >> Modified:
>> >>> >> cfe/trunk/docs/LibASTMatchersReference.html
>> >>> >> cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
>> >>> >> cfe/trunk/include/clang/Tooling/Tooling.h
>> >>> >> cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp
>> >>> >> cfe/trunk/lib/Tooling/Tooling.cpp
>> >>> >> cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp
>> >>> >> cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h
>> >>> >>
>> >>> >> Modified: cfe/trunk/docs/LibASTMatchersReference.html
>> >>> >> URL:
>> >>> >>
>> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LibASTMatchersReference.html?rev=222646&r1=222645&r2=222646&view=diff
>> >>> >>
>> >>> >>
>> >>> >> ==============================================================================
>> >>> >> --- cfe/trunk/docs/LibASTMatchersReference.html (original)
>> >>> >> +++ cfe/trunk/docs/LibASTMatchersReference.html Mon Nov 24 03:10:56
>> >>> >> 2014
>> >>> >> @@ -307,6 +307,16 @@ Example matches X, Z
>> >>> >> </pre></td></tr>
>> >>> >>
>> >>> >>
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('typedefDecl0')"><a
>> >>> >> name="typedefDecl0Anchor">typedefDecl</a></td><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypedefDecl.html">TypedefDecl</a>>...</td></tr>
>> >>> >> +<tr><td colspan="4" class="doc" id="typedefDecl0"><pre>Matches
>> >>> >> typedef declarations.
>> >>> >> +
>> >>> >> +Given
>> >>> >> + typedef int X;
>> >>> >> +typedefDecl()
>> >>> >> + matches "typedef int X"
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> <tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('unresolvedUsingValueDecl0')"><a
>> >>> >>
>> >>> >> name="unresolvedUsingValueDecl0Anchor">unresolvedUsingValueDecl</a></td><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingValueDecl.html">UnresolvedUsingValueDecl</a>>...</td></tr>
>> >>> >> <tr><td colspan="4" class="doc"
>> >>> >> id="unresolvedUsingValueDecl0"><pre>Matches unresolved using value
>> >>> >> declarations.
>> >>> >>
>> >>> >> @@ -339,6 +349,15 @@ usingDirectiveDecl()
>> >>> >> matches using namespace X </pre></td></tr>
>> >>> >>
>> >>> >>
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('valueDecl0')"><a
>> >>> >> name="valueDecl0Anchor">valueDecl</a></td><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>>...</td></tr>
>> >>> >> +<tr><td colspan="4" class="doc" id="valueDecl0"><pre>Matches any
>> >>> >> value declaration.
>> >>> >> +
>> >>> >> +Example matches A, B, C and F
>> >>> >> + enum X { A, B, C };
>> >>> >> + void F();
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> <tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('varDecl0')"><a
>> >>> >> name="varDecl0Anchor">varDecl</a></td><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>>...</td></tr>
>> >>> >> <tr><td colspan="4" class="doc" id="varDecl0"><pre>Matches
>> >>> >> variable
>> >>> >> declarations.
>> >>> >>
>> >>> >> @@ -1654,6 +1673,48 @@ f.
>> >>> >> </pre></td></tr>
>> >>> >>
>> >>> >>
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInFileMatching0')"><a
>> >>> >>
>> >>> >> name="isExpansionInFileMatching0Anchor">isExpansionInFileMatching</a></td><td>std::string
>> >>> >> RegExp</td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInFileMatching0"><pre>Matches AST nodes that were
>> >>> >> expanded
>> >>> >> within files whose name is
>> >>> >> +partially matching a given regex.
>> >>> >> +
>> >>> >> +Example matches Y but not X
>> >>> >> + (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
>> >>> >> + #include "ASTMatcher.h"
>> >>> >> + class X {};
>> >>> >> +ASTMatcher.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInMainFile0')"><a
>> >>> >>
>> >>> >> name="isExpansionInMainFile0Anchor">isExpansionInMainFile</a></td><td></td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInMainFile0"><pre>Matches AST nodes that were
>> >>> >> expanded within
>> >>> >> the main-file.
>> >>> >> +
>> >>> >> +Example matches X but not Y (matcher =
>> >>> >> recordDecl(isExpansionInMainFile())
>> >>> >> + #include <Y.h>
>> >>> >> + class X {};
>> >>> >> +Y.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInSystemHeader0')"><a
>> >>> >>
>> >>> >> name="isExpansionInSystemHeader0Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInSystemHeader0"><pre>Matches AST nodes that were
>> >>> >> expanded
>> >>> >> within system-header-files.
>> >>> >> +
>> >>> >> +Example matches Y but not X
>> >>> >> + (matcher = recordDecl(isExpansionInSystemHeader())
>> >>> >> + #include <SystemHeader.h>
>> >>> >> + class X {};
>> >>> >> +SystemHeader.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> <tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td
>> >>> >> class="name" onclick="toggle('isImplicit0')"><a
>> >>> >> name="isImplicit0Anchor">isImplicit</a></td><td></td></tr>
>> >>> >> <tr><td colspan="4" class="doc" id="isImplicit0"><pre>Matches a
>> >>> >> declaration that has been implicitly added
>> >>> >> by the compiler (eg. implicit defaultcopy constructors).
>> >>> >> @@ -1858,7 +1919,7 @@ memberExpr(isArrow())
>> >>> >> </pre></td></tr>
>> >>> >>
>> >>> >>
>> >>> >> -<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>></td><td
>> >>> >> class="name" onclick="toggle('hasName0')"><a
>> >>> >> name="hasName0Anchor">hasName</a></td><td>std::string
>> >>> >> Name</td></tr>
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>></td><td
>> >>> >> class="name" onclick="toggle('hasName0')"><a
>> >>> >> name="hasName0Anchor">hasName</a></td><td>std::string
>> >>> >> Name</td></tr>
>> >>> >> <tr><td colspan="4" class="doc" id="hasName0"><pre>Matches
>> >>> >> NamedDecl
>> >>> >> nodes that have the specified name.
>> >>> >>
>> >>> >> Supports specifying enclosing namespaces or classes by prefixing
>> >>> >> the
>> >>> >> name
>> >>> >> @@ -1990,6 +2051,48 @@ and reference to that variable declarati
>> >>> >> </pre></td></tr>
>> >>> >>
>> >>> >>
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInFileMatching1')"><a
>> >>> >>
>> >>> >> name="isExpansionInFileMatching1Anchor">isExpansionInFileMatching</a></td><td>std::string
>> >>> >> RegExp</td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInFileMatching1"><pre>Matches AST nodes that were
>> >>> >> expanded
>> >>> >> within files whose name is
>> >>> >> +partially matching a given regex.
>> >>> >> +
>> >>> >> +Example matches Y but not X
>> >>> >> + (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
>> >>> >> + #include "ASTMatcher.h"
>> >>> >> + class X {};
>> >>> >> +ASTMatcher.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInMainFile1')"><a
>> >>> >>
>> >>> >> name="isExpansionInMainFile1Anchor">isExpansionInMainFile</a></td><td></td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInMainFile1"><pre>Matches AST nodes that were
>> >>> >> expanded within
>> >>> >> the main-file.
>> >>> >> +
>> >>> >> +Example matches X but not Y (matcher =
>> >>> >> recordDecl(isExpansionInMainFile())
>> >>> >> + #include <Y.h>
>> >>> >> + class X {};
>> >>> >> +Y.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInSystemHeader1')"><a
>> >>> >>
>> >>> >> name="isExpansionInSystemHeader1Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInSystemHeader1"><pre>Matches AST nodes that were
>> >>> >> expanded
>> >>> >> within system-header-files.
>> >>> >> +
>> >>> >> +Example matches Y but not X
>> >>> >> + (matcher = recordDecl(isExpansionInSystemHeader())
>> >>> >> + #include <SystemHeader.h>
>> >>> >> + class X {};
>> >>> >> +SystemHeader.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> <tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>></td><td
>> >>> >> class="name" onclick="toggle('isInTemplateInstantiation0')"><a
>> >>> >>
>> >>> >> name="isInTemplateInstantiation0Anchor">isInTemplateInstantiation</a></td><td></td></tr>
>> >>> >> <tr><td colspan="4" class="doc"
>> >>> >> id="isInTemplateInstantiation0"><pre>Matches statements inside of a
>> >>> >> template
>> >>> >> instantiation.
>> >>> >>
>> >>> >> @@ -2061,6 +2164,48 @@ classTemplateSpecializationDecl(template
>> >>> >> </pre></td></tr>
>> >>> >>
>> >>> >>
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInFileMatching2')"><a
>> >>> >>
>> >>> >> name="isExpansionInFileMatching2Anchor">isExpansionInFileMatching</a></td><td>std::string
>> >>> >> RegExp</td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInFileMatching2"><pre>Matches AST nodes that were
>> >>> >> expanded
>> >>> >> within files whose name is
>> >>> >> +partially matching a given regex.
>> >>> >> +
>> >>> >> +Example matches Y but not X
>> >>> >> + (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
>> >>> >> + #include "ASTMatcher.h"
>> >>> >> + class X {};
>> >>> >> +ASTMatcher.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInMainFile2')"><a
>> >>> >>
>> >>> >> name="isExpansionInMainFile2Anchor">isExpansionInMainFile</a></td><td></td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInMainFile2"><pre>Matches AST nodes that were
>> >>> >> expanded within
>> >>> >> the main-file.
>> >>> >> +
>> >>> >> +Example matches X but not Y (matcher =
>> >>> >> recordDecl(isExpansionInMainFile())
>> >>> >> + #include <Y.h>
>> >>> >> + class X {};
>> >>> >> +Y.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> +<tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td
>> >>> >> class="name" onclick="toggle('isExpansionInSystemHeader2')"><a
>> >>> >>
>> >>> >> name="isExpansionInSystemHeader2Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
>> >>> >> +<tr><td colspan="4" class="doc"
>> >>> >> id="isExpansionInSystemHeader2"><pre>Matches AST nodes that were
>> >>> >> expanded
>> >>> >> within system-header-files.
>> >>> >> +
>> >>> >> +Example matches Y but not X
>> >>> >> + (matcher = recordDecl(isExpansionInSystemHeader())
>> >>> >> + #include <SystemHeader.h>
>> >>> >> + class X {};
>> >>> >> +SystemHeader.h:
>> >>> >> + class Y {};
>> >>> >> +
>> >>> >> +Usable as: Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>>,
>> >>> >> Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>>
>> >>> >> +</pre></td></tr>
>> >>> >> +
>> >>> >> +
>> >>> >> <tr><td>Matcher<<a
>> >>> >>
>> >>> >> href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>></td><td
>> >>> >> class="name" onclick="toggle('equalsBoundNode2')"><a
>> >>> >>
>> >>> >> name="equalsBoundNode2Anchor">equalsBoundNode</a></td><td>std::string
>> >>> >> ID</td></tr>
>> >>> >> <tr><td colspan="4" class="doc" id="equalsBoundNode2"><pre>Matches
>> >>> >> if
>> >>> >> a node equals a previously bound node.
>> >>> >>
>> >>> >>
>> >>> >> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
>> >>> >> URL:
>> >>> >>
>> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=222646&r1=222645&r2=222646&view=diff
>> >>> >>
>> >>> >>
>> >>> >> ==============================================================================
>> >>> >> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original)
>> >>> >> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Mon Nov 24
>> >>> >> 03:10:56 2014
>> >>> >> @@ -47,6 +47,7 @@
>> >>> >>
>> >>> >> #include "clang/AST/DeclFriend.h"
>> >>> >> #include "clang/AST/DeclTemplate.h"
>> >>> >> +#include "clang/AST/ASTContext.h"
>> >>> >> #include "clang/ASTMatchers/ASTMatchersInternal.h"
>> >>> >> #include "clang/ASTMatchers/ASTMatchersMacros.h"
>> >>> >> #include "llvm/ADT/Twine.h"
>> >>> >> @@ -142,6 +143,97 @@ typedef internal::Matcher<NestedNameSpec
>> >>> >> /// Usable as: Any Matcher
>> >>> >> inline internal::TrueMatcher anything() { return
>> >>> >> internal::TrueMatcher(); }
>> >>> >>
>> >>> >> +/// \brief Matches typedef declarations.
>> >>> >> +///
>> >>> >> +/// Given
>> >>> >> +/// \code
>> >>> >> +/// typedef int X;
>> >>> >> +/// \endcode
>> >>> >> +/// typedefDecl()
>> >>> >> +/// matches "typedef int X"
>> >>> >> +const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl>
>> >>> >> typedefDecl;
>> >>> >> +
>> >>> >> +/// \brief Matches AST nodes that were expanded within the
>> >>> >> main-file.
>> >>> >> +///
>> >>> >> +/// Example matches X but not Y (matcher =
>> >>> >> recordDecl(isExpansionInMainFile())
>> >>> >> +/// \code
>> >>> >> +/// #include <Y.h>
>> >>> >> +/// class X {};
>> >>> >> +/// \endcode
>> >>> >> +/// Y.h:
>> >>> >> +/// \code
>> >>> >> +/// class Y {};
>> >>> >> +/// \endcode
>> >>> >> +///
>> >>> >> +/// Usable as: Matcher<Decl>, Matcher<Stmt>, Matcher<TypeLoc>
>> >>> >> +AST_POLYMORPHIC_MATCHER(isExpansionInMainFile,
>> >>> >> + AST_POLYMORPHIC_SUPPORTED_TYPES_3(Decl,
>> >>> >> Stmt,
>> >>> >> +
>> >>> >> TypeLoc)) {
>> >>> >> + auto &SourceManager =
>> >>> >> Finder->getASTContext().getSourceManager();
>> >>> >> + return SourceManager.isInMainFile(
>> >>> >> + SourceManager.getExpansionLoc(Node.getLocStart()));
>> >>> >> +}
>> >>> >> +
>> >>> >> +/// \brief Matches AST nodes that were expanded within
>> >>> >> system-header-files.
>> >>> >> +///
>> >>> >> +/// Example matches Y but not X
>> >>> >> +/// (matcher = recordDecl(isExpansionInSystemHeader())
>> >>> >> +/// \code
>> >>> >> +/// #include <SystemHeader.h>
>> >>> >> +/// class X {};
>> >>> >> +/// \endcode
>> >>> >> +/// SystemHeader.h:
>> >>> >> +/// \code
>> >>> >> +/// class Y {};
>> >>> >> +/// \endcode
>> >>> >> +///
>> >>> >> +/// Usable as: Matcher<Decl>, Matcher<Stmt>, Matcher<TypeLoc>
>> >>> >> +AST_POLYMORPHIC_MATCHER(isExpansionInSystemHeader,
>> >>> >> + AST_POLYMORPHIC_SUPPORTED_TYPES_3(Decl,
>> >>> >> Stmt,
>> >>> >> +
>> >>> >> TypeLoc)) {
>> >>> >> + auto &SourceManager =
>> >>> >> Finder->getASTContext().getSourceManager();
>> >>> >> + auto ExpansionLoc =
>> >>> >> SourceManager.getExpansionLoc(Node.getLocStart());
>> >>> >> + if (ExpansionLoc.isInvalid()) {
>> >>> >> + return false;
>> >>> >> + }
>> >>> >> + return SourceManager.isInSystemHeader(ExpansionLoc);
>> >>> >> +}
>> >>> >> +
>> >>> >> +/// \brief Matches AST nodes that were expanded within files whose
>> >>> >> name is
>> >>> >> +/// partially matching a given regex.
>> >>> >> +///
>> >>> >> +/// Example matches Y but not X
>> >>> >> +/// (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
>> >>> >> +/// \code
>> >>> >> +/// #include "ASTMatcher.h"
>> >>> >> +/// class X {};
>> >>> >> +/// \endcode
>> >>> >> +/// ASTMatcher.h:
>> >>> >> +/// \code
>> >>> >> +/// class Y {};
>> >>> >> +/// \endcode
>> >>> >> +///
>> >>> >> +/// Usable as: Matcher<Decl>, Matcher<Stmt>, Matcher<TypeLoc>
>> >>> >> +AST_POLYMORPHIC_MATCHER_P(isExpansionInFileMatching,
>> >>> >> + AST_POLYMORPHIC_SUPPORTED_TYPES_3(Decl,
>> >>> >> Stmt,
>> >>> >> +
>> >>> >> TypeLoc),
>> >>> >> + std::string, RegExp) {
>> >>> >> + auto &SourceManager =
>> >>> >> Finder->getASTContext().getSourceManager();
>> >>> >> + auto ExpansionLoc =
>> >>> >> SourceManager.getExpansionLoc(Node.getLocStart());
>> >>> >> + if (ExpansionLoc.isInvalid()) {
>> >>> >> + return false;
>> >>> >> + }
>> >>> >> + auto FileEntry =
>> >>> >> +
>> >>> >>
>> >>> >> SourceManager.getFileEntryForID(SourceManager.getFileID(ExpansionLoc));
>> >>> >> + if (!FileEntry) {
>> >>> >> + return false;
>> >>> >> + }
>> >>> >> +
>> >>> >> + auto Filename = FileEntry->getName();
>> >>> >> + llvm::Regex RE(RegExp);
>> >>> >> + return RE.match(Filename);
>> >>> >> +}
>> >>> >> +
>> >>> >> /// \brief Matches declarations.
>> >>> >> ///
>> >>> >> /// Examples matches \c X, \c C, and the friend declaration inside
>> >>> >> \c
>> >>> >> C;
>> >>> >>
>> >>> >> Modified: cfe/trunk/include/clang/Tooling/Tooling.h
>> >>> >> URL:
>> >>> >>
>> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Tooling.h?rev=222646&r1=222645&r2=222646&view=diff
>> >>> >>
>> >>> >>
>> >>> >> ==============================================================================
>> >>> >> --- cfe/trunk/include/clang/Tooling/Tooling.h (original)
>> >>> >> +++ cfe/trunk/include/clang/Tooling/Tooling.h Mon Nov 24 03:10:56
>> >>> >> 2014
>> >>> >> @@ -143,6 +143,10 @@ inline std::unique_ptr<FrontendActionFac
>> >>> >> bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine
>> >>> >> &Code,
>> >>> >> const Twine &FileName = "input.cc");
>> >>> >>
>> >>> >> +/// The first part of the pair is the filename, the second part
>> >>> >> the
>> >>> >> +/// file-content.
>> >>> >> +typedef std::vector<std::pair<std::string, std::string>>
>> >>> >> FileContentMappings;
>> >>> >> +
>> >>> >> /// \brief Runs (and deletes) the tool on 'Code' with the
>> >>> >> -fsyntax-only flag and
>> >>> >> /// with additional other flags.
>> >>> >> ///
>> >>> >> @@ -152,9 +156,10 @@ bool runToolOnCode(clang::FrontendAction
>> >>> >> /// \param FileName The file name which 'Code' will be mapped as.
>> >>> >> ///
>> >>> >> /// \return - True if 'ToolAction' was successfully executed.
>> >>> >> -bool runToolOnCodeWithArgs(clang::FrontendAction *ToolAction,
>> >>> >> const
>> >>> >> Twine &Code,
>> >>> >> - const std::vector<std::string> &Args,
>> >>> >> - const Twine &FileName = "input.cc");
>> >>> >> +bool runToolOnCodeWithArgs(
>> >>> >> + clang::FrontendAction *ToolAction, const Twine &Code,
>> >>> >> + const std::vector<std::string> &Args, const Twine &FileName =
>> >>> >> "input.cc",
>> >>> >> + const FileContentMappings &VirtualMappedFiles =
>> >>> >> FileContentMappings());
>> >>> >>
>> >>> >> /// \brief Builds an AST for 'Code'.
>> >>> >> ///
>> >>> >>
>> >>> >> Modified: cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp
>> >>> >> URL:
>> >>> >>
>> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp?rev=222646&r1=222645&r2=222646&view=diff
>> >>> >>
>> >>> >>
>> >>> >> ==============================================================================
>> >>> >> --- cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp (original)
>> >>> >> +++ cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp Mon Nov 24
>> >>> >> 03:10:56
>> >>> >> 2014
>> >>> >> @@ -242,7 +242,10 @@ RegistryMaps::RegistryMaps() {
>> >>> >> REGISTER_MATCHER(isExpr);
>> >>> >> REGISTER_MATCHER(isExternC);
>> >>> >> REGISTER_MATCHER(isImplicit);
>> >>> >> + REGISTER_MATCHER(isExpansionInFileMatching);
>> >>> >> + REGISTER_MATCHER(isExpansionInMainFile);
>> >>> >> REGISTER_MATCHER(isInstantiated);
>> >>> >> + REGISTER_MATCHER(isExpansionInSystemHeader);
>> >>> >> REGISTER_MATCHER(isInteger);
>> >>> >> REGISTER_MATCHER(isIntegral);
>> >>> >> REGISTER_MATCHER(isInTemplateInstantiation);
>> >>> >> @@ -314,6 +317,7 @@ RegistryMaps::RegistryMaps() {
>> >>> >> REGISTER_MATCHER(to);
>> >>> >> REGISTER_MATCHER(tryStmt);
>> >>> >> REGISTER_MATCHER(type);
>> >>> >> + REGISTER_MATCHER(typedefDecl);
>> >>> >> REGISTER_MATCHER(typedefType);
>> >>> >> REGISTER_MATCHER(typeLoc);
>> >>> >> REGISTER_MATCHER(unaryExprOrTypeTraitExpr);
>> >>> >>
>> >>> >> Modified: cfe/trunk/lib/Tooling/Tooling.cpp
>> >>> >> URL:
>> >>> >>
>> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Tooling.cpp?rev=222646&r1=222645&r2=222646&view=diff
>> >>> >>
>> >>> >>
>> >>> >> ==============================================================================
>> >>> >> --- cfe/trunk/lib/Tooling/Tooling.cpp (original)
>> >>> >> +++ cfe/trunk/lib/Tooling/Tooling.cpp Mon Nov 24 03:10:56 2014
>> >>> >> @@ -123,17 +123,25 @@ getSyntaxOnlyToolArgs(const std::vector<
>> >>> >>
>> >>> >> bool runToolOnCodeWithArgs(clang::FrontendAction *ToolAction,
>> >>> >> const
>> >>> >> Twine &Code,
>> >>> >> const std::vector<std::string> &Args,
>> >>> >> - const Twine &FileName) {
>> >>> >> + const Twine &FileName,
>> >>> >> + const FileContentMappings
>> >>> >> &VirtualMappedFiles) {
>> >>> >> +
>> >>> >> SmallString<16> FileNameStorage;
>> >>> >> StringRef FileNameRef =
>> >>> >> FileName.toNullTerminatedStringRef(FileNameStorage);
>> >>> >> llvm::IntrusiveRefCntPtr<FileManager> Files(
>> >>> >> new FileManager(FileSystemOptions()));
>> >>> >> - ToolInvocation Invocation(getSyntaxOnlyToolArgs(Args,
>> >>> >> FileNameRef),
>> >>> >> ToolAction,
>> >>> >> - Files.get());
>> >>> >> + ToolInvocation Invocation(getSyntaxOnlyToolArgs(Args,
>> >>> >> FileNameRef),
>> >>> >> + ToolAction, Files.get());
>> >>> >>
>> >>> >> SmallString<1024> CodeStorage;
>> >>> >> Invocation.mapVirtualFile(FileNameRef,
>> >>> >>
>> >>> >> Code.toNullTerminatedStringRef(CodeStorage));
>> >>> >> +
>> >>> >> + for (auto &FilenameWithContent : VirtualMappedFiles) {
>> >>> >> + Invocation.mapVirtualFile(FilenameWithContent.first,
>> >>> >> + FilenameWithContent.second);
>> >>> >> + }
>> >>> >> +
>> >>> >> return Invocation.run();
>> >>> >> }
>> >>> >>
>> >>> >>
>> >>> >> Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp
>> >>> >> URL:
>> >>> >>
>> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp?rev=222646&r1=222645&r2=222646&view=diff
>> >>> >>
>> >>> >>
>> >>> >> ==============================================================================
>> >>> >> --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp (original)
>> >>> >> +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp Mon Nov 24
>> >>> >> 03:10:56 2014
>> >>> >> @@ -4625,5 +4625,46 @@ TEST(EqualsBoundNodeMatcher, UnlessDesce
>> >>> >> .bind("data")));
>> >>> >> }
>> >>> >>
>> >>> >> +TEST(TypeDefDeclMatcher, Match) {
>> >>> >> + EXPECT_TRUE(matches("typedef int typedefDeclTest;",
>> >>> >> + typedefDecl(hasName("typedefDeclTest"))));
>> >>> >> +}
>> >>> >> +
>> >>> >> +TEST(Matcher, IsExpansionInMainFileMatcher) {
>> >>> >> + EXPECT_TRUE(matches("class X {};",
>> >>> >> + recordDecl(hasName("X"),
>> >>> >> isExpansionInMainFile())));
>> >>> >> + EXPECT_TRUE(notMatches("",
>> >>> >> recordDecl(isExpansionInMainFile())));
>> >>> >> + EXPECT_TRUE(matchesConditionally("#include <other>\n",
>> >>> >> +
>> >>> >> recordDecl(isExpansionInMainFile()), false,
>> >>> >> + "-isystem/", {{"/other", "class
>> >>> >> X
>> >>> >> {};"}}));
>> >>> >> +}
>> >>> >> +
>> >>> >> +TEST(Matcher, IsExpansionInSystemHeader) {
>> >>> >> + EXPECT_TRUE(matchesConditionally(
>> >>> >> + "#include \"other\"\n",
>> >>> >> recordDecl(isExpansionInSystemHeader()), true,
>> >>> >> + "-isystem/", {{"/other", "class X {};"}}));
>> >>> >> + EXPECT_TRUE(matchesConditionally("#include \"other\"\n",
>> >>> >> +
>> >>> >> recordDecl(isExpansionInSystemHeader()),
>> >>> >> + false, "-I/", {{"/other",
>> >>> >> "class X
>> >>> >> {};"}}));
>> >>> >> + EXPECT_TRUE(notMatches("class X {};",
>> >>> >> +
>> >>> >> recordDecl(isExpansionInSystemHeader())));
>> >>> >> + EXPECT_TRUE(notMatches("",
>> >>> >> recordDecl(isExpansionInSystemHeader())));
>> >>> >> +}
>> >>> >> +
>> >>> >> +TEST(Matcher, IsExpansionInFileMatching) {
>> >>> >> + EXPECT_TRUE(matchesConditionally(
>> >>> >> + "#include <foo>\n"
>> >>> >> + "#include <bar>\n"
>> >>> >> + "class X {};",
>> >>> >> + recordDecl(isExpansionInFileMatching("b.*"), hasName("B")),
>> >>> >> true,
>> >>> >> + "-isystem/", {{"/foo", "class A {};"}, {"/bar", "class B
>> >>> >> {};"}}));
>> >>> >> + EXPECT_TRUE(matchesConditionally(
>> >>> >> + "#include <foo>\n"
>> >>> >> + "#include <bar>\n"
>> >>> >> + "class X {};",
>> >>> >> + recordDecl(isExpansionInFileMatching("f.*"), hasName("X")),
>> >>> >> false,
>> >>> >> + "-isystem/", {{"/foo", "class A {};"}, {"/bar", "class B
>> >>> >> {};"}}));
>> >>> >> +}
>> >>> >> +
>> >>> >> } // end namespace ast_matchers
>> >>> >> } // end namespace clang
>> >>> >>
>> >>> >> Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h
>> >>> >> URL:
>> >>> >>
>> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h?rev=222646&r1=222645&r2=222646&view=diff
>> >>> >>
>> >>> >>
>> >>> >> ==============================================================================
>> >>> >> --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h (original)
>> >>> >> +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h Mon Nov 24
>> >>> >> 03:10:56 2014
>> >>> >> @@ -22,6 +22,7 @@ using clang::tooling::buildASTFromCodeWi
>> >>> >> using clang::tooling::newFrontendActionFactory;
>> >>> >> using clang::tooling::runToolOnCodeWithArgs;
>> >>> >> using clang::tooling::FrontendActionFactory;
>> >>> >> +using clang::tooling::FileContentMappings;
>> >>> >>
>> >>> >> class BoundNodesCallback {
>> >>> >> public:
>> >>> >> @@ -58,10 +59,10 @@ private:
>> >>> >> };
>> >>> >>
>> >>> >> template <typename T>
>> >>> >> -testing::AssertionResult matchesConditionally(const std::string
>> >>> >> &Code,
>> >>> >> - const T &AMatcher,
>> >>> >> - bool ExpectMatch,
>> >>> >> - llvm::StringRef
>> >>> >> CompileArg) {
>> >>> >> +testing::AssertionResult matchesConditionally(
>> >>> >> + const std::string &Code, const T &AMatcher, bool ExpectMatch,
>> >>> >> + llvm::StringRef CompileArg,
>> >>> >> + const FileContentMappings &VirtualMappedFiles =
>> >>> >> FileContentMappings()) {
>> >>> >> bool Found = false, DynamicFound = false;
>> >>> >> MatchFinder Finder;
>> >>> >> VerifyMatch VerifyFound(nullptr, &Found);
>> >>> >> @@ -73,7 +74,8 @@ testing::AssertionResult matchesConditio
>> >>> >> newFrontendActionFactory(&Finder));
>> >>> >> // Some tests use typeof, which is a gnu extension.
>> >>> >> std::vector<std::string> Args(1, CompileArg);
>> >>> >> - if (!runToolOnCodeWithArgs(Factory->create(), Code, Args)) {
>> >>> >> + if (!runToolOnCodeWithArgs(Factory->create(), Code, Args,
>> >>> >> "input.cc",
>> >>> >> + VirtualMappedFiles)) {
>> >>> >> return testing::AssertionFailure() << "Parsing error in \"" <<
>> >>> >> Code << "\"";
>> >>> >> }
>> >>> >> if (Found != DynamicFound) {
>> >>> >>
>> >>> >
>> >>> > I am getting failed unit tests from this on Windows, built with
>> >>> > MSVC:
>> >>> >
>> >>> > 61> Running the Clang regression tests
>> >>> > 61> -- Testing: 7831 tests, 32 threads --
>> >>> > 61> FAIL: Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInFileMatching
>> >>> > (7145 of 7831)
>> >>> > 61> ******************** TEST 'Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInFileMatching'
>> >>> > FAILED ********************
>> >>> > 61> Note: Google Test filter = Matcher.IsExpansionInFileMatching
>> >>> > 61>
>> >>> > 61> [==========] Running 1 test from 1 test case.
>> >>> > 61>
>> >>> > 61> [----------] Global test environment set-up.
>> >>> > 61>
>> >>> > 61> [----------] 1 test from Matcher
>> >>> > 61>
>> >>> > 61> [ RUN ] Matcher.IsExpansionInFileMatching
>> >>> > 61>
>> >>> >
>> >>> >
>> >>> > 61>E:\llvm\llvm\tools\clang\unittests\ASTMatchers\ASTMatchersTest.cpp(4660):
>> >>> > error : Value of: matchesConditionally( "#include <foo>\n" "#include
>> >>> > <bar>\n" "class X {};", recordDecl(isExpansionInFileMatching("b.*"),
>> >>> > hasName("B")), true, "-isystem/", {{"/foo", "class A {};"}, {"/bar",
>> >>> > "class B {};"}})
>> >>> > 61>
>> >>> > 61> Actual: false (Parsing error in "#include <foo>
>> >>> > 61>
>> >>> > 61> #include <bar>
>> >>> > 61>
>> >>> > 61> class X {};")
>> >>> > 61>
>> >>> > 61> Expected: true
>> >>> > 61>
>> >>> >
>> >>> >
>> >>> > 61>E:\llvm\llvm\tools\clang\unittests\ASTMatchers\ASTMatchersTest.cpp(4666):
>> >>> > error : Value of: matchesConditionally( "#include <foo>\n" "#include
>> >>> > <bar>\n" "class X {};", recordDecl(isExpansionInFileMatching("f.*"),
>> >>> > hasName("X")), false, "-isystem/", {{"/foo", "class A {};"},
>> >>> > {"/bar",
>> >>> > "class B {};"}})
>> >>> > 61>
>> >>> > 61> Actual: false (Parsing error in "#include <foo>
>> >>> > 61>
>> >>> > 61> #include <bar>
>> >>> > 61>
>> >>> > 61> class X {};")
>> >>> > 61>
>> >>> > 61> Expected: true
>> >>> > 61>
>> >>> > 61> [ FAILED ] Matcher.IsExpansionInFileMatching (36 ms)
>> >>> > 61>
>> >>> > 61> [----------] 1 test from Matcher (36 ms total)
>> >>> > 61>
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> [----------] Global test environment tear-down
>> >>> > 61>
>> >>> > 61> [==========] 1 test from 1 test case ran. (36 ms total)
>> >>> > 61>
>> >>> > 61> [ PASSED ] 0 tests.
>> >>> > 61>
>> >>> > 61> [ FAILED ] 1 test, listed below:
>> >>> > 61>
>> >>> > 61> [ FAILED ] Matcher.IsExpansionInFileMatching
>> >>> > 61>
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> 1 FAILED TEST
>> >>> > 61>
>> >>> > 61> input.cc:1:10: fatal error: 'foo' file not found
>> >>> > 61>
>> >>> > 61> #include <foo>
>> >>> > 61>
>> >>> > 61> ^
>> >>> > 61>
>> >>> > 61> 1 error generated.
>> >>> > 61>
>> >>> > 61> input.cc:1:10: fatal error: 'foo' file not found
>> >>> > 61>
>> >>> > 61> #include <foo>
>> >>> > 61>
>> >>> > 61> ^
>> >>> > 61>
>> >>> > 61> 1 error generated.
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> ********************
>> >>> > 61> FAIL: Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInMainFileMatcher
>> >>> > (7146 of 7831)
>> >>> > 61> ******************** TEST 'Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInMainFileMatcher'
>> >>> > FAILED ********************
>> >>> > 61> Note: Google Test filter = Matcher.IsExpansionInMainFileMatcher
>> >>> > 61>
>> >>> > 61> [==========] Running 1 test from 1 test case.
>> >>> > 61>
>> >>> > 61> [----------] Global test environment set-up.
>> >>> > 61>
>> >>> > 61> [----------] 1 test from Matcher
>> >>> > 61>
>> >>> > 61> [ RUN ] Matcher.IsExpansionInMainFileMatcher
>> >>> > 61>
>> >>> >
>> >>> >
>> >>> > 61>E:\llvm\llvm\tools\clang\unittests\ASTMatchers\ASTMatchersTest.cpp(4639):
>> >>> > error : Value of: matchesConditionally("#include <other>\n",
>> >>> > recordDecl(isExpansionInMainFile()), false, "-isystem/", {{"/other",
>> >>> > "class X {};"}})
>> >>> > 61>
>> >>> > 61> Actual: false (Parsing error in "#include <other>
>> >>> > 61>
>> >>> > 61> ")
>> >>> > 61>
>> >>> > 61> Expected: true
>> >>> > 61>
>> >>> > 61> [ FAILED ] Matcher.IsExpansionInMainFileMatcher (64 ms)
>> >>> > 61>
>> >>> > 61> [----------] 1 test from Matcher (64 ms total)
>> >>> > 61>
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> [----------] Global test environment tear-down
>> >>> > 61>
>> >>> > 61> [==========] 1 test from 1 test case ran. (65 ms total)
>> >>> > 61>
>> >>> > 61> [ PASSED ] 0 tests.
>> >>> > 61>
>> >>> > 61> [ FAILED ] 1 test, listed below:
>> >>> > 61>
>> >>> > 61> [ FAILED ] Matcher.IsExpansionInMainFileMatcher
>> >>> > 61>
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> 1 FAILED TEST
>> >>> > 61>
>> >>> > 61> input.cc:1:10: fatal error: 'other' file not found
>> >>> > 61>
>> >>> > 61> #include <other>
>> >>> > 61>
>> >>> > 61> ^
>> >>> > 61>
>> >>> > 61> 1 error generated.
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> ********************
>> >>> > 61> FAIL: Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInSystemHeader
>> >>> > (7152 of 7831)
>> >>> > 61> ******************** TEST 'Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInSystemHeader'
>> >>> > FAILED ********************
>> >>> > 61> Note: Google Test filter = Matcher.IsExpansionInSystemHeader
>> >>> > 61>
>> >>> > 61> [==========] Running 1 test from 1 test case.
>> >>> > 61>
>> >>> > 61> [----------] Global test environment set-up.
>> >>> > 61>
>> >>> > 61> [----------] 1 test from Matcher
>> >>> > 61>
>> >>> > 61> [ RUN ] Matcher.IsExpansionInSystemHeader
>> >>> > 61>
>> >>> >
>> >>> >
>> >>> > 61>E:\llvm\llvm\tools\clang\unittests\ASTMatchers\ASTMatchersTest.cpp(4645):
>> >>> > error : Value of: matchesConditionally( "#include \"other\"\n",
>> >>> > recordDecl(isExpansionInSystemHeader()), true, "-isystem/",
>> >>> > {{"/other", "class X {};"}})
>> >>> > 61>
>> >>> > 61> Actual: false (Parsing error in "#include "other"
>> >>> > 61>
>> >>> > 61> ")
>> >>> > 61>
>> >>> > 61> Expected: true
>> >>> > 61>
>> >>> >
>> >>> >
>> >>> > 61>E:\llvm\llvm\tools\clang\unittests\ASTMatchers\ASTMatchersTest.cpp(4648):
>> >>> > error : Value of: matchesConditionally("#include \"other\"\n",
>> >>> > recordDecl(isExpansionInSystemHeader()), false, "-I/", {{"/other",
>> >>> > "class X {};"}})
>> >>> > 61>
>> >>> > 61> Actual: false (Parsing error in "#include "other"
>> >>> > 61>
>> >>> > 61> ")
>> >>> > 61>
>> >>> > 61> Expected: true
>> >>> > 61>
>> >>> > 61> [ FAILED ] Matcher.IsExpansionInSystemHeader (91 ms)
>> >>> > 61>
>> >>> > 61> [----------] 1 test from Matcher (91 ms total)
>> >>> > 61>
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> [----------] Global test environment tear-down
>> >>> > 61>
>> >>> > 61> [==========] 1 test from 1 test case ran. (91 ms total)
>> >>> > 61>
>> >>> > 61> [ PASSED ] 0 tests.
>> >>> > 61>
>> >>> > 61> [ FAILED ] 1 test, listed below:
>> >>> > 61>
>> >>> > 61> [ FAILED ] Matcher.IsExpansionInSystemHeader
>> >>> > 61>
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> 1 FAILED TEST
>> >>> > 61>
>> >>> > 61> input.cc:1:10: fatal error: 'other' file not found
>> >>> > 61>
>> >>> > 61> #include "other"
>> >>> > 61>
>> >>> > 61> ^
>> >>> > 61>
>> >>> > 61> 1 error generated.
>> >>> > 61>
>> >>> > 61> input.cc:1:10: fatal error: 'other' file not found
>> >>> > 61>
>> >>> > 61> #include "other"
>> >>> > 61>
>> >>> > 61> ^
>> >>> > 61>
>> >>> > 61> 1 error generated.
>> >>> > 61>
>> >>> > 61>
>> >>> > 61> ********************
>> >>> > 61>
>> >>> > 61> Testing Time: 111.19s
>> >>> > 61> ********************
>> >>> > 61> Failing Tests (3):
>> >>> > 61> Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInFileMatching
>> >>> > 61> Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInMainFileMatcher
>> >>> > 61> Clang-Unit ::
>> >>> >
>> >>> >
>> >>> > ASTMatchers/Debug/ASTMatchersTests.exe/Matcher.IsExpansionInSystemHeader
>> >>> > 61>
>> >>> > 61> Expected Passes : 7745
>> >>> > 61> Expected Failures : 19
>> >>> > 61> Unsupported Tests : 64
>> >>> > 61> Unexpected Failures: 3
>> >>> >
>> >>> > ~Aaron
More information about the cfe-commits
mailing list