Index: tools/clang/blink_gc_plugin/RecordInfo.cpp |
diff --git a/tools/clang/blink_gc_plugin/RecordInfo.cpp b/tools/clang/blink_gc_plugin/RecordInfo.cpp |
index fb3c4a2464c06ed786859f074e9b61949cf33a71..bbe4e58e11f918e406eae055f2da8085a1258c55 100644 |
--- a/tools/clang/blink_gc_plugin/RecordInfo.cpp |
+++ b/tools/clang/blink_gc_plugin/RecordInfo.cpp |
@@ -134,19 +134,22 @@ bool RecordInfo::IsTreeShared() { |
} |
// A GC mixin is a class that inherits from a GC mixin base and has |
-// has not yet been "mixed in" with another GC base class. |
+// not yet been "mixed in" with another GC base class. |
bool RecordInfo::IsGCMixin() { |
if (!IsGCDerived() || base_paths_->begin() == base_paths_->end()) |
return false; |
- // Get the last element of the first path. |
- CXXBasePaths::paths_iterator it = base_paths_->begin(); |
- const CXXBasePathElement& elem = (*it)[it->size() - 1]; |
- CXXRecordDecl* base = elem.Base->getType()->getAsCXXRecordDecl(); |
- // If it is not a mixin base we are done. |
- if (!Config::IsGCMixinBase(base->getName())) |
- return false; |
- // This is a mixin if there are no other paths to GC bases. |
- return ++it == base_paths_->end(); |
+ for (CXXBasePaths::paths_iterator it = base_paths_->begin(); |
+ it != base_paths_->end(); |
+ ++it) { |
+ // Get the last element of the path. |
+ const CXXBasePathElement& elem = (*it)[it->size() - 1]; |
+ CXXRecordDecl* base = elem.Base->getType()->getAsCXXRecordDecl(); |
+ // If it is not a mixin base we are done. |
+ if (!Config::IsGCMixinBase(base->getName())) |
+ return false; |
+ } |
+ // This is a mixin if all GC bases are mixins. |
+ return true; |
} |
// Test if a record is allocated on the managed heap. |