summaryrefslogtreecommitdiffstats
path: root/clang/lib/Tooling/Refactoring/RangeSelector.cpp
diff options
context:
space:
mode:
authorYitzhak Mandelbaum <yitzhakm@google.com>2019-05-23 17:11:33 +0000
committerYitzhak Mandelbaum <yitzhakm@google.com>2019-05-23 17:11:33 +0000
commitaa7a2c547e2802f15c9346bff18c5d5c585ab882 (patch)
tree43b24469038a3c80e7f2e2236fc6df4838461cce /clang/lib/Tooling/Refactoring/RangeSelector.cpp
parentc5ec2a2bc1980e21910ca5c649cc0c3346979fa7 (diff)
downloadbcm5719-llvm-aa7a2c547e2802f15c9346bff18c5d5c585ab882.tar.gz
bcm5719-llvm-aa7a2c547e2802f15c9346bff18c5d5c585ab882.zip
[LibTooling] Fix dangling references in RangeSelector.
Summary: RangeSelector had a number of cases of capturing a StringRef in a lambda, which lead to dangling references. This change converts all uses in the API of `StringRef` to `std::string` to avoid this problem. `std::string` in the API is a reasonable choice, because the combinators are always storing the string beyond the life of the combinator construction. Reviewers: ilya-biryukov, gribozavr Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D62328 llvm-svn: 361514
Diffstat (limited to 'clang/lib/Tooling/Refactoring/RangeSelector.cpp')
-rw-r--r--clang/lib/Tooling/Refactoring/RangeSelector.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/clang/lib/Tooling/Refactoring/RangeSelector.cpp b/clang/lib/Tooling/Refactoring/RangeSelector.cpp
index 92426db3a5e..d5f82d4262b 100644
--- a/clang/lib/Tooling/Refactoring/RangeSelector.cpp
+++ b/clang/lib/Tooling/Refactoring/RangeSelector.cpp
@@ -104,7 +104,7 @@ static SourceLocation findOpenParen(const CallExpr &E, const SourceManager &SM,
return findPreviousTokenKind(EndLoc, SM, LangOpts, tok::TokenKind::l_paren);
}
-RangeSelector tooling::node(StringRef ID) {
+RangeSelector tooling::node(std::string ID) {
return [ID](const MatchResult &Result) -> Expected<CharSourceRange> {
Expected<DynTypedNode> Node = getNode(Result.Nodes, ID);
if (!Node)
@@ -115,7 +115,7 @@ RangeSelector tooling::node(StringRef ID) {
};
}
-RangeSelector tooling::statement(StringRef ID) {
+RangeSelector tooling::statement(std::string ID) {
return [ID](const MatchResult &Result) -> Expected<CharSourceRange> {
Expected<DynTypedNode> Node = getNode(Result.Nodes, ID);
if (!Node)
@@ -143,11 +143,11 @@ RangeSelector tooling::range(RangeSelector Begin, RangeSelector End) {
};
}
-RangeSelector tooling::range(StringRef BeginID, StringRef EndID) {
- return tooling::range(node(BeginID), node(EndID));
+RangeSelector tooling::range(std::string BeginID, std::string EndID) {
+ return tooling::range(node(std::move(BeginID)), node(std::move(EndID)));
}
-RangeSelector tooling::member(StringRef ID) {
+RangeSelector tooling::member(std::string ID) {
return [ID](const MatchResult &Result) -> Expected<CharSourceRange> {
Expected<DynTypedNode> Node = getNode(Result.Nodes, ID);
if (!Node)
@@ -159,7 +159,7 @@ RangeSelector tooling::member(StringRef ID) {
};
}
-RangeSelector tooling::name(StringRef ID) {
+RangeSelector tooling::name(std::string ID) {
return [ID](const MatchResult &Result) -> Expected<CharSourceRange> {
Expected<DynTypedNode> N = getNode(Result.Nodes, ID);
if (!N)
@@ -205,7 +205,7 @@ class RelativeSelector {
std::string ID;
public:
- RelativeSelector(StringRef ID) : ID(ID) {}
+ RelativeSelector(std::string ID) : ID(std::move(ID)) {}
Expected<CharSourceRange> operator()(const MatchResult &Result) {
Expected<DynTypedNode> N = getNode(Result.Nodes, ID);
@@ -231,8 +231,8 @@ CharSourceRange getStatementsRange(const MatchResult &,
}
} // namespace
-RangeSelector tooling::statements(StringRef ID) {
- return RelativeSelector<CompoundStmt, getStatementsRange>(ID);
+RangeSelector tooling::statements(std::string ID) {
+ return RelativeSelector<CompoundStmt, getStatementsRange>(std::move(ID));
}
namespace {
@@ -246,8 +246,8 @@ CharSourceRange getCallArgumentsRange(const MatchResult &Result,
}
} // namespace
-RangeSelector tooling::callArgs(StringRef ID) {
- return RelativeSelector<CallExpr, getCallArgumentsRange>(ID);
+RangeSelector tooling::callArgs(std::string ID) {
+ return RelativeSelector<CallExpr, getCallArgumentsRange>(std::move(ID));
}
namespace {
@@ -260,8 +260,8 @@ CharSourceRange getElementsRange(const MatchResult &,
}
} // namespace
-RangeSelector tooling::initListElements(StringRef ID) {
- return RelativeSelector<InitListExpr, getElementsRange>(ID);
+RangeSelector tooling::initListElements(std::string ID) {
+ return RelativeSelector<InitListExpr, getElementsRange>(std::move(ID));
}
RangeSelector tooling::expansion(RangeSelector S) {
OpenPOWER on IntegriCloud