[cfe-dev] [clang-tidy][Sema][AST] Different behavior Sema and AST matcher

Carlos Galvez via cfe-dev cfe-dev at lists.llvm.org
Thu Oct 28 01:24:18 PDT 2021


> What does the original (buggy) implementation use instead of
cxxDestructorDecl::isVirtual?

It used this matcher:

      cxxRecordDecl(
          anyOf(has(cxxMethodDecl(isVirtual())), InheritsVirtualMethod),
          unless(anyOf(
              has(cxxDestructorDecl(isPublic(), isVirtual())),
              has(cxxDestructorDecl(isProtected(), unless(isVirtual()))))))
          .bind("ProblematicClassOrStruct"),

So the line:

              has(cxxDestructorDecl(isPublic(), isVirtual())),

Should have done the job, but it didn't.


On Mon, Oct 25, 2021 at 7:06 PM David Blaikie <dblaikie at gmail.com> wrote:

> On Sun, Oct 10, 2021 at 6:46 AM Carlos Galvez via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> Hi!
>>
>> As proposed by @whisperity I'm posting here to ask about a strange
>> situation we found in the following bug fix:
>>
>> https://reviews.llvm.org/D110614
>>
>> We had a matcher to detect if a class has a public virtual destructor:
>>
>> has(cxxDestructorDecl(isPublic(), isVirtual())),
>>
>> However this didn't work for class templates, see details:
>>
>> https://reviews.llvm.org/D110614#3032760
>>
>> The workaround was to create a custom matcher that seems to do the same
>> thing as the original matcher, but it actually works for templates because
>> it calls cxxDestructorDecl::isVirtual() (from Sema), which correctly
>> propagates the virtual specifier from the base class.
>>
>
> What does the original (buggy) implementation use instead of
> cxxDestructorDecl::isVirtual? If the original's just using the wrong query
> for testing virtuality that seems like a reasonable thing to fix as a bug?
>
>
>>
>> Is this a concern, and should someone look into Sema/AST? (I'm
>> unfortunately a n00b here). Or should we just merge the clang-tidy fix and
>> move on?
>>
>> Thanks!
>> _______________________________________________
>> 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/20211028/12b52841/attachment-0001.html>


More information about the cfe-dev mailing list