[cfe-dev] Matcher working in clang-query, but not in LibTooling

Stephen Kelly via cfe-dev cfe-dev at lists.llvm.org
Tue Nov 17 04:01:47 PST 2020


clang-query parsing is less strict than the c++ language, so there are 
probably a few of these differences.

I assume you realize that you should instead use either

unless(has())

or

has(decl(unless(cxxRecordDecl())))

depending on what you are trying to achieve?


On 16/11/2020 17:33, Hartogs Siegfried via cfe-dev wrote:
> A minimal code sample to trigger the error:
>
> #include "clang/ASTMatchers/ASTMatchers.h"
>
> using namespace clang::ast_matchers;
>
> int main(int argc, char** argv){
>     auto m = cxxRecordDecl(has(unless(cxxRecordDecl())));
>     return 0;
>
> }
>
> Best, Siegfried
>
>> On 16Nov, 2020, at 16:57, Hartogs Siegfried <hartogss at student.ethz.ch 
>> <mailto:hartogss at student.ethz.ch>> wrote:
>>
>> Hello everyone,
>>
>> Why is it that the following matcher
>>
>> cxxRecordDecl(has(unless(cxxRecordDecl())))
>>
>> works in clang-query, but when copied to to a .cpp file, it won't 
>> compile the matcher:
>>
>> ../lib/UsingAnalysis.cpp:46:29: error: no matching function for call 
>> to object of type 'const 
>> internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher>'
>>     auto m = cxxRecordDecl(has(unless(cxxRecordDecl())));
>>          ^~~
>> /usr/local/include/clang/ASTMatchers/ASTMatchersInternal.h:1183:3: 
>> note: candidate template ignored: could not match 'Matcher' against 
>> 'VariadicOperatorMatcher'
>> operator()(const Matcher<T> &InnerMatcher) const {
>>
>> Tried on macOS 10.13 & Ubuntu 20.04 with LLVM 11.0.0.
>>
>> Best,
>> Siegfried
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201117/0e1a3657/attachment-0001.html>


More information about the cfe-dev mailing list