paperbot · PL 论文追踪

全部论文 待读 收藏

P2 PPR: Pairwise Program Reduction

PPR:成对程序缩减
FSE Proceedings of the 31st ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering2023匹配度 2/10 · 该论文研究传统程序缩减技术用于编译器缺陷定位,属于软件测试与调试方向;不涉及 LLM/Agent、静态分析、浮点程序分析或贝叶斯程序分析,与用户画像中 PL 与 AI 的交叉方向关联较弱。引用 14 inbox
Mengxiao Zhang, Zhenyang Xu, Yongqiang Tian, Yu Jiang, Chengnian Sun
crossref: 2026-09-12dblp: 2026-09-12

AI 速览

一句话:提出成对程序缩减 PPR,在保持程序性质的同时最小化一对程序及其差异,以定位编译器缺陷的关键元素。

程序缩减广泛用于编译器调试,但 C-Reduce、Perses 等将程序作为整体缩减,忽视了各剩余 token 与缺陷相关程度的差异。本文提出成对程序缩减 PPR:给定种子程序 Ps、由之派生的变体 Pv 及二者分别表现的性质(如 Pv 使编译器崩溃而 Ps 不崩溃),PPR 在缩减 Ps 与 Pv 规模的同时最小化二者的差异,最终得到仍保持性质的一对最小化程序,并用最小差异突出与缺陷高度相关的关键程序元素。作者构建了首个面向真实编译器缺陷的成对基准(GCC/LLVM 20、Rustc 9、JerryScript 9)。实验表明 PPR 显著优于 DD,在大型复杂程序上结果规模仅为 DD 的 0.6%,与 Perses/C-Reduce 相当,且通过差异高亮关键致错改动,在 Rust 与 JavaScript 上展现通用性。

问题
现有程序缩减技术(如 C-Reduce、Perses)将程序作为整体缩减,忽视了各剩余 token 与缺陷的相关程度差异,难以突出关键致错元素。
方法
提出 PPR:给定种子程序 Ps、派生变体 Pv 及其各自保持的性质,在分别缩减 Ps 与 Pv 的同时最小化二者的差异,输出仍保持性质且差异最小的程序对。
评估
构建首个来自真实编译器缺陷的成对基准(GCC/LLVM 20、Rustc 9、JerryScript 9),与 DD、Perses、C-Reduce 比较;PPR 显著优于 DD,在大型复杂程序上结果规模仅为 DD 的 0.6%,并验证了 Rust/JavaScript 通用性。
原文摘要(Abstract)

Program reduction is a practical technique widely used for debugging compilers. To report a compiler bug with a bug-triggering program, one needs to minimize the program by removing bugirrelevant program elements first. Though existing program reduction techniques, such as C-Reduce and Perses, can reduce a bug-triggering program as a whole, they overlook the fact that the degree of relevance of each remaining token to the bug varies. To this end, we propose Pairwise Program Reduction (PPR), a new program reduction technique for minimizing a pair of programs w.r.t. certain properties. Given a seed program 𝑃𝑠 , a variant 𝑃𝑣 derived from 𝑃𝑠 , and the properties 𝑃𝑠 and 𝑃𝑣 exhibit separately (e.g., 𝑃𝑣 crashes a compiler whereas 𝑃𝑠 does not), PPR not only reduces the sizes of 𝑃𝑠 and 𝑃𝑣 , but also minimizes the differences between 𝑃𝑠 and 𝑃𝑣 . The final result of PPR is a pair of minimized programs that still preserve the properties, but the minimized differences between the pair highlight the critical program elements that are highly related to the bug. To thoroughly evaluate PPR, we manually constructed the first pairwise benchmark suite from real-world compiler bugs (20 bugs in GCC and LLVM, 9 bugs in Rustc and 9 bugs in JerryScript). The evaluation results show that PPR significantly outperforms the baseline: DD, a variant of Delta Debugging. Specifically, on large and complex programs, PPR’s reduction results are only 0.6% of those by DD w.r.t. program size. The sizes of the minimized variants (i.e., 𝑃𝑣 ) by PPR are also comparable to those by Perses and C-Reduce; but PPR offers more for debugging by highlighting the critical, bug-inducing changes via the minimized differences. Evaluation on Rust and JavaScript demonstrates PPR’s strong generality to other languages.

链接与引用

DOI 原文 · PDF(开放获取) · DBLP

BibTeX
@inproceedings{ZhangX00S23,
  title = {PPR: Pairwise Program Reduction},
  author = {Mengxiao Zhang and Zhenyang Xu and Yongqiang Tian and Yu Jiang and Chengnian Sun},
  booktitle = {FSE},
  year = {2023},
  doi = {10.1145/3611643.3616275}
}