I've spun this off from bug 36322 to track additional issues with the current implementation of DWARF descriptions of C99 VLAs. Initially I was curious what happened if a function with a VLA was inlined into another function. Adrian Prantl pointed out the test llvm/test/DebugInfo/X86/vla-dependencies.ll which I started playing with. Even without optimization, some curious things happen. The subrange_type has a DW_AT_type which points to something called "sizetype" which does not exist in the source. It also doesn't share an abbrev with the other base types, because its attributes are in a different order; this suggests some poor internal coding practice at least, although it's not actually invalid DWARF. With optimization, LLVM asserts, which is worth its own bug.