Sometimes when a function is inlined into a different CU, llvm-dwarfdump --verify would find an inlined subroutine with an invalid abstract origin. This is because DwarfUnit::addDIEEntry() will incorrectly assume the inlined subroutine and the abstract origin are from the same CU if it can't find the CU for the inlined subroutine.
In the added test, the inlined subroutine for bar() is created before the CU for B.swift is created, so it tries to point to goo() in the wrong CU. Interestingly, if we swap the order of the two functions then we don't see a crash since the module for goo() is created first.
The fix is to give a parent DIE to ScopeDIE before calling addDIEEntry() so that its CU can be found. Luckily, constructInlinedScopeDIE() is only called once so we can pass it the DIE of the scope's parent and give it a child just after it's created.
constructInlinedScopeDIE() should always return a DIE, so assert that it is not null.
I'm not sure if the FORMs will be identical on all targets, so you may need to move this back into a subdirectory where you can restrict this to one specific target and object file format. But the bots will let you know if that's the case.