Embedded in Academia
John Regehr, Professor of Computer Science, University of Utah, USA
CompilersTesting / QAPerformance / optimizationEssays / personal
- Posts
- 499 from 11 Feb 2010 to 4 Sep 2024
- Posting
- quiet since 2024
- Kind
- personal blog
- Feed
- https://blog.regehr.org/feed
2024 2
2023 1
2022 2
2021 2
2020 10
- Responsible and Effective Bugfinding
- Alive2 Part 3: Things You Can and Can’t Do with Undef in LLVM
- The Gods Pocket Peak Trail
- You Might as Well Be a Great Copy Editor
- The Saturation Effect in Fuzzing
- Alive2 Part 2: Tracking miscompilations in LLVM using its own unit tests
- Sid’s Mountain Backpacking Loop
- Alive2 Part 1: Introduction
- Precision Opportunities for Demanded Bits in LLVM
- Testing Dataflow Analyses for Precision and Soundness
2019 8
2018 17
- Walking or Biking to NSF
- Synthesizing Constants
- Learning When Values are Changed by Implicit Integer Casts
- What’s the difference between an integer and a pointer?
- Future Directions for Optimizing Compilers
- How LLVM Optimizes a Function
- How Clang Compiles a Function
- Software Engineering Takeaways
- High Desert Camping
- Paths to External Engagement in Computer Science Research
- Closing the Loop: The Importance of External Engagement in Computer Science Research
- The Basic Toolbox
- Strange Rocks 2018 Edition
- Trust Boundaries in Software Systems
- Stories Behind Papers: Integer Overflow
- A Conversation about Teaching Software Engineering
- Some Goals for High-impact Verified Compiler Research
2017 22
- The Real Problem with the US News Rankings
- The Dreaded Practice Talk
- Undefined Behavior in 2017
- The Zion Subway
- Pointer Overflow Checking is in LLVM
- Compiler Optimizations are Awesome
- Translation Validation of Bounded Exhaustive Test Cases
- Spring 2017
- Taming Undefined Behavior in LLVM
- Fun at the UNIX Terminal Part 1
- Elk and Arch
- Do Expressive Programming Languages Always Have Undefined Behavior?
- Mapping Mountains on Exoplanets
- Teaching Python Informally to Kids
- Undefined Behavior != Unsafe Programming
- Nine Mile Canyon
- Detecting Strict Aliasing Violations in the Wild
- A Quick Look at the SoftIron OverDrive 1000
- Introduction to Precision Farming
- Zion NP and Environs in Winter
- Testing LLVM
- A Tourist’s Guide to the LLVM Source Code
2016 23
- Undefined Behavior: Not Just for Programming Languages
- Principles for Undefined Behavior in Programming Language Design
- Vigorous Public Debates in Academic Computer Science
- Advanced Compilers Weeks 3-5
- Advanced Compilers Weeks 1 and 2
- Solutions to Integer Overflow
- Compilation and Hyperthreading
- Isolating a Free-Range Miscompilation
- Obelisk
- A Month of Invalid GCC Bug Reports, and How to Eliminate Some of Them
- Perseids
- C-Reduce 2.5
- Pointer Overflow Checking
- Teaching C
- Checking Up on Dataflow Analyses
- Efficient Integer Overflow Checking in LLVM
- Happy Canyon
- SQLite with a Fine-Toothed Comb
- The Strict Aliasing Situation is Pretty Bad
- A Variable Argument Hazard
- Python Exercises for Kids
- Planning for Disaster
- Do Fiddly Buffer Overruns Matter?
2015 25
- The Problem with Friendly C
- Reducers are Fuzzers
- Latency Numbers Every Professor Should Know
- Multi-Version Execution Defeats a Compiler-Bug-Based Backdoor
- Testcase Reduction for Non-Preprocessed C and C++
- A Few Pictures
- Classic Bug Reports
- API Fuzzing vs. File Fuzzing: A Cautionary Tale
- Comments on a Formal Verification of PolarSSL
- Secret Coders
- Sabbatical at TrustInSoft
- A Few Synthesizing Superoptimizer Results
- Nibble Sort Denouement
- Defending Against Compiler-Based Backdoors
- Generating a Random Program vs. Generating All Programs
- What afl-fuzz Is Bad At
- UB Canaries
- Inexpensive CPU Monster
- Booster Test
- Adandoned Mineshaft
- Instruction Synthesis is Fun and Weird
- Static Analysis Benchmarks
- Nibble Sort Programming Contest
- Buying Into Open Source Security
- Testing with Pictures
2014 44
- Inversions in Computing
- Souper Results 2
- Partial Evaluation and Immutable Servers
- Inward vs. Outward Facing Research
- Fall in City Creek Canyon
- Fun with Shellshock
- Proposal for a Friendly Dialect of C
- Atomic Accidents
- Non-Transparent Memory Safety
- Reviewing Research Papers Efficiently
- ALIVe: Automatic LLVM InstCombine Verifier
- Broads Fork
- Finding Compiler Bugs by Removing Dead Code
- We Need Hardware Traps for Integer Overflow
- A Guide to Better Scripty Code for Academics
- Early Superoptimizer Results
- This Is Not a Defect
- Cedar Mesa
- Too Much Milk: The Secret Origin Story
- Hints for Computer System Design
- How Should You Write a Fast Integer Overflow Check?
- Testing with Small Capacities
- Find the Integer Bug
- Research Advice from Alan Adler
- A New Development for Coverity and Heartbleed
- Heartbleed and Static Analysis
- xv6
- Automated Reasoning About LLVM Optimizations and Undefined Behavior
- That Was Easy
- Reproducibility in Computer Systems Research
- Let’s Work on an LLVM Superoptimizer
- Writing Solid Code Weeks 7 and 8
- Paranoid Programming
- Writing Solid Code Weeks 5 and 6 — The Plot Thickens
- What I Accomplished in Grad School
- Assertions Are Pessimistic, Assumptions Are Optimistic
- Scary Compiler Code Motion
- Use of Assertions
- Writing Solid Code Week 4
- Automatically Entering the Grand C++ Error Explosion Competition
- Writing Solid Code Week 3
- Status of Software Testing
- Writing Solid Code Week 2
- Writing Solid Code Week 1
2013 59
- Finding Wrong-Code Bugs in the Wild
- Reading Iain Banks, Part 1
- C-Reduce and Frama-C
- Informative Assertion Failures
- Safe, Efficient, and Portable Rotate in C/C++
- Integer Undefined Behaviors in Open Source Crypto Libraries
- A New Compiler Fuzzing Paper
- Producing Good Software From Academia
- Trust, But Verify
- Sometimes Compilers are Cute
- Irreducible Test Cases
- Any Way You Want
- A Few Panoramas
- Fuzzer Puzzle
- Levels of Fuzzing
- Guidelines for Research on Finding Bugs
- Are Compilers Getting More or Less Reliable?
- Jay
- Great Salt Lake Desert Road Trip
- Counting to 4 Billion Really Fast
- FizzBuzz Bugs
- Do Not Just Run a Few More Reps
- A Few Good Books
- According to Googer
- Mt Washington
- Cheating at Research
- C-Reduce 2.1
- Finding Undefined Behavior Bugs by Finding Dead Code
- What Other Dynamic Checkers for C/C++ are Needed?
- Integer Undefined Behavior Detection using Clang 3.3
- Type Punning, Strict Aliasing, and Optimization
- Funniest Computer Book?
- Crashy Compiler Flags
- MSCS
- Computer Science Culture Clash
- Foothill Sunset
- Procedural Decomposition
- Memory Safe C/C++: Time to Flip the Switch
- Reading Code
- Labyrinth Rims
- Fuzzers Need Taming
- Stochastic Superoptimization
- Exhaustive Testing is Not a Proof of Correctness
- Proofs from Tests
- str2long Contest Results Part 1
- A Quick Coding Contest: Convert String to Integer Without Overflow
- Four Books on Debugging
- Around Zion National Park
- Undefined Behavior Executed by Coq
- Catching Integer Errors with Clang
- How to Fuzz an ADT Implementation
- Simplest Program Showing the Difference Between Sequential Consistency and TSO
- Use of Goto in Systems Code
- Nobody Expects the Spanish Inquisition, or INT_MIN to be Divided by -1
- C and C++ Aren’t Future Proof
- The Space Child’s Mother Goose
- Hiding Bugs from Branch Coverage
- When Software Ages Badly
- Peeking into the Trash
2012 80
- Operant Conditioning by Software Bugs
- Is the Browser the New OS?
- Software Testing Using Easy Cases
- Oracles for Random Testing
- How Does Formal Verification Affect Software Testing?
- Raspberry Rockets
- Minimum Pubs for a PhD in CS?
- Gaining Confidence in Confidence Intervals
- Spiral Jetty
- A Few Thoughts on Scratch
- Fastest FizzBuzz
- Writing Solid Code
- Around Hanksville Utah
- How Did Software Get So Reliable Without Proof?
- EMSOFT 2012
- University Economics and the End of Large Classes
- Of Course It’s an Interview
- Economics of University Teaching
- Modern Dataflow Frameworks Wanted
- Capitol Reef Rock Art
- Book Review: The Shadow Scholar
- Certifying Compilers Using Random Testing
- What’s Operating Systems Research About?
- A Utah Salmon Run
- ARM Math Quirks on Raspberry Pi
- Blogspam Poems
- Thoughts on Embedded Development Boards
- High-Resolution Timing on the Raspberry Pi
- The Citation Telephone Game
- Trilobite Day Trip
- The Hidden Cost of Compiler Bugs
- Utah Eye Candy
- Core Question
- Cyber War
- It’s Time to Get Serious About Exploiting Undefined Behavior
- Undefined Behavior Consequences Contest Winners
- Twenty Years of Linux
- Anniversary Hike
- Contest: Craziest Compiler Output due to Undefined Behavior
- Parallelizing Delta Debugging
- Scooping and New Publication Models
- When is Undefined Behavior OK?
- Academic Attention for Undefined Behavior
- The PhD Grind, and Why Research Isn’t Like Sex
- Maybird
- Burning in a Module with Random Unit Testing
- Slightly More Sensible Signed Left-Shifts in C11 and C++11
- The Central Limit Theorem Makes Random Testing Hard
- 1500+ Bugs from One Fuzzer
- PLDI in Beijing
- Announcing C-Reduce: A Better Test-Case Reducer for C/C++ Compiler Debugging
- Street Fighting Computer Science
- Academic Bug-Finding Projects in the Long Run
- Damn You, Zork II
- Recording a Class at Udacity
- Why Isn’t C Memory Safe Yet?
- The Last Mile for a Verification Problem
- When Will Software Verification Matter?
- Software Testing Using Function/Inverse Pairs
- Udacity Visit
- Harris Wash, Zebra and Tunnel Slot Canyons
- Does Portable Byte-Order Code Optimize?
- 57 Small Programs that Crash Compilers
- New Paper on Test-Case Reduction
- Happy Canyon
- The Photography Contest
- Integer Overflow Paper
- How Many C Programs Are There?
- Bonneville Salt Flats and Silver Island Mountains
- C Puzzle: Double Trouble
- C99 Language Lawyer Needed
- Randomly Testing a Static Analyzer
- Avoidable Failures of Peer Review
- Tricking a Whitebox Testcase Generator
- Discovering New Instructions
- Wanted: Epitaphs for Hot Topics
- It’s All About Interfaces
- Fixing Computers
- Can Simplicity Scale?
- NSF Data Management Plans
2011 118
- Proposal to Stress-Test Implementations of C++11 Concurrency
- What PC-lint is Really For: Enforcing Language Dialects
- Book Beginnings
- Bit Puzzle Results
- Mount Olympus
- A Bit Puzzle
- A Different Approach to System Security
- Android Projects Retrospective
- Pluggable Domain-Specific Testcase Reducers
- How Integers Should Work (In Systems Programming Languages)
- How Should Integers Work?
- The Art and Science of Testcase Reduction for Compiler Bugs
- Csmith 2.1 Released
- Perverse Incentives in Academia
- Towards Tinkers
- Black Friday on Wednesday
- Putting Oneself Through College
- Open Access Fees
- Making the Sentence Structure of Paragraphs Apparent
- The Children of the Sky
- Fall
- Career Advice I’ve Received
- Advice for Assistant Professors
- Chimney Canyon
- Draft Paper about Better Fuzzing
- Draft Paper about Integer Overflow
- Hacked
- Overflows in SafeInt
- Better Random Testing by Leaving Features Out
- Google House
- Fuzzing Linux Kernel Modules?
- Online University
- Mt Nebo
- Hello Android
- A Fire Upon The Deep — Retrospective and E-book
- When to Teach C++?
- Box Elder Peak
- C No Evil
- Testing Commercial Compilers
- Fall on Snow
- Open Proposals (or: Take My Idea — Please)
- Isolation with a Very Small TCB
- Proposal for Automated Compiler Bug Reports
- ISSTA 2011
- Split Vote
- Review Correlation Again
- Red Baldy Again
- What’s Fun About Teaching
- Lake Blanche
- Does a Simulation Really Need to Be Run?
- Why Verify Software?
- SLC Sunset
- Do Small-RAM Devices Have a Future?
- Embrace WTF
- Safe From Compiler Bugs?
- Continuous Paper Reviewing (Wonkish)
- Squeezing a CS Research Idea
- Iterating Over The Full Range
- Size Matters
- Externally Relevant Open Problems in Computer Science
- What I Want From a Bibliography System
- Publishing for Impact
- A Day in the West Desert
- Generalizing and Criticizing Delta Debugging
- Polar Bears 2011
- An Executable Semantics For C Is Useful
- Antelope Island
- Uninitialized Variables
- Value Loss Coverage
- How Much and What to Read?
- Csmith Released
- Finding Integer Undefined Behaviors Using Clang 2.9
- Preemption vs. Event Ordering
- Goblin Valley and Capitol Reef
- Volatile Bugs, Three Years Later
- Who Fuzzes the Fuzzer?
- One Day of Winter and Three Days of Spring in the Fins
- Software Bugs and Scientific Progress
- Proposal for a CompCert Superoptimizer
- Peer Review Poker
- Finding and Understanding Bugs in C Compilers
- Race Condition vs. Data Race
- Guidelines for Teaching Assistants
- The Simplest Queue?
- Negative Correlation Achieved
- The Little C Function From Hell
- Better Testing With Undefined Behavior Coverage
- Undefined Integer Behaviors in Student Code, Part 2
- How to Write a C/C++ Compiler That Respects Volatile
- Life With BibTeX
- Differential Whitebox Testing Is Good
- Quality Not Quantity?
- Visualizing A Few More Math Bugs
- Visualizing Math Bugs
- A Few Thoughts About Path Coverage
- Undefined Integer Behaviors in Student Code, Part 1
- Should Software Evolve?
- Random Testing Gets No Respect
- Two Rules for Random Testing
- Probabilities in Random Testing
- Outgunned
- The Day I Learned To Love Perl
- Cryptocontributions, Blogs, and How Science Works
- Csmith @ PLDI
- Who Verifies the Verifiers?
- The Piano Test for Program Verification
- Elk and Winter Light
- Good Book: Idaho Falls
- Good Book: Space Systems Failures
- The Synergy Between Delta Debugging and Compiler Optimization
- The 5+5 Commandments of a Ph.D.
- Gear for Getting Outside in Winter
- The Future of Software System Correctness
- Almost Everything in Subversion
- Snowy Foothills
- A Critical Look at the SCADE Compiler Verification Kit
- Grading on a Curve
- On the Synergy Between Facebook and CAN Bus Error Confinement
2010 86
- Benchmarking Short Codes on Modern Processors
- A Quick Update to Comparing Compiler Optimizations
- Sometimes the Name Is the Contribution
- Comparing Compiler Optimizations
- Taking Grants for Granted
- The Official Utah State Firearm
- Interviewing PhD Students
- Wanted: Invariant-Based Synchronization
- Wanted: One RSS Feed Per Conference
- November Snowshoeing
- Angel’s Landing
- Staying Sane in Academia
- Some Good and Bad Things About Academia
- Reviewers Get Worse Over Time
- Computer Systems Evaluation Mistake #1
- Independence in N-Version Programming
- Compiler Bug-Finding Project Milestones
- Counting Compiler Crashes
- Non-deterministic Compilers?
- A Quick Look at Code Size
- GCC Summit Talk
- Verifying a Driver
- Maze Rejection #2
- More Saturating Arithmetic
- Fun With Saturating Arithmetic
- Volatile Structs Are Broken
- Conference Hijacking
- Late Summer in Heaven
- Why Not Mix Signed and Unsigned Values in C/C++?
- Giving a Talk at the GCC Summit
- Fun With Shift Optimizations
- Strange Utah
- Static Analysis Fatigue
- Sensor Network Technology in Vinge’s A Deepness in the Sky
- Going Going Gone
- What Blogs Are Good For
- The Future of Compiler Correctness
- The Future of Compiler Optimization
- Poll: Do You Want Compiler Bugs to Be Quiet or Loud?
- Timpanogos
- Ten Years in Utah
- Knowing When to Quit
- A Guide to Undefined Behavior in C and C++, Part 3
- Borah Peak in 30 Hours
- Running an Electronic Program Committee Meeting
- Is Attending Meetings a Signaling Behavior?
- A Guide to Undefined Behavior in C and C++, Part 2
- Red Baldy
- Why Would Researchers Oppose Open Access?
- Grandview Peak
- A Guide to Undefined Behavior in C and C++, Part 1
- How to Debug
- I Can Solve the World’s Debugging Problems
- The Truth About the Life of the Mind
- The Big Lie About the Life of the Mind
- Why Take an Embedded Systems Course?
- An Epidemic of Rat Farming
- Self-Checking Projects
- White Baldy
- INT_MIN % -1 = ?
- Why Take a Compiler Course?
- Good Fun and Bad Weather on Mount Baker
- Why Take an Operating Systems Course?
- Flower Power
- Compilers and Termination Revisited
- Book Review: Street-Fighting Mathematics
- Book Review: Pale Fire
- Book Review: Surviving Your Stupid Stupid Decision to go to Grad School
- How to Get a Grant (from NSF, for Computer Scientists)
- Book Review: Sustainable Energy — Without the Hot Air
- C Compilers Disprove Fermat’s Last Theorem
- Into the Brooks Range, Part 3
- Into the Brooks Range, Part 2
- Into the Brooks Range, Part 1
- Straight Man
- Margin in Software Systems
- Picking a Research Topic in Computer Systems
- The Compiler Doesn’t Care About Your Intent
- C and C++ Make It Hard to Read a Register for Its Side Effects
- Computer Science Fiction
- 200 Compiler Bugs
- How to Evaluate a Computer Systems Research Paper
- 50 Vertical Miles
- Nine ways to break your systems code using volatile
- Is That a Compiler Bug?
- TRIGA