Page MenuHomePhabricator

clang: Diag running out of file handles while looking for files
ClosedPublic

Authored by thakis on Aug 8 2019, 9:02 AM.

Details

Summary

clang would only print "file not found" when it's unable to find a
header file. If the reason for that is a file handle leak, that's not a
very useful error message. For errors that aren't in a small whitelist
("file not found", "file is directory"), print an error with the
strerror() output.

This changes behavior in corner cases: If clang was out of file handles
while looking in one -I dir but then suddenly wasn't when looking in the
next -I dir, and both directories contained a file with the desired
name, previously we'd silently return the file from the second
directory. For this reason, it's important to ignore "is a directory"
for this new diag: if a file foo/foo exists and -I -Ifoo are passed, an
include of "foo" should successfully open file "foo" in directory "foo/"
instead of complaining that "./foo" is a directory.

No test since we mostly hit this when there's a handle leak somewhere,
and currently there isn't one. I manually tested this with the repro
steps in comment 2 on the bug below.

Fixes PR42524.

Diff Detail

Repository
rL LLVM

Event Timeline

thakis created this revision.Aug 8 2019, 9:02 AM
rnk accepted this revision.Aug 8 2019, 9:50 AM

lgtm

This revision is now accepted and ready to land.Aug 8 2019, 9:50 AM
This revision was automatically updated to reflect the committed changes.
Herald added a project: Restricted Project. · View Herald TranscriptAug 8 2019, 10:59 AM