diff options
| author | Haojian Wu <hokein@google.com> | 2019-10-04 14:09:31 +0000 |
|---|---|---|
| committer | Haojian Wu <hokein@google.com> | 2019-10-04 14:09:31 +0000 |
| commit | 5d862c042b52ae2aad37471d0b83b6c678a520e3 (patch) | |
| tree | db32435720d59b9e182954c1d385851364bff6e6 /clang | |
| parent | a37a6dcd04b0c0a0f9eea93ba0a5070a5421a29a (diff) | |
| download | bcm5719-llvm-5d862c042b52ae2aad37471d0b83b6c678a520e3.tar.gz bcm5719-llvm-5d862c042b52ae2aad37471d0b83b6c678a520e3.zip | |
[clang-rename] Fix a crash when renaming a class without definition.
Reviewers: sammccall
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D68459
llvm-svn: 373748
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp | 4 | ||||
| -rw-r--r-- | clang/test/clang-rename/ForwardClassDecl.cpp | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp b/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp index b60616ecc87..e26248f50c2 100644 --- a/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp +++ b/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp @@ -102,6 +102,10 @@ public: private: void handleCXXRecordDecl(const CXXRecordDecl *RecordDecl) { + if (!RecordDecl->getDefinition()) { + USRSet.insert(getUSRForDecl(RecordDecl)); + return; + } RecordDecl = RecordDecl->getDefinition(); if (const auto *ClassTemplateSpecDecl = dyn_cast<ClassTemplateSpecializationDecl>(RecordDecl)) diff --git a/clang/test/clang-rename/ForwardClassDecl.cpp b/clang/test/clang-rename/ForwardClassDecl.cpp new file mode 100644 index 00000000000..ef731a16d6e --- /dev/null +++ b/clang/test/clang-rename/ForwardClassDecl.cpp @@ -0,0 +1,4 @@ +class Foo; // CHECK: class Bar; +Foo *f(); // CHECK: Bar *f(); + +// RUN: clang-rename -offset=6 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s |

