diff options
author | 2015-10-07 18:55:43 +0100 | |
---|---|---|
committer | 2015-10-12 12:24:48 +0100 | |
commit | 4e2a55760b231554b72ba6703a22fcc7ab1f714e (patch) | |
tree | 1515a37d2cfeef698e8242664f4d55efdc97bd5a /compiler/optimizing/builder.cc | |
parent | 89792b9c5ed09dda2937944b69b1b2016807b6aa (diff) |
Assert that referrers class should not need access check.
Change-Id: Ia682befdb0dc665f74c0f96454cc007304ff2397
Diffstat (limited to 'compiler/optimizing/builder.cc')
-rw-r--r-- | compiler/optimizing/builder.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/compiler/optimizing/builder.cc b/compiler/optimizing/builder.cc index 503d08f6f5..6f152d1f12 100644 --- a/compiler/optimizing/builder.cc +++ b/compiler/optimizing/builder.cc @@ -1302,7 +1302,13 @@ bool HGraphBuilder::IsOutermostCompilingClass(uint16_t type_index) const { soa, dex_cache, class_loader, type_index, dex_compilation_unit_))); Handle<mirror::Class> outer_class(hs.NewHandle(GetOutermostCompilingClass())); - return outer_class.Get() == cls.Get(); + // GetOutermostCompilingClass returns null when the class is unresolved + // (e.g. if it derives from an unresolved class). This is bogus knowing that + // we are compiling it. + // When this happens we cannot establish a direct relation between the current + // class and the outer class, so we return false. + // (Note that this is only used for optimizing invokes and field accesses) + return (cls.Get() != nullptr) && (outer_class.Get() == cls.Get()); } void HGraphBuilder::BuildUnresolvedStaticFieldAccess(const Instruction& instruction, |