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

Side by Side Diff: tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.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: Revert the old fix attempt 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
« no previous file with comments | « no previous file | tools/clang/blink_gc_plugin/RecordInfo.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "BlinkGCPluginConsumer.h" 5 #include "BlinkGCPluginConsumer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "CheckDispatchVisitor.h" 10 #include "CheckDispatchVisitor.h"
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 ReportDiagnostic(info->record()->getInnerLocStart(), 966 ReportDiagnostic(info->record()->getInnerLocStart(),
967 diag_class_must_left_mostly_derive_gc_) 967 diag_class_must_left_mostly_derive_gc_)
968 << info->record(); 968 << info->record();
969 } 969 }
970 970
971 void BlinkGCPluginConsumer::ReportClassRequiresTraceMethod(RecordInfo* info) { 971 void BlinkGCPluginConsumer::ReportClassRequiresTraceMethod(RecordInfo* info) {
972 ReportDiagnostic(info->record()->getInnerLocStart(), 972 ReportDiagnostic(info->record()->getInnerLocStart(),
973 diag_class_requires_trace_method_) 973 diag_class_requires_trace_method_)
974 << info->record(); 974 << info->record();
975 975
976 // Use an intermediate map to sort the notes by source location. 976 for (RecordInfo::Bases::iterator it = info->GetBases().begin();
977 std::map<clang::SourceLocation, BasePoint*> BaseNotes; 977 it != info->GetBases().end();
978 for (auto& pair : info->GetBases()) { 978 ++it) {
979 if (pair.second.NeedsTracing().IsNeeded()) 979 if (it->second.NeedsTracing().IsNeeded())
980 BaseNotes.insert(std::make_pair(pair.first->getLocStart(), &pair.second)); 980 NoteBaseRequiresTracing(&it->second);
981 } 981 }
982 for (auto& pair : BaseNotes)
983 NoteBaseRequiresTracing(pair.second);
984 982
985 // Use an intermediate map to sort the notes by source location. 983 for (RecordInfo::Fields::iterator it = info->GetFields().begin();
986 std::map<clang::SourceLocation, clang::FieldDecl*> FieldNotes; 984 it != info->GetFields().end();
987 for (auto& pair : info->GetFields()) { 985 ++it) {
988 if (!pair.second.IsProperlyTraced()) 986 if (!it->second.IsProperlyTraced())
989 FieldNotes.insert(std::make_pair(pair.first->getLocStart(), pair.first)); 987 NoteFieldRequiresTracing(info, it->first);
990 } 988 }
991 for (auto& pair : FieldNotes)
992 NoteFieldRequiresTracing(info, pair.second);
993 } 989 }
994 990
995 void BlinkGCPluginConsumer::ReportBaseRequiresTracing( 991 void BlinkGCPluginConsumer::ReportBaseRequiresTracing(
996 RecordInfo* derived, 992 RecordInfo* derived,
997 CXXMethodDecl* trace, 993 CXXMethodDecl* trace,
998 CXXRecordDecl* base) { 994 CXXRecordDecl* base) {
999 ReportDiagnostic(trace->getLocStart(), diag_base_requires_tracing_) 995 ReportDiagnostic(trace->getLocStart(), diag_base_requires_tracing_)
1000 << base << derived->record(); 996 << base << derived->record();
1001 } 997 }
1002 998
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 void BlinkGCPluginConsumer::NoteField(FieldDecl* field, unsigned note) { 1245 void BlinkGCPluginConsumer::NoteField(FieldDecl* field, unsigned note) {
1250 ReportDiagnostic(field->getLocStart(), note) << field; 1246 ReportDiagnostic(field->getLocStart(), note) << field;
1251 } 1247 }
1252 1248
1253 void BlinkGCPluginConsumer::NoteOverriddenNonVirtualTrace( 1249 void BlinkGCPluginConsumer::NoteOverriddenNonVirtualTrace(
1254 CXXMethodDecl* overridden) { 1250 CXXMethodDecl* overridden) {
1255 ReportDiagnostic(overridden->getLocStart(), 1251 ReportDiagnostic(overridden->getLocStart(),
1256 diag_overridden_non_virtual_trace_note_) 1252 diag_overridden_non_virtual_trace_note_)
1257 << overridden; 1253 << overridden;
1258 } 1254 }
OLDNEW
« no previous file with comments | « no previous file | tools/clang/blink_gc_plugin/RecordInfo.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698