diff options
author | 2024-09-20 11:13:12 +0000 | |
---|---|---|
committer | 2024-09-20 14:16:25 +0000 | |
commit | 6b7fc69a6a5ffcfa16b7511f6a04635c105543db (patch) | |
tree | 190396b34f9e41fd2ed1e601bf8c1ad58ce64c60 /compiler/optimizing/intrinsics_x86_64.cc | |
parent | 68742f619ed4475de413ced479aa2517bf3fd93a (diff) |
Check receiver for null in invokeExact intrinsic.
Bug: 297147201
Test: ./art/test/testrunner/testrunner.py --host --64 --optimizing --jvm -b
Change-Id: I6633bdab20b13335afccfe0506f6b91391c19fe3
Diffstat (limited to 'compiler/optimizing/intrinsics_x86_64.cc')
-rw-r--r-- | compiler/optimizing/intrinsics_x86_64.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/compiler/optimizing/intrinsics_x86_64.cc b/compiler/optimizing/intrinsics_x86_64.cc index d085d2c469..bd6d6d1889 100644 --- a/compiler/optimizing/intrinsics_x86_64.cc +++ b/compiler/optimizing/intrinsics_x86_64.cc @@ -4162,6 +4162,9 @@ void IntrinsicCodeGeneratorX86_64::VisitMethodHandleInvokeExact(HInvoke* invoke) CpuRegister receiver = locations->InAt(1).AsRegister<CpuRegister>(); + __ testl(receiver, receiver); + __ j(kEqual, slow_path->GetEntryLabel()); + // Using vtable_index register as temporary in subtype check. It will be overridden later. // If `method` is an interface method this check will fail. CpuRegister vtable_index = locations->GetTemp(0).AsRegister<CpuRegister>(); |