Fault localization is a crucial step of automated program repair, because accurately identifying program locations that are most closely implicated with a fault greatly affects the effectiveness of the patching process. An ideal fault localization technique would provide precise information while requiring moderate computational resources-to best support an efficient search for correct fixes. In contrast, most automated program repair tools use standard fault localization techniques-which are not tightly integrated with the overall program repair process, and hence deliver only subpar efficiency.In this paper, we present retrospective fault localization: a novel fault localization technique geared to the requirements of automated program repair. A key idea of retrospective fault localization is to reuse the outcome of failed patch validation to support mutation-based dynamic analysis-providing accurate fault localization information without incurring onerous computational costs.We implemented retrospective fault localization in a tool called RESTORE-based on the JAID Java program repair system. Experiments involving faults from the DEFECTS4J standard benchmark indicate that retrospective fault localization can boost automated program repair: RESTORE efficiently explores a large fix space, delivering state-of-the-art effectiveness (41 DEFECTS4J bugs correctly fixed, 7 more than any other automated repair tools for Java) while simultaneously boosting performance (speedup over 3 compared to JAID). Retrospective fault localization is applicable to any automated program repair techniques that rely on fault localization and dynamic validation of patches. 1 Fault Closure113 in DEFECTS4J [8] and Tab. III. 1 private void processRequireCall(NodeTraversal t, 2 Node n, Node parent) { 3 ProvidedName provided = providedNames.get(...); 4 ... 5 if (provided != null) { 6 parent.detachFromParent(); 7 compiler.reportCodeChange(); 8 } 9 } Listing 1: Faulty method processRequireCall from class ProcessClosurePrimitives in project Closure Compiler.if (provided != null || requiresLevel.isOn()) { Listing 2: Fix written by tool developers (replacing line 5 in Lst. 1), and also produced by RESTORE.