summaryrefslogtreecommitdiffstats
path: root/clang/lib/Tooling
diff options
context:
space:
mode:
authorIlya Biryukov <ibiryukov@google.com>2020-01-14 16:27:06 +0100
committerIlya Biryukov <ibiryukov@google.com>2020-01-14 16:41:09 +0100
commit07a41018e9d27f67f7b4295eb7e00e0345c0aacf (patch)
tree04639b8d6f393da8f548a908e8f56a7c22af5025 /clang/lib/Tooling
parent3b929fe7763570fc1d4a4691a53257a4a0b7760e (diff)
downloadbcm5719-llvm-07a41018e9d27f67f7b4295eb7e00e0345c0aacf.tar.gz
bcm5719-llvm-07a41018e9d27f67f7b4295eb7e00e0345c0aacf.zip
[Syntax] Mark synthesized nodes as modifiable
This was an oversight in the original patch. Also add corresponding tests.
Diffstat (limited to 'clang/lib/Tooling')
-rw-r--r--clang/lib/Tooling/Syntax/Synthesis.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Tooling/Syntax/Synthesis.cpp b/clang/lib/Tooling/Syntax/Synthesis.cpp
index cbd9579f4f0..aa01a34c761 100644
--- a/clang/lib/Tooling/Syntax/Synthesis.cpp
+++ b/clang/lib/Tooling/Syntax/Synthesis.cpp
@@ -13,6 +13,8 @@ using namespace clang;
/// Should not be used for anything else.
class syntax::FactoryImpl {
public:
+ static void setCanModify(syntax::Node *N) { N->CanModify = true; }
+
static void prependChildLowLevel(syntax::Tree *T, syntax::Node *Child,
syntax::NodeRole R) {
T->prependChildLowLevel(Child, R);
@@ -27,6 +29,7 @@ clang::syntax::Leaf *syntax::createPunctuation(clang::syntax::Arena &A,
assert(Tokens.size() == 1);
assert(Tokens.front().kind() == K);
auto *L = new (A.allocator()) clang::syntax::Leaf(Tokens.begin());
+ FactoryImpl::setCanModify(L);
L->assertInvariants();
return L;
}
@@ -34,6 +37,7 @@ clang::syntax::Leaf *syntax::createPunctuation(clang::syntax::Arena &A,
clang::syntax::EmptyStatement *
syntax::createEmptyStatement(clang::syntax::Arena &A) {
auto *S = new (A.allocator()) clang::syntax::EmptyStatement;
+ FactoryImpl::setCanModify(S);
FactoryImpl::prependChildLowLevel(S, createPunctuation(A, clang::tok::semi),
NodeRole::Unknown);
S->assertInvariants();
OpenPOWER on IntegriCloud