From 25b9c7da44cd4652aa2ba26aa105509a6d035632 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Thu, 17 Sep 2020 17:34:34 +0100 Subject: Don't store copied methods in BSS. Otherwise, we can end up in a state where the method on the stack is unrelated to the receiver. Also fix a comment related to GetCanonicalMethod and StackVisitor::ValidateFrame. Test: 810-checker-invoke-super-default Change-Id: I3030e4af6059f7a4a7a1f046f2aabae8ce9057da --- compiler/optimizing/sharpening.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'compiler/optimizing/sharpening.cc') diff --git a/compiler/optimizing/sharpening.cc b/compiler/optimizing/sharpening.cc index 67cd200679..393369dcb6 100644 --- a/compiler/optimizing/sharpening.cc +++ b/compiler/optimizing/sharpening.cc @@ -99,6 +99,7 @@ HInvokeStaticOrDirect::DispatchInfo HSharpening::SharpenInvokeStaticOrDirect( } else if (!has_method_id) { method_load_kind = MethodLoadKind::kRuntimeCall; } else { + DCHECK(!callee->IsCopied()); // Use PC-relative access to the .bss methods array. method_load_kind = MethodLoadKind::kBssEntry; } @@ -124,6 +125,7 @@ HInvokeStaticOrDirect::DispatchInfo HSharpening::SharpenInvokeStaticOrDirect( method_load_kind = MethodLoadKind::kRuntimeCall; code_ptr_location = CodePtrLocation::kCallArtMethod; } else { + DCHECK(!callee->IsCopied()); // Use PC-relative access to the .bss methods array. method_load_kind = MethodLoadKind::kBssEntry; code_ptr_location = CodePtrLocation::kCallArtMethod; -- cgit v1.2.3-59-g8ed1b