Commit 2883cd18 authored by Johann's avatar Johann Committed by Commit Bot

clang plugins: default no-members-in-stack-allocated to on

Artifacts can be removed after the clang prebuilt is updated.

Change-Id: I473c22843445745a39d1fc648a7bbcc336631b8f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2152329Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Reviewed-by: default avatarAnton Bikineev <bikineev@chromium.org>
Reviewed-by: default avatarNico Weber <thakis@chromium.org>
Commit-Queue: Johann Koenig <johannkoenig@google.com>
Cr-Commit-Position: refs/heads/master@{#759880}
parent 99f41046
...@@ -116,6 +116,7 @@ config("config") { ...@@ -116,6 +116,7 @@ config("config") {
"blink-gc-plugin", "blink-gc-plugin",
] ]
# TODO(bikineev): Remove when clang pre-built has been updated.
# Disallow members in stack allocated classes. # Disallow members in stack allocated classes.
cflags += [ cflags += [
"-Xclang", "-Xclang",
......
...@@ -34,7 +34,9 @@ class BlinkGCPluginAction : public PluginASTAction { ...@@ -34,7 +34,9 @@ class BlinkGCPluginAction : public PluginASTAction {
if (arg == "dump-graph") { if (arg == "dump-graph") {
options_.dump_graph = true; options_.dump_graph = true;
} else if (arg == "no-members-in-stack-allocated") { } else if (arg == "no-members-in-stack-allocated") {
options_.no_members_in_stack_allocated = true; // TODO(bikineev): Flag is on by default. Remove after
// third_party/blink/renderer/BUILD.gn has been updated.
continue;
} else if (arg == "enable-weak-members-in-unmanaged-classes") { } else if (arg == "enable-weak-members-in-unmanaged-classes") {
options_.enable_weak_members_in_unmanaged_classes = true; options_.enable_weak_members_in_unmanaged_classes = true;
} else { } else {
......
...@@ -12,9 +12,6 @@ ...@@ -12,9 +12,6 @@
struct BlinkGCPluginOptions { struct BlinkGCPluginOptions {
bool dump_graph = false; bool dump_graph = false;
// If |true|, disallow Member types in stack allocated classes.
bool no_members_in_stack_allocated = false;
// Member<T> fields are only permitted in managed classes, // Member<T> fields are only permitted in managed classes,
// something CheckFieldsVisitor verifies, issuing errors if // something CheckFieldsVisitor verifies, issuing errors if
// found in unmanaged classes. WeakMember<T> should be treated // found in unmanaged classes. WeakMember<T> should be treated
......
...@@ -78,16 +78,14 @@ void CheckFieldsVisitor::AtValue(Value* edge) { ...@@ -78,16 +78,14 @@ void CheckFieldsVisitor::AtValue(Value* edge) {
return; return;
} }
if (options_.no_members_in_stack_allocated) { // Members/WeakMembers are prohibited if the host is stack allocated, but
// Members/WeakMembers are prohibited if the host is stack allocated, but // heap collections with Members are okay.
// heap collections with Members are okay. if (stack_allocated_host_ && Parent() &&
if (stack_allocated_host_ && Parent() && (Parent()->IsMember() || Parent()->IsWeakMember())) {
(Parent()->IsMember() || Parent()->IsWeakMember())) { if (!GrandParent() || !GrandParent()->IsCollection()) {
if (!GrandParent() || !GrandParent()->IsCollection()) { invalid_fields_.push_back(
invalid_fields_.push_back( std::make_pair(current_, kMemberInStackAllocated));
std::make_pair(current_, kMemberInStackAllocated)); return;
return;
}
} }
} }
...@@ -117,8 +115,7 @@ void CheckFieldsVisitor::AtValue(Value* edge) { ...@@ -117,8 +115,7 @@ void CheckFieldsVisitor::AtValue(Value* edge) {
current_, InvalidSmartPtr(Parent()))); current_, InvalidSmartPtr(Parent())));
return; return;
} }
if (Parent()->IsRawPtr() && if (Parent()->IsRawPtr() && !stack_allocated_host_) {
!(stack_allocated_host_ && options_.no_members_in_stack_allocated)) {
RawPtr* rawPtr = static_cast<RawPtr*>(Parent()); RawPtr* rawPtr = static_cast<RawPtr*>(Parent());
Error error = rawPtr->HasReferenceType() ? Error error = rawPtr->HasReferenceType() ?
kReferencePtrToGCManaged : kRawPtrToGCManaged; kReferencePtrToGCManaged : kRawPtrToGCManaged;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment