[PATCH] D77656: [clangd] Fix a crash bug in AddUsing tweak around template handling.

2020-04-08 Thread Sam McCall via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGcca10be3f60d: [clangd] Fix a crash bug in AddUsing tweak 
around template handling. (authored by adamcz, committed by sammccall).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77656/new/

https://reviews.llvm.org/D77656

Files:
  clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
  clang-tools-extra/clangd/unittests/TweakTests.cpp


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we 
just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,11 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name = BaseTypeIdentifier->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,11 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name = BaseTypeIdentifier->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77656: [clangd] Fix a crash bug in AddUsing tweak around template handling.

2020-04-08 Thread Adam Czachorowski via Phabricator via cfe-commits
adamcz marked an inline comment as done.
adamcz added a comment.

Can you submit this? Thanks!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77656/new/

https://reviews.llvm.org/D77656



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77656: [clangd] Fix a crash bug in AddUsing tweak around template handling.

2020-04-08 Thread Adam Czachorowski via Phabricator via cfe-commits
adamcz updated this revision to Diff 255950.
adamcz added a comment.

review comment


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77656/new/

https://reviews.llvm.org/D77656

Files:
  clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
  clang-tools-extra/clangd/unittests/TweakTests.cpp


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we 
just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,11 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name = BaseTypeIdentifier->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,11 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name = BaseTypeIdentifier->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77656: [clangd] Fix a crash bug in AddUsing tweak around template handling.

2020-04-07 Thread Sam McCall via Phabricator via cfe-commits
sammccall accepted this revision.
sammccall added a comment.
This revision is now accepted and ready to land.

Whoops, indeed.
There should be a version of falsehoods programmers believe about names 

 for the clang AST :-)

- Decls have names
- well, NamedDecls have names
- Decls that are not NamedDecls don't have names
- if a NamedDecl has a name, that name is an identifier
- ...




Comment at: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp:212
+Name =
+
E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+QualifierToRemove = E.getQualifierLoc();

BaseTypeIdentifier->getName()


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77656/new/

https://reviews.llvm.org/D77656



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77656: [clangd] Fix a crash bug in AddUsing tweak around template handling.

2020-04-07 Thread Adam Czachorowski via Phabricator via cfe-commits
adamcz created this revision.
adamcz added a reviewer: sammccall.
Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman, jkorous, 
MaskRay, ilya-biryukov.
Herald added a project: clang.
adamcz updated this revision to Diff 255694.
adamcz added a comment.

Removed unnecessary change.


The crash happened on cases like:
template using one = two::three;
because we tried to call getName() on getBaseTypeIdentifier(), which can
be nullptr.

Ideally we would support this use case as well, but for now not crashing
will do.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77656

Files:
  clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
  clang-tools-extra/clangd/unittests/TweakTests.cpp


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we 
just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,12 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name =
+
E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,12 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name =
+E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77656: [clangd] Fix a crash bug in AddUsing tweak around template handling.

2020-04-07 Thread Adam Czachorowski via Phabricator via cfe-commits
adamcz updated this revision to Diff 255694.
adamcz added a comment.

Removed unnecessary change.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77656/new/

https://reviews.llvm.org/D77656

Files:
  clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
  clang-tools-extra/clangd/unittests/TweakTests.cpp


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we 
just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,12 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name =
+
E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2436,6 +2436,7 @@
 #define NS(name) one::two::name
 namespace one {
 void oo() {}
+template class tt {};
 namespace two {
 enum ee {};
 void ff() {}
@@ -2458,6 +2459,10 @@
   EXPECT_UNAVAILABLE(Header +
  "void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
   EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
+  // This used to crash. Ideally we would support this case, but for now we just
+  // test that we don't crash.
+  EXPECT_UNAVAILABLE(Header +
+ "template using foo = one::tt;");
 }
 
 TEST_F(AddUsingTest, Apply) {
Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -206,9 +206,12 @@
 Name = D->getDecl()->getName();
   } else if (auto *T = Node->ASTNode.get()) {
 if (auto E = T->getAs()) {
-  QualifierToRemove = E.getQualifierLoc();
-  Name =
-  E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+  if (auto *BaseTypeIdentifier =
+  E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
+Name =
+E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
+QualifierToRemove = E.getQualifierLoc();
+  }
 }
   }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits