The current code would hit an assert in ASTWriter when trying to write out the filename for a line table entry that didn't have any.
(Chromium runs into this when building with the latest MS SDK.)
Differential D40746
Correctly handle line table entries without filenames during AST serialization hans on Dec 1 2017, 1:00 PM. Authored by
Details The current code would hit an assert in ASTWriter when trying to write out the filename for a line table entry that didn't have any. (Chromium runs into this when building with the latest MS SDK.)
Diff Detail Event TimelineComment Actions The intent is to use a FilenameID of -1 to represent this situation; see the documentation of the LineEntry::FilenameID member. Users of that field are expected to deal with that value (see the handling of that case in SourceManager::getPresumedLoc for example). I think we need to handle it that way, rather than mapping to the main file name as this patch does, for correctness in the PCH case -- we don't actually *know* the correct main file name at the point where the line directive appears. I imagine the cause of the crash is that the AST writer blindly calls LineTableInfo::getFilename(LE.FilenameID) without checking for this case? Comment Actions Yes, exactly. I suppose the right thing to do is to just make the -1 values survive serialization, and the correct filename can be figured out when the deserialized pch gets used? Patch coming up. |