[PATCH] D140598: [Clang] Add sanity check in Sema::getDestructorName to prevent nullptr dereference
Shafik Yaghmour via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 23 16:43:18 PST 2023
shafik updated this revision to Diff 491554.
shafik marked 2 inline comments as done.
shafik added a comment.
- Switched to isValid() over isSet()
- Added release note
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D140598/new/
https://reviews.llvm.org/D140598
Files:
clang/docs/ReleaseNotes.rst
clang/lib/Sema/SemaExprCXX.cpp
clang/test/SemaCXX/GH59446.cpp
Index: clang/test/SemaCXX/GH59446.cpp
===================================================================
--- /dev/null
+++ clang/test/SemaCXX/GH59446.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
+
+namespace GH59446 { // expected-note {{to match this '{'}}
+namespace N {
+ template <typename T> struct X ; // expected-note 2 {{template is declared here}}
+ // expected-note at -1 {{'N::X' declared here}}
+ // expected-note at -2 {{non-type declaration found by destructor name lookup}}
+ }
+ void f(X<int> *x) { // expected-error {{no template named 'X'; did you mean 'N::X'}}
+ x->N::X<int>::~X(); // expected-error 2 {{implicit instantiation of undefined template 'GH59446::N::X<int>'}}
+ // expected-error at -1 {{identifier 'X' after '~' in destructor name does not name a type}}
+} // expected-error {{expected '}'}}
Index: clang/lib/Sema/SemaExprCXX.cpp
===================================================================
--- clang/lib/Sema/SemaExprCXX.cpp
+++ clang/lib/Sema/SemaExprCXX.cpp
@@ -391,7 +391,7 @@
//
// also looks for type-name in the scope. Unfortunately, we can't
// reasonably apply this fallback for dependent nested-name-specifiers.
- if (SS.getScopeRep()->getPrefix()) {
+ if (SS.isValid() && SS.getScopeRep()->getPrefix()) {
if (ParsedType T = LookupInScope()) {
Diag(SS.getEndLoc(), diag::ext_qualified_dtor_named_in_lexical_scope)
<< FixItHint::CreateRemoval(SS.getRange());
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -356,6 +356,9 @@
`Issue 51227 <https://github.com/llvm/llvm-project/issues/51227>`_.
- Fix the bug of inserting the ``ZeroInitializationFixit`` before the template
argument list of ``VarTemplateSpecializationDecl``.
+- Fix crash on invalid code when looking up a destructor in a templated class
+ inside a namespace. This fixes
+ `Issue 59446 <https://github.com/llvm/llvm-project/issues/59446>`_.
Improvements to Clang's diagnostics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D140598.491554.patch
Type: text/x-patch
Size: 2209 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230124/97e1bc17/attachment.bin>
More information about the cfe-commits
mailing list