skip to main content
10.1145/3551349.3556958acmotherconferencesArticle/Chapter ViewAbstractPublication PagesaseConference Proceedingsconference-collections
research-article
Open Access
Distinguished Paper

Compiler Testing using Template Java Programs

Published:05 January 2023Publication History

ABSTRACT

We present JAttack, a framework that enables template-based testing for compilers. Using JAttack, a developer writes a template program that describes a set of programs to be generated and given as test inputs to a compiler. Such a framework enables developers to incorporate their domain knowledge on testing compilers, giving a basic program structure that allows for exploring complex programs that can trigger sophisticated compiler optimizations. A developer writes a template program in the host language (Java) that contains holes to be filled by JAttack. Each hole, written using a domain-specific language, constructs a node within an extended abstract syntax tree (eAST). An eAST node defines the search space for the hole, i.e., a set of expressions and values. JAttack generates programs by executing templates and filling each hole by randomly choosing expressions and values (available within the search space defined by the hole). Additionally, we introduce several optimizations to reduce JAttack’s generation cost. While JAttack could be used to test various compiler features, we demonstrate its capabilities in helping test just-in-time (JIT) Java compilers, whose optimizations occur at runtime after a sufficient number of executions. Using JAttack, we have found six critical bugs that were confirmed by Oracle developers. Four of them were previously unknown, including two unknown CVEs (Common Vulnerabilities and Exposures). JAttack shows the power of combining developers’ domain knowledge (via templates) with random testing to detect bugs in JIT compilers.

References

  1. Alfred Aho, Monica Lam, Ravi Sethi, and Jeffrey Ullman. 2007. Compilers: Principles, Techniques, and Tools. Addison-Wesley.Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. Mohammad Amin Alipour, Alex Groce, Rahul Gopinath, and Arpit Christi. 2016. Generating Focused Random Tests Using Directed Swarm Testing. In International Symposium on Software Testing and Analysis. ACM, 70–81.Google ScholarGoogle Scholar
  3. Oracle Corporation and/or its affiliates. 2021. The Java HotSpot Performance Engine Architecture. https://www.oracle.com/java/technologies/whitepaper.html.Google ScholarGoogle Scholar
  4. Oracle Corporation and/or its affiliates. 2021. [JDK-8251535] Partial peeling at unsigned test adds incorrect loop exit check - Java Bug System. https://bugs.openjdk.java.net/browse/JDK-8251535.Google ScholarGoogle Scholar
  5. Oracle Corporation and/or its affiliates. 2021. Regression Test Harness for the JDK: jtreg. https://openjdk.java.net/jtreg.Google ScholarGoogle Scholar
  6. James H. Andrews, Lionel C. Briand, Yvan Labiche, and Akbar Siami Namin. 2006. Using Mutation Analysis for Assessing and Comparing Testing Coverage Criteria. IEEE Transactions on Software Engineering 32, 8 (2006), 608–624.Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. John Aycock. 2003. A Brief History of Just-in-Time. Comput. Surveys 35, 2 (2003), 97–113.Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Auréle Barriére, Sandrine Blazy, and David Pichardie. 2020. Towards Formally Verified Just-in-Time compilation. In International Workshop on Coq for Programming Languages.Google ScholarGoogle Scholar
  9. Jonathan Bell and Gail Kaiser. 2014. Unit Test Virtualization with VMVM. In International Conference on Software Engineering. ACM, 550–561.Google ScholarGoogle Scholar
  10. Jonathan Bell and Luís Pina. 2018. CROCHET: Checkpoint and Rollback via Lightweight Heap Traversal on Stock JVMs. In Proceedings of the 2018 European Conference on Object-Oriented Programming. Dagstuhl, 17:1–17:31.Google ScholarGoogle Scholar
  11. William Blair, Andrea Mambretti, Sajjad Arshad, Michael Weissbacher, William Robertson, Engin Kirda, and Manuel Egele. 2020. HotFuzz: Discovering Algorithmic Denial-of-Service Vulnerabilities Through Guided Micro-Fuzzing. In The Symposium on Network and Distributed System Security. The Internet Society.Google ScholarGoogle Scholar
  12. Tegan Brennan, Nicolás Rosner, and Tevfik Bultan. 2020. JIT Leaks: Inducing Timing Side Channels through Just-In-Time Compilation. In Symposium on Security and Privacy. IEEE, 1207–1222.Google ScholarGoogle ScholarCross RefCross Ref
  13. Tegan Brennan, Seemanta Saha, and Tevfik Bultan. 2020. JVM Fuzzing for JIT-Induced Side-Channel Detection. In International Conference on Software Engineering. ACM, 1011–1023.Google ScholarGoogle Scholar
  14. Fraser Brown, John Renner, Andres Nötzli, Sorin Lerner, Hovav Shacham, and Deian Stefan. 2020. Towards a Verified Range Analysis for JavaScript JITs. In Programming Language Design and Implementation. ACM, 135–150.Google ScholarGoogle Scholar
  15. Nicolas Bruno and Surajit Chaudhuri. 2005. Flexible Database Generators. In International Conference on Very Large Data Bases. VLDB Endowment, 1097–1107.Google ScholarGoogle Scholar
  16. Stefan Brunthaler. 2010. Efficient Interpretation Using Quickening. In Symposium on Dynamic Languages. ACM, 1–14.Google ScholarGoogle Scholar
  17. Stefanos Chaliasos, Thodoris Sotiropoulos, Diomidis Spinellis, Arthur Gervais, Benjamin Livshits, and Dimitris Mitropoulos. 2022. Finding Typing Compiler Bugs. In Programming Language Design and Implementation. ACM, 183–198.Google ScholarGoogle Scholar
  18. Junjie Chen, Wenxiang Hu, Dan Hao, Yingfei Xiong, Hongyu Zhang, Lu Zhang, and Bing Xie. 2016. An Empirical Comparison of Compiler Testing Techniques. In International Conference on Software Engineering. ACM, 180–190.Google ScholarGoogle Scholar
  19. Junjie Chen, Jibesh Patra, Michael Pradel, Yingfei Xiong, Hongyu Zhang, Dan Hao, and Lu Zhang. 2020. A Survey of Compiler Testing. Comput. Surveys 53, 1 (2020), 4:1–4:36.Google ScholarGoogle Scholar
  20. Junjie Chen, Guancheng Wang, Dan Hao, Yingfei Xiong, Hongyu Zhang, and Lu Zhang. 2019. History-Guided Configuration Diversification for Compiler Test-Program Generation. In International Conference on Software Engineering. IEEE, 305–316.Google ScholarGoogle Scholar
  21. TY Chen, SC Cheung, and SM Yiu. 1998. Metamorphic testing: a new approach for generating next test cases.Technical Report.Google ScholarGoogle Scholar
  22. Yuting Chen, Ting Su, and Zhendong Su. 2019. Deep Differential Testing of JVM Implementations. In International Conference on Software Engineering. IEEE, 1257–1268.Google ScholarGoogle Scholar
  23. Yuting Chen, Ting Su, Chengnian Sun, Zhendong Su, and Jianjun Zhao. 2016. Coverage-Directed Differential Testing of JVM Implementations. In Programming Language Design and Implementation. ACM, 85–99.Google ScholarGoogle Scholar
  24. Wai-Mee Ching and Alex Katz. 1993. The Testing of an APL Compiler. In International Conference on APL. ACM, 55–62.Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Shafiul Azam Chowdhury, Sohil Lal Shrestha, Taylor T. Johnson, and Christoph Csallner. 2020. SLEMI: Equivalence modulo input (EMI) based mutation of CPS models for finding compiler bugs in Simulink. In International Conference on Software Engineering. ACM, 335–346.Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Koen Claessen and John Hughes. 2000. QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. In International Conference on Functional Programming. ACM, 268–279.Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Intel Corporation. 2016. android-art-intel/Fuzzer: Java* Fuzzer for Android*. https://github.com/android-art-intel/Fuzzer.Google ScholarGoogle Scholar
  28. Brett Daniel, Danny Dig, Kely Garcia, and Darko Marinov. 2007. Automated Testing of Refactoring Engines. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 185–194.Google ScholarGoogle Scholar
  29. Leonardo De Moura and Nikolaj Bjørner. 2008. Z3: An Efficient SMT Solver. In International Conference on Tools and Algorithms for the Construction and Analysis of Systems. Springer, 337–340.Google ScholarGoogle ScholarCross RefCross Ref
  30. R.A. DeMillo, R.J. Lipton, and F.G. Sayward. 1978. Hints on Test Data Selection: Help for the Practicing Programmer. Computer 11, 4 (1978), 34–41.Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Alastair F. Donaldson, Paul Thomson, Vasyl Teliman, Stefano Milizia, André Perez Maselco, and Antoni Karpiński. 2021. Test-Case Reduction and Deduplication Almost for Free with Transformation-Based Compiler Testing. In Programming Language Design and Implementation. ACM, 1017–1032.Google ScholarGoogle Scholar
  32. John K. Feser, Swarat Chaudhuri, and Isil Dillig. 2015. Synthesizing Data Structure Transformations from Input-Output Examples. In Programming Language Design and Implementation. ACM, 229–239.Google ScholarGoogle Scholar
  33. Gordon Fraser and Andrea Arcuri. 2011. EvoSuite: automatic test suite generation for object-oriented software. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering (Szeged, Hungary). ACM, 416–419.Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Joel Galenson, Philip Reames, Rastislav Bodik, Björn Hartmann, and Koushik Sen. 2014. CodeHint: Dynamic and Interactive Synthesis of Code Snippets. In International Conference on Software Engineering. ACM, 653–663.Google ScholarGoogle Scholar
  35. Milos Gligoric, Tihomir Gvero, Vilas Jagannath, Sarfraz Khurshid, Viktor Kuncak, and Darko Marinov. 2010. Test Generation through Programming in UDITA. In International Conference on Software Engineering. ACM, 225–234.Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Liang Gong, Michael Pradel, and Koushik Sen. 2015. JITProf: Pinpointing JIT-Unfriendly JavaScript Code. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 357–368.Google ScholarGoogle Scholar
  37. Alex Groce, Chaoqiang Zhang, Eric Eide, Yang Chen, and John Regehr. 2012. Swarm Testing. In International Symposium on Software Testing and Analysis. ACM, 78–88.Google ScholarGoogle Scholar
  38. Shu-yu Guo and Jens Palsberg. 2011. The Essence of Compiling with Traces. In Symposium on Principles of Programming Languages. ACM, 563–574.Google ScholarGoogle Scholar
  39. Tihomir Gvero, Viktor Kuncak, and Ruzica Piskac. 2011. Interactive Synthesis of Code Snippets. In Computer Aided Verification. Springer, 418–423.Google ScholarGoogle Scholar
  40. Andrew Haley. 2015. How to change compilation policy to trigger C2 compilation ASAP?https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2015-May/018010.html.Google ScholarGoogle Scholar
  41. Chris Hawblitzel, Shuvendu K. Lahiri, Kshama Pawar, Hammad Hashmi, Sedar Gokbulut, Lakshan Fernando, Dave Detlefs, and Scott Wadsworth. 2013. Will You Still Compile Me Tomorrow? Static Cross-Version Compiler Validation. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 191–201.Google ScholarGoogle Scholar
  42. Christian Holler, Kim Herzig, and Andreas Zeller. 2012. Fuzzing with Code Fragments. In USENIX Security Symposium. USENIX, 38.Google ScholarGoogle Scholar
  43. Paul Holser. 2020. junit-quickcheck – junit-quickcheck: Property-based testing, JUnit-style. https://pholser.github.io/junit-quickcheck/index.html.Google ScholarGoogle Scholar
  44. Jinru Hua and Sarfraz Khurshid. 2017. EdSketch: Execution-Driven Sketching for Java. In International SPIN Symposium on Model Checking of Software. ACM, 162–171.Google ScholarGoogle Scholar
  45. Christian Humer, Christian Wimmer, Christian Wirth, Andreas Wöß, and Thomas Würthinger. 2014. A Domain-Specific Language for Building Self-Optimizing AST Interpreters. In International Conference on Generative Programming: Concepts and Experiences. ACM, 123–132.Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. Sungjae Hwang, Sungho Lee, Jihoon Kim, and Sukyoung Ryu. 2021. JUSTGen: Effective Test Generation for Unspecified JNI Behaviors on JVMs. In International Conference on Software Engineering. IEEE, 1708–1718.Google ScholarGoogle Scholar
  47. Azul Systems, Inc.2018. AzulSystems/JavaFuzzer: Java* Fuzzer for Android*. https://github.com/AzulSystems/JavaFuzzer.Google ScholarGoogle Scholar
  48. Free Software Foundation, Inc.2021. Testsuites (GNU Compiler Collection (GCC) Internals). https://gcc.gnu.org/onlinedocs/gccint/Testsuites.html.Google ScholarGoogle Scholar
  49. Red Hat, Inc.2018. shipilev/JavaFuzzer: Java* Fuzzer for JVM. https://github.com/shipilev/JavaFuzzer.Google ScholarGoogle Scholar
  50. Radu Iosif. 2002. Symmetry Reduction Criteria for Software Model Checking. In International SPIN Symposium on Model Checking of Software. Springer, 22–41.Google ScholarGoogle Scholar
  51. Karthick Jayaraman, David Harvison, Vijay Ganesh, and Adam Kiezun. 2009. jFuzz: A Concolic Whitebox Fuzzer for Java. In NASA Formal Methods Symposium.Google ScholarGoogle Scholar
  52. Jinseong Jeon, Xiaokang Qiu, Jeffrey S. Foster, and Armando Solar-Lezama. 2015. JSketch: Sketching for Java. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 934–937.Google ScholarGoogle Scholar
  53. Susmit Jha, Sumit Gulwani, Sanjit A. Seshia, and Ashish Tiwari. 2010. Oracle-Guided Component-Based Program Synthesis. In International Conference on Software Engineering. ACM, 215–224.Google ScholarGoogle Scholar
  54. Yue Jia and Mark Harman. 2008. Constructing Subtle Faults Using Higher Order Mutation Testing. In IEEE International Working Conference on Source Code Analysis and Manipulation. IEEE, 249–258.Google ScholarGoogle Scholar
  55. Yue Jia and Mark Harman. 2011. An Analysis and Survey of the Development of Mutation Testing. IEEE Transactions on Software Engineering 37, 5 (2011), 649–678.Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. Neil D. Jones, Carsten K. Gomard, and Peter Sestoft. 1993. Partial Evaluation and Automatic Program Generation. Prentice Hall.Google ScholarGoogle ScholarDigital LibraryDigital Library
  57. René Just, Darioush Jalali, Laura Inozemtseva, Michael D. Ernst, Reid Holmes, and Gordon Fraser. 2014. Are Mutants a Valid Substitute for Real Faults in Software Testing?. In International Symposium on the Foundations of Software Engineering. 654–665.Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. Rody Kersten, Kasper Luckow, and Corina S. Păsăreanu. 2017. POSTER: AFL-based Fuzzing for Java with Kelinci. In Conference on Computer and Communications Security. ACM, 2511–2513.Google ScholarGoogle Scholar
  59. Vu Le, Mehrdad Afshari, and Zhendong Su. 2014. Compiler Validation via Equivalence modulo Inputs. In Programming Language Design and Implementation. ACM, 216–226.Google ScholarGoogle Scholar
  60. Vu Le, Chengnian Sun, and Zhendong Su. 2015. Finding Deep Compiler Bugs via Guided Stochastic Program Mutation. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 386–399.Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. Vu Le, Chengnian Sun, and Zhendong Su. 2015. Randomized Stress-Testing of Link-Time Optimizers. In International Symposium on Software Testing and Analysis. ACM, 327–337.Google ScholarGoogle Scholar
  62. Gwangmu Lee, Woochul Shim, and Byoungyoung Lee. 2021. Constraint-guided Directed Greybox Fuzzing. In USENIX Security Symposium. USENIX, 3559–3576.Google ScholarGoogle Scholar
  63. Christopher Lidbury, Andrei Lascu, Nathan Chong, and Alastair F. Donaldson. 2015. Many-Core Compiler Fuzzing. In Programming Language Design and Implementation. ACM, 65–76.Google ScholarGoogle Scholar
  64. Vsevolod Livinskii, Dmitry Babokin, and John Regehr. 2020. Random Testing for C and C++ Compilers with YARPGen. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 196:1–196:25.Google ScholarGoogle Scholar
  65. Valentin J. M. Manès, HyungSeok Han, Choongwoo Han, Sang Kil Cha, Manuel Egele, Edward J. Schwartz, and Maverick Woo. 2021. The Art, Science, and Engineering of Fuzzing: A Survey. IEEE Transactions on Software Engineering 47, 11 (2021), 2312–2331.Google ScholarGoogle ScholarCross RefCross Ref
  66. William M McKeeman. 1998. Differential testing for software. Digital Technical Journal 10, 1 (1998), 100–107.Google ScholarGoogle Scholar
  67. Robin Morisset, Pankaj Pawan, and Francesco Zappa Nardelli. 2013. Compiler Testing via a Theory of Sound Optimisations in the C11/C++11 Memory Model. In Programming Language Design and Implementation. ACM, 187–196.Google ScholarGoogle Scholar
  68. Magnus O. Myreen. 2010. Verified Just-in-Time Compiler on X86. In Symposium on Principles of Programming Languages. ACM, 107–118.Google ScholarGoogle ScholarDigital LibraryDigital Library
  69. Kazuhiro Nakamura and Nagisa Ishiura. 2016. Random testing of C compilers based on test program generation by equivalence transformation. In Asia Pacific Conference on Circuits and Systems. IEEE, 676–679.Google ScholarGoogle ScholarCross RefCross Ref
  70. Jakob Botsch Nielsen. 2018. Fuzzing the.NET JIT Compiler. https://mattwarren.org/2018/08/28/Fuzzing-the-.NET-JIT-Compiler/.Google ScholarGoogle Scholar
  71. Jakob Botsch Nielsen. 2020. jakobbotsch/Fuzzlyn: Fuzzer for the.NET toolchains, developed as a project for the 2018 Language-Based Security course at Aarhus University. https://github.com/jakobbotsch/Fuzzlyn.Google ScholarGoogle Scholar
  72. Carlos Pacheco, Shuvendu K. Lahiri, Michael D. Ernst, and Thomas Ball. 2007. Feedback-Directed Random Test Generation. In International Conference on Software Engineering. IEEE, 75–84.Google ScholarGoogle Scholar
  73. Rohan Padhye, Caroline Lemieux, and Koushik Sen. 2019. JQF: Coverage-Guided Property-Based Testing in Java. In International Symposium on Software Testing and Analysis. ACM, 398–401.Google ScholarGoogle Scholar
  74. Rohan Padhye, Caroline Lemieux, Koushik Sen, Mike Papadakis, and Yves Le Traon. 2019. Semantic Fuzzing with Zest. In International Symposium on Software Testing and Analysis. ACM, 329–340.Google ScholarGoogle Scholar
  75. Rohan Padhye, Caroline Lemieux, Koushik Sen, Laurent Simon, and Hayawardh Vijayakumar. 2019. FuzzFactory: Domain-Specific Fuzzing with Waypoints. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 174:1–174:29.Google ScholarGoogle Scholar
  76. Soyeon Park, Wen Xu, Insu Yun, Daehee Jang, and Taesoo Kim. 2020. Fuzzing JavaScript Engines with Aspect-preserving Mutation. In Symposium on Security and Privacy. IEEE, 1629–1642.Google ScholarGoogle Scholar
  77. Hui Peng, Yan Shoshitaishvili, and Mathias Payer. 2018. T-Fuzz: Fuzzing by Program Transformation. In Symposium on Security and Privacy. IEEE, 697–710.Google ScholarGoogle ScholarCross RefCross Ref
  78. Guillermo Polito, Stéphane Ducasse, and Pablo Tesone. 2022. Interpreter-guided Differential JIT Compiler Unit Testing. In Programming Language Design and Implementation. ACM, 981–992.Google ScholarGoogle Scholar
  79. LLVM Project. 2021. LLVM Testing Infrastructure Guide. https://llvm.org/docs/TestingGuide.html.Google ScholarGoogle Scholar
  80. John Regehr, Yang Chen, Pascal Cuoq, Eric Eide, Chucky Ellison, and Xuejun Yang. 2012. Test-Case Reduction for C Compiler Bugs. In Programming Language Design and Implementation. ACM, 335–346.Google ScholarGoogle Scholar
  81. Richard Schumi and Jun Sun. 2021. SpecTest: Specification-Based Compiler Testing. In Fundamental Approaches to Software Engineering. Springer, 269–291.Google ScholarGoogle Scholar
  82. Boris Shingarov. 2019. Formal Verification of JIT by Symbolic Execution. In International Workshop on Virtual Machines and Intermediate Languages.Google ScholarGoogle Scholar
  83. Rishabh Singh and Armando Solar-Lezama. 2011. Synthesizing Data Structure Manipulations from Storyboards. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 289–299.Google ScholarGoogle ScholarDigital LibraryDigital Library
  84. Emin Gün Sirer and Brian N. Bershad. 2000. Using Production Grammars in Software Testing. In Conference on Domain-Specific Languages. ACM, 1–13.Google ScholarGoogle Scholar
  85. Armando Solar-Lezama. 2013. Program Sketching. International Journal on Software Tools for Technology Transfer 15, 5–6(2013), 475–495.Google ScholarGoogle ScholarDigital LibraryDigital Library
  86. Armando Solar-Lezama, Liviu Tancau, Rastislav Bodik, Sanjit Seshia, and Vijay Saraswat. 2006. Combinatorial Sketching for Finite Programs. In International Conference on Architectural Support for Programming Languages and Operating Systems. ACM, 404–415.Google ScholarGoogle Scholar
  87. Chengnian Sun, Vu Le, and Zhendong Su. 2016. Finding Compiler Bugs via Live Code Mutation. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 849–863.Google ScholarGoogle ScholarDigital LibraryDigital Library
  88. Yixuan Tang, Zhilei Ren, Weiqiang Kong, and He Jiang. 2020. Compiler testing: a systematic literature analysis. Frontiers of Computer Science 14, 1 (2020), 1:20.Google ScholarGoogle Scholar
  89. Nikolai Tillmann and Wolfram Schulte. 2005. Parameterized Unit Tests. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 253–262.Google ScholarGoogle Scholar
  90. Jacob Van Geffen, Luke Nelson, Isil Dillig, Xi Wang, and Emina Torlak. 2020. Synthesizing JIT Compilers for In-Kernel DSLs. In Computer Aided Verification. Springer, 564–586.Google ScholarGoogle Scholar
  91. Vasudev Vikram, Rohan Padhye, and Koushik Sen. 2021. Growing A Test Corpus with Bonsai Fuzzing. In International Conference on Software Engineering. ACM, 723–735.Google ScholarGoogle Scholar
  92. Tielei Wang, Tao Wei, Guofei Gu, and Wei Zou. 2010. TaintScope: A Checksum-Aware Directed Fuzzing Tool for Automatic Software Vulnerability Detection. In Symposium on Security and Privacy. IEEE, 497–512.Google ScholarGoogle Scholar
  93. Xi Wang, David Lazar, Nickolai Zeldovich, Adam Chlipala, and Zachary Tatlock. 2014. Jitk: A Trustworthy In-Kernel Interpreter Infrastructure. In Symposium on Operating Systems Design and Implementation. USENIX, 33–47.Google ScholarGoogle Scholar
  94. Xuejun Yang, Yang Chen, Eric Eide, and John Regehr. 2011. Finding and Understanding Bugs in C Compilers. In Programming Language Design and Implementation. ACM, 283–294.Google ScholarGoogle Scholar
  95. Xuejun Yang, Yang Chen, Eric Eide, and John Regehr. 2021. GCC Bug List Found by Random Testing (Total 79). https://embed.cs.utah.edu/csmith/gcc-bugs.html.Google ScholarGoogle Scholar
  96. Xuejun Yang, Yang Chen, Eric Eide, and John Regehr. 2021. LLVM Bug List Found by Random Testing (Total 203). https://embed.cs.utah.edu/csmith/llvm-bugs.html.Google ScholarGoogle Scholar
  97. Guixin Ye, Zhanyong Tang, Shin Hwei Tan, Songfang Huang, Dingyi Fang, Xiaoyang Sun, Lizhong Bian, Haibo Wang, and Zheng Wang. 2021. Automated Conformance Testing for JavaScript Engines via Deep Compiler Fuzzing. In Programming Language Design and Implementation. ACM, 435–450.Google ScholarGoogle Scholar
  98. Takahide Yoshikawa, Kouya Shimura, and Toshihiro Ozawa. 2003. Random Program Generator for Java JIT Compiler Test System. In International Conference on Quality Software. IEEE, 20–23.Google ScholarGoogle Scholar
  99. Wei You, Xueqiang Wang, Shiqing Ma, Jianjun Huang, Xiangyu Zhang, XiaoFeng Wang, and Bin Liang. 2019. ProFuzzer: On-the-fly Input Type Probing for Better Zero-Day Vulnerability Discovery. In Symposium on Security and Privacy. IEEE, 769–786.Google ScholarGoogle Scholar
  100. Qirun Zhang, Chengnian Sun, and Zhendong Su. 2017. Skeletal Program Enumeration for Rigorous Compiler Testing. In Programming Language Design and Implementation. ACM, 347–361.Google ScholarGoogle Scholar
  101. Yingquan Zhao, Zan Wang, Junjie Chen, Mengdi Liu, Mingyuan Wu, Yuqun Zhang, and Lingming Zhang. 2022. History-Driven Test Program Synthesis for JVM Testing. In International Conference on Software Engineering. ACM, 1133–1144.Google ScholarGoogle Scholar

Index Terms

  1. Compiler Testing using Template Java Programs

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in
      • Published in

        cover image ACM Other conferences
        ASE '22: Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering
        October 2022
        2006 pages
        ISBN:9781450394758
        DOI:10.1145/3551349

        Copyright © 2022 ACM

        Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected].

        Publisher

        Association for Computing Machinery

        New York, NY, United States

        Publication History

        • Published: 5 January 2023

        Permissions

        Request permissions about this article.

        Request Permissions

        Check for updates

        Qualifiers

        • research-article
        • Research
        • Refereed limited

        Acceptance Rates

        Overall Acceptance Rate82of337submissions,24%

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader

      HTML Format

      View this article in HTML Format .

      View HTML Format