Well-Typed Programs Can Go Wrong: A Study of Typing-Related Bugs in JVM Compilers
summary
Manual analysis of 320 typing-related bugs from Java, Scala, Kotlin and Groovy reveals concrete testing targets and failure modes: more than half are unexpected compile-time errors, one third are triggered by non-compilable programs, and parametric polymorphism is most pervasive in failing tests. Fixes are local and small—about 90% under 100 LOC and 40% under 10 LOC—with median time-to-fix 24 days (mean 186). Bug-revealing tests average ~10 lines, and buggy components concentrate in type operations, resolution, semantic analysis, desugaring, and error reporting.
AI-written summary · about
chapters (13)
- 0:00Intro
- 0:12Testing compilers
- 1:27Contributions
- 2:10Selected languages
- 2:51Bug study phases
- 3:54Symptoms
- 5:10Bug causes
- 7:00Example: semantic analysis error
- 7:41Example: type-related bug
- 9:32Bug fixes
- 11:04Test case characteristics
- 12:11Implications & Takeaways
- 14:28Conclusions
related talks
14mFinding Compiler Bugs through Cross-Language Code Generator and Differential Testing
21mUnderstanding and Finding Java Decompiler Bugs
14mTypeless Writing in a Strong Typed World
30mHow to Evaluate Blame for Gradual Types, Part 2
25mLiquidJava:Catch Bugs at Compile Time with Liquid Types
53mLocknote: How Badly Do We Want Correct Compilers?
42mHow a Two-Decade-Old Issue Still Haunts Software Scalability
27mTowards Type Debugging using Partial Evaluation
