[cfe-dev] [clang-tidy] hasParent for CXXCtorInitializer

Manuel Klimek via cfe-dev cfe-dev at lists.llvm.org
Wed Apr 27 01:10:37 PDT 2016


+sam and benjamin

On Tue, Apr 26, 2016 at 5:51 PM Alexander Kornienko <alexfh at google.com>
wrote:

> Manuel, do you have an idea what could be wrong here?
>

Generally, I'd expect this to happen if the CXXCtorInitializer is not in
the parent map. A patch with a failing test might help to see the problem.


>
>
> On Sat, Apr 16, 2016 at 7:22 PM, Piotr Padlewski <
> piotr.padlewski at gmail.com> wrote:
>
>> Hi folks,
>> I was wondering what is the best way to get to the CXXCtroInitializer
>> from child.
>>
>> In code like this:
>> struct A {
>>     A() : a(false), c(false) {}
>>     unsigned a : 1;
>>     unsigned c : 3;
>> };
>>
>> I am looking for implicit casts from bool.
>> I added CXXCtorInitializer into hasParent like this:
>>
>> const internal::ArgumentAdaptingMatcherFunc<
>>     internal::HasParentMatcher,
>>     internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc,
>> CXXCtorInitializer>,
>>     internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>>
>>     LLVM_ATTRIBUTE_UNUSED hasParent = {};
>>
>> so clang-query doesn't reject matcher:
>> implicitCastExpr(hasParent(cxxCtorInitializer()))
>> but it doesn't match with anything.
>>
>> I also tried something like this:
>>
>>   auto matcher =
>> hasAncestor(cxxConstructorDecl(hasAnyConstructorInitializer(
>>     cxxCtorInitializer(forField(isOneBitBitField()),
>>
>>  withInitializer(implicitCastExpr(equalsBoundNode("cast")))
>>                        ))));
>>
>> and then
>> implicitCastExpr(matcher).bind("cast")
>>
>> but it doesn't seems to work either.
>> Any thoughts?
>>
>> Piotr
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160427/9384bd56/attachment.html>


More information about the cfe-dev mailing list