| OLD | NEW |
| 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 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 diag_class_must_left_mostly_derive_gc_ = diagnostic_.getCustomDiagID( | 206 diag_class_must_left_mostly_derive_gc_ = diagnostic_.getCustomDiagID( |
| 207 getErrorLevel(), kClassMustLeftMostlyDeriveGC); | 207 getErrorLevel(), kClassMustLeftMostlyDeriveGC); |
| 208 diag_class_requires_trace_method_ = | 208 diag_class_requires_trace_method_ = |
| 209 diagnostic_.getCustomDiagID(getErrorLevel(), kClassRequiresTraceMethod); | 209 diagnostic_.getCustomDiagID(getErrorLevel(), kClassRequiresTraceMethod); |
| 210 diag_base_requires_tracing_ = | 210 diag_base_requires_tracing_ = |
| 211 diagnostic_.getCustomDiagID(getErrorLevel(), kBaseRequiresTracing); | 211 diagnostic_.getCustomDiagID(getErrorLevel(), kBaseRequiresTracing); |
| 212 diag_fields_require_tracing_ = | 212 diag_fields_require_tracing_ = |
| 213 diagnostic_.getCustomDiagID(getErrorLevel(), kFieldsRequireTracing); | 213 diagnostic_.getCustomDiagID(getErrorLevel(), kFieldsRequireTracing); |
| 214 diag_class_contains_invalid_fields_ = diagnostic_.getCustomDiagID( | 214 diag_class_contains_invalid_fields_ = diagnostic_.getCustomDiagID( |
| 215 getErrorLevel(), kClassContainsInvalidFields); | 215 getErrorLevel(), kClassContainsInvalidFields); |
| 216 diag_class_contains_invalid_fields_warning_ = diagnostic_.getCustomDiagID( | |
| 217 getErrorLevel(), kClassContainsInvalidFields); | |
| 218 diag_class_contains_gc_root_ = | 216 diag_class_contains_gc_root_ = |
| 219 diagnostic_.getCustomDiagID(getErrorLevel(), kClassContainsGCRoot); | 217 diagnostic_.getCustomDiagID(getErrorLevel(), kClassContainsGCRoot); |
| 220 diag_class_requires_finalization_ = diagnostic_.getCustomDiagID( | 218 diag_class_requires_finalization_ = diagnostic_.getCustomDiagID( |
| 221 getErrorLevel(), kClassRequiresFinalization); | 219 getErrorLevel(), kClassRequiresFinalization); |
| 222 diag_class_does_not_require_finalization_ = diagnostic_.getCustomDiagID( | 220 diag_class_does_not_require_finalization_ = diagnostic_.getCustomDiagID( |
| 223 DiagnosticsEngine::Warning, kClassDoesNotRequireFinalization); | 221 DiagnosticsEngine::Warning, kClassDoesNotRequireFinalization); |
| 224 diag_finalizer_accesses_finalized_field_ = diagnostic_.getCustomDiagID( | 222 diag_finalizer_accesses_finalized_field_ = diagnostic_.getCustomDiagID( |
| 225 getErrorLevel(), kFinalizerAccessesFinalizedField); | 223 getErrorLevel(), kFinalizerAccessesFinalizedField); |
| 226 diag_finalizer_eagerly_finalized_field_ = diagnostic_.getCustomDiagID( | 224 diag_finalizer_eagerly_finalized_field_ = diagnostic_.getCustomDiagID( |
| 227 getErrorLevel(), kFinalizerAccessesEagerlyFinalizedField); | 225 getErrorLevel(), kFinalizerAccessesEagerlyFinalizedField); |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 957 ReportDiagnostic(trace->getLocStart(), diag_fields_require_tracing_) | 955 ReportDiagnostic(trace->getLocStart(), diag_fields_require_tracing_) |
| 958 << info->record(); | 956 << info->record(); |
| 959 for (auto& field : info->GetFields()) | 957 for (auto& field : info->GetFields()) |
| 960 if (!field.second.IsProperlyTraced()) | 958 if (!field.second.IsProperlyTraced()) |
| 961 NoteFieldRequiresTracing(info, field.first); | 959 NoteFieldRequiresTracing(info, field.first); |
| 962 } | 960 } |
| 963 | 961 |
| 964 void BlinkGCPluginConsumer::ReportClassContainsInvalidFields( | 962 void BlinkGCPluginConsumer::ReportClassContainsInvalidFields( |
| 965 RecordInfo* info, | 963 RecordInfo* info, |
| 966 const CheckFieldsVisitor::Errors& errors) { | 964 const CheckFieldsVisitor::Errors& errors) { |
| 967 bool only_warnings = options_.warn_raw_ptr; | |
| 968 for (auto& error : errors) | |
| 969 if (!CheckFieldsVisitor::IsWarning(error.second)) | |
| 970 only_warnings = false; | |
| 971 | 965 |
| 972 ReportDiagnostic(info->record()->getLocStart(), | 966 ReportDiagnostic(info->record()->getLocStart(), |
| 973 only_warnings ? | |
| 974 diag_class_contains_invalid_fields_warning_ : | |
| 975 diag_class_contains_invalid_fields_) | 967 diag_class_contains_invalid_fields_) |
| 976 << info->record(); | 968 << info->record(); |
| 977 | 969 |
| 978 for (auto& error : errors) { | 970 for (auto& error : errors) { |
| 979 unsigned note; | 971 unsigned note; |
| 980 if (CheckFieldsVisitor::IsRawPtrError(error.second)) { | 972 if (error.second == CheckFieldsVisitor::kRawPtrToGCManaged) { |
| 981 note = diag_raw_ptr_to_gc_managed_class_note_; | 973 note = diag_raw_ptr_to_gc_managed_class_note_; |
| 982 } else if (CheckFieldsVisitor::IsReferencePtrError(error.second)) { | |
| 983 note = diag_reference_ptr_to_gc_managed_class_note_; | |
| 984 } else if (error.second == CheckFieldsVisitor::kRefPtrToGCManaged) { | 974 } else if (error.second == CheckFieldsVisitor::kRefPtrToGCManaged) { |
| 985 note = diag_ref_ptr_to_gc_managed_class_note_; | 975 note = diag_ref_ptr_to_gc_managed_class_note_; |
| 976 } else if (error.second == CheckFieldsVisitor::kReferencePtrToGCManaged) { |
| 977 note = diag_reference_ptr_to_gc_managed_class_note_; |
| 986 } else if (error.second == CheckFieldsVisitor::kOwnPtrToGCManaged) { | 978 } else if (error.second == CheckFieldsVisitor::kOwnPtrToGCManaged) { |
| 987 note = diag_own_ptr_to_gc_managed_class_note_; | 979 note = diag_own_ptr_to_gc_managed_class_note_; |
| 988 } else if (error.second == CheckFieldsVisitor::kMemberToGCUnmanaged) { | 980 } else if (error.second == CheckFieldsVisitor::kMemberToGCUnmanaged) { |
| 989 note = diag_member_to_gc_unmanaged_class_note_; | 981 note = diag_member_to_gc_unmanaged_class_note_; |
| 990 } else if (error.second == CheckFieldsVisitor::kMemberInUnmanaged) { | 982 } else if (error.second == CheckFieldsVisitor::kMemberInUnmanaged) { |
| 991 note = diag_member_in_unmanaged_class_note_; | 983 note = diag_member_in_unmanaged_class_note_; |
| 992 } else if (error.second == CheckFieldsVisitor::kPtrFromHeapToStack) { | 984 } else if (error.second == CheckFieldsVisitor::kPtrFromHeapToStack) { |
| 993 note = diag_stack_allocated_field_note_; | 985 note = diag_stack_allocated_field_note_; |
| 994 } else if (error.second == CheckFieldsVisitor::kGCDerivedPartObject) { | 986 } else if (error.second == CheckFieldsVisitor::kGCDerivedPartObject) { |
| 995 note = diag_part_object_to_gc_derived_class_note_; | 987 note = diag_part_object_to_gc_derived_class_note_; |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 void BlinkGCPluginConsumer::NoteField(FieldDecl* field, unsigned note) { | 1184 void BlinkGCPluginConsumer::NoteField(FieldDecl* field, unsigned note) { |
| 1193 ReportDiagnostic(field->getLocStart(), note) << field; | 1185 ReportDiagnostic(field->getLocStart(), note) << field; |
| 1194 } | 1186 } |
| 1195 | 1187 |
| 1196 void BlinkGCPluginConsumer::NoteOverriddenNonVirtualTrace( | 1188 void BlinkGCPluginConsumer::NoteOverriddenNonVirtualTrace( |
| 1197 CXXMethodDecl* overridden) { | 1189 CXXMethodDecl* overridden) { |
| 1198 ReportDiagnostic(overridden->getLocStart(), | 1190 ReportDiagnostic(overridden->getLocStart(), |
| 1199 diag_overridden_non_virtual_trace_note_) | 1191 diag_overridden_non_virtual_trace_note_) |
| 1200 << overridden; | 1192 << overridden; |
| 1201 } | 1193 } |
| OLD | NEW |