From cabf6941807328f71b9ba13f6bfcfb104a7f6197 Mon Sep 17 00:00:00 2001 From: Nikolai Tillmann Date: Mon, 15 Apr 2024 14:50:58 -0700 Subject: [PATCH] Sharpen support relaxed inits in definitely-assigned-ifields analysis Summary: D56045539 was overly conservative; we only need to consider calls when there's a type mismatch in the first argument. Reviewed By: wsanville Differential Revision: D56089271 fbshipit-source-id: 46fc489f359e507cb419731aa9d47bd4f57cb297 --- service/constant-propagation/DefinitelyAssignedIFields.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/constant-propagation/DefinitelyAssignedIFields.cpp b/service/constant-propagation/DefinitelyAssignedIFields.cpp index f3539511062..d914540619c 100644 --- a/service/constant-propagation/DefinitelyAssignedIFields.cpp +++ b/service/constant-propagation/DefinitelyAssignedIFields.cpp @@ -338,7 +338,7 @@ std::unordered_set get_definitely_assigned_ifields( always_assert(opcode::is_new_instance(def->opcode())); for (auto& use : uses) { if (opcode::is_invoke_direct(use.insn->opcode()) && - method::is_init(use.insn->get_method())) { + use.src_index == 0 && method::is_init(use.insn->get_method())) { auto resolved = resolve_method(use.insn->get_method(), MethodSearch::Direct); if (resolved == nullptr || resolved->get_class() != def->get_type()) {