Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: tools/clang/blink_gc_plugin/CheckFinalizerVisitor.cpp

Issue 1645763004: blink_gc_plugin: Make RecordInfo::Get{Fields,Bases} return deterministic order (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "CheckFinalizerVisitor.h" 5 #include "CheckFinalizerVisitor.h"
6 6
7 using namespace clang; 7 using namespace clang;
8 8
9 namespace { 9 namespace {
10 10
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 100
101 bool CheckFinalizerVisitor::VisitMemberExpr(MemberExpr* member) { 101 bool CheckFinalizerVisitor::VisitMemberExpr(MemberExpr* member) {
102 FieldDecl* field = dyn_cast<FieldDecl>(member->getMemberDecl()); 102 FieldDecl* field = dyn_cast<FieldDecl>(member->getMemberDecl());
103 if (!field) 103 if (!field)
104 return true; 104 return true;
105 105
106 RecordInfo* info = cache_->Lookup(field->getParent()); 106 RecordInfo* info = cache_->Lookup(field->getParent());
107 if (!info) 107 if (!info)
108 return true; 108 return true;
109 109
110 RecordInfo::Fields::iterator it = info->GetFields().find(field); 110 if (!info->HasField(field))
111 if (it == info->GetFields().end())
112 return true; 111 return true;
113 112
114 if (seen_members_.find(member) != seen_members_.end()) 113 if (seen_members_.find(member) != seen_members_.end())
115 return true; 114 return true;
116 115
117 bool as_eagerly_finalized = false; 116 bool as_eagerly_finalized = false;
118 if (blacklist_context_ && 117 if (blacklist_context_ &&
119 MightBeCollected(&it->second, &as_eagerly_finalized)) { 118 MightBeCollected(&info->GetField(field).second, &as_eagerly_finalized)) {
120 finalized_fields_.push_back( 119 finalized_fields_.push_back(
121 Error(member, as_eagerly_finalized, &it->second)); 120 Error(member, as_eagerly_finalized, &info->GetField(field).second));
122 seen_members_.insert(member); 121 seen_members_.insert(member);
123 } 122 }
124 return true; 123 return true;
125 } 124 }
126 125
127 bool CheckFinalizerVisitor::MightBeCollected(FieldPoint* point, 126 bool CheckFinalizerVisitor::MightBeCollected(FieldPoint* point,
128 bool* as_eagerly_finalized) { 127 bool* as_eagerly_finalized) {
129 MightBeCollectedVisitor visitor(is_eagerly_finalized_); 128 MightBeCollectedVisitor visitor(is_eagerly_finalized_);
130 point->edge()->Accept(&visitor); 129 point->edge()->Accept(&visitor);
131 *as_eagerly_finalized = visitor.as_eagerly_finalized(); 130 *as_eagerly_finalized = visitor.as_eagerly_finalized();
132 return visitor.might_be_collected(); 131 return visitor.might_be_collected();
133 } 132 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698