[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
mizvekov wrote: > Even with this fix, I'm seeing a segfault in clang/lib/AST/QualTypeNames.cpp > at line 216. > I have a fix in testing that adds this check, but if you would double check > it after it goes in, that would be helpful. > > Unfortunately the failure is in an internal tool, against internal sources, > which makes getting a reproducer a long process. I'm also working on that. The fix gets the intended behavior right. There are `unittests` for QualTypeNames, a new test case could go in there. https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
Sterling-Augustine wrote: Even with this fix, I'm seeing a segfault in clang/lib/AST/QualTypeNames.cpp at line 216. ``` switch(Scope->getKind()) { ``` Scope is nullptr. The call is from line 70: ``` QualifiedTemplateName *QTName = TName.getAsQualifiedTemplateName(); if (QTName && !QTName->hasTemplateKeyword()) { NNS = QTName->getQualifier(); NestedNameSpecifier *QNNS = getFullyQualifiedNestedNameSpecifier( Ctx, NNS, WithGlobalNsPrefix); ``` which means that the `QTName->getQualifier()` is returning nullptr where it didn't before. Checking QTName->getQualifier() for nullptr in the conditional (so it can take the else side), everything works. But it seems to me that there is probably a better fix that someone familiar with the code would be able to figure out. I'm not even sure the original is doing the right thing. I have a fix in testing that adds this check, but if you would double check it after it goes in, that would be helpful. Unfortunately the failure is in an internal tool, against internal sources, which makes getting a reproducer a long process. I'm also working on that. https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/mizvekov closed https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
@@ -855,10 +855,14 @@ bool RecursiveASTVisitor::TraverseDeclarationNameInfo( template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) + if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) -TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); + } else if (QualifiedTemplateName *QTN = + Template.getAsQualifiedTemplateName()) { +if (QTN->getQualifier()) { + TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); +} + } mizvekov wrote: I am going to merge since this fixes broken build bot. Let's continue in post. https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/mizvekov edited https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
@@ -855,10 +855,14 @@ bool RecursiveASTVisitor::TraverseDeclarationNameInfo( template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) + if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) -TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); + } else if (QualifiedTemplateName *QTN = + Template.getAsQualifiedTemplateName()) { +if (QTN->getQualifier()) { + TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); +} + } mizvekov wrote: I understand that looks cleaner at first glance, but the intention in the original code was to match each kind of `TemplateName`. For example, this doesn't traverse `OverloadTemplateName` right now, but if we wanted to add it after this change, this would necessitate to refactor the if branches once again. https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
@@ -855,10 +855,14 @@ bool RecursiveASTVisitor::TraverseDeclarationNameInfo( template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) + if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) -TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); + } else if (QualifiedTemplateName *QTN = + Template.getAsQualifiedTemplateName()) { +if (QTN->getQualifier()) { + TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); +} + } cor3ntin wrote: ```suggestion } else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName(); QTN && QTN->getQualifier()) { TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); } ``` https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/cor3ntin edited https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/cor3ntin approved this pull request. LGTM (modulo suggestion) https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/mizvekov edited https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/mizvekov updated https://github.com/llvm/llvm-project/pull/93926 >From 55d946648a44e7a0b2fc45d20866f29ef4528c15 Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Fri, 31 May 2024 02:53:18 -0300 Subject: [PATCH] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName This change was missed in #93433. --- clang/include/clang/AST/RecursiveASTVisitor.h | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 4bbb4380cdd7f..99093aa17972c 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -855,10 +855,14 @@ bool RecursiveASTVisitor::TraverseDeclarationNameInfo( template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) + if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) -TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); + } else if (QualifiedTemplateName *QTN = + Template.getAsQualifiedTemplateName()) { +if (QTN->getQualifier()) { + TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); +} + } return true; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/mizvekov updated https://github.com/llvm/llvm-project/pull/93926 >From db56ac3130164f570942d54686ffb39cf7d2ae33 Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Fri, 31 May 2024 02:53:18 -0300 Subject: [PATCH] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName This change was missed in #93433. --- clang/include/clang/AST/RecursiveASTVisitor.h | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 4bbb4380cdd7f..d16074443b2dc 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -855,10 +855,14 @@ bool RecursiveASTVisitor::TraverseDeclarationNameInfo( template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) + if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) -TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); + } else if (QualifiedTemplateName *QTN = + Template.getAsQualifiedTemplateName()) { +if (T->getQualifier()) { + TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); +} + } return true; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
github-actions[bot] wrote: :warning: C/C++ code formatter, clang-format found issues in your code. :warning: You can test this locally with the following command: ``bash git-clang-format --diff c5fdb5c34e0dc3f5f3c0db19cf704b30a778cd0e dd8839b4f3294241b2a6df8bc10e869176baff72 -- clang/include/clang/AST/RecursiveASTVisitor.h `` View the diff from clang-format here. ``diff diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 28a90dffcb..d16074443b 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -857,7 +857,8 @@ template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - } else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) { + } else if (QualifiedTemplateName *QTN = + Template.getAsQualifiedTemplateName()) { if (T->getQualifier()) { TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); } `` https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
llvmbot wrote: @llvm/pr-subscribers-clang Author: Matheus Izvekov (mizvekov) Changes This change was missed in #93433. --- Full diff: https://github.com/llvm/llvm-project/pull/93926.diff 1 Files Affected: - (modified) clang/include/clang/AST/RecursiveASTVisitor.h (+6-3) ``diff diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 4bbb4380cdd7f..28a90dffcb8dc 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -855,10 +855,13 @@ bool RecursiveASTVisitor::TraverseDeclarationNameInfo( template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) + if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) -TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); + } else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) { +if (T->getQualifier()) { + TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); +} + } return true; } `` https://github.com/llvm/llvm-project/pull/93926 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)
https://github.com/mizvekov created https://github.com/llvm/llvm-project/pull/93926 This change was missed in #93433. >From dd8839b4f3294241b2a6df8bc10e869176baff72 Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Fri, 31 May 2024 02:53:18 -0300 Subject: [PATCH] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName This change was missed in #93433. --- clang/include/clang/AST/RecursiveASTVisitor.h | 9 ++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 4bbb4380cdd7f..28a90dffcb8dc 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -855,10 +855,13 @@ bool RecursiveASTVisitor::TraverseDeclarationNameInfo( template bool RecursiveASTVisitor::TraverseTemplateName(TemplateName Template) { - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) + if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) { TRY_TO(TraverseNestedNameSpecifier(DTN->getQualifier())); - else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) -TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); + } else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) { +if (T->getQualifier()) { + TRY_TO(TraverseNestedNameSpecifier(QTN->getQualifier())); +} + } return true; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits