diff options
| author | 2024-12-19 16:01:09 -0800 | |
|---|---|---|
| committer | 2024-12-19 16:01:09 -0800 | |
| commit | c483b2c623e7258b09ad2f05ad76566cacabe2c2 (patch) | |
| tree | 4561fd2e0257572e05942fbd2dd781ac5eb918e5 /compiler/optimizing | |
| parent | 772463f6da1f8692479478e954358a832a612420 (diff) | |
| parent | 7430eabf4234985d62f875550197c6e6e7ebd693 (diff) | |
Snap for 12829911 from 7430eabf4234985d62f875550197c6e6e7ebd693 to 25Q2-release
Change-Id: I87e48c26af81a894890a99bf4ad126733c21e964
Diffstat (limited to 'compiler/optimizing')
| -rw-r--r-- | compiler/optimizing/inliner.cc | 2 | ||||
| -rw-r--r-- | compiler/optimizing/instruction_builder.cc | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc index d679261d42..5281346644 100644 --- a/compiler/optimizing/inliner.cc +++ b/compiler/optimizing/inliner.cc @@ -1593,6 +1593,8 @@ bool HInliner::TryBuildAndInline(HInvoke* invoke_instruction, ReferenceTypeInfo receiver_type, HInstruction** return_replacement, bool is_speculative) { + DCHECK_IMPLIES(method->IsStatic(), !receiver_type.IsValid()); + DCHECK_IMPLIES(!method->IsStatic(), receiver_type.IsValid()); // If invoke_instruction is devirtualized to a different method, give intrinsics // another chance before we try to inline it. if (invoke_instruction->GetResolvedMethod() != method && diff --git a/compiler/optimizing/instruction_builder.cc b/compiler/optimizing/instruction_builder.cc index c66fd3bb26..8226987968 100644 --- a/compiler/optimizing/instruction_builder.cc +++ b/compiler/optimizing/instruction_builder.cc @@ -992,6 +992,10 @@ static ArtMethod* ResolveMethod(uint16_t method_idx, (!resolved_method->IsPublic() && !declaring_class_accessible)) { return nullptr; } + + if (UNLIKELY(resolved_method->CheckIncompatibleClassChange(*invoke_type))) { + return nullptr; + } } // We have to special case the invoke-super case, as ClassLinker::ResolveMethod does not. |