[clang] [clang] AST Visitor: skip empty qualifiers in QualifiedTemplateName (PR #93926)

2024-06-03 Thread Matheus Izvekov via cfe-commits

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)

2024-05-31 Thread via cfe-commits

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)

2024-05-31 Thread Matheus Izvekov via cfe-commits

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)

2024-05-31 Thread Matheus Izvekov via cfe-commits


@@ -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)

2024-05-31 Thread Matheus Izvekov via cfe-commits

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)

2024-05-31 Thread Matheus Izvekov via cfe-commits


@@ -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)

2024-05-31 Thread via cfe-commits


@@ -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)

2024-05-31 Thread via cfe-commits

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)

2024-05-31 Thread via cfe-commits

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)

2024-05-31 Thread Matheus Izvekov via cfe-commits

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)

2024-05-31 Thread Matheus Izvekov via cfe-commits

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)

2024-05-31 Thread Matheus Izvekov via cfe-commits

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)

2024-05-30 Thread via cfe-commits

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)

2024-05-30 Thread via cfe-commits

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)

2024-05-30 Thread Matheus Izvekov via cfe-commits

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