Fix -Wnonportable-include-path suppression for header maps with absolute paths.
authorVolodymyr Sapsai <vsapsai@apple.com>
Wed, 11 Sep 2019 20:39:04 +0000 (20:39 +0000)
committerVolodymyr Sapsai <vsapsai@apple.com>
Wed, 11 Sep 2019 20:39:04 +0000 (20:39 +0000)
commit2f843616849963e8df7a561ce5179ed29a767057
treec07e811ffbee24c5f627c5f1aa7f8e6c99974b84
parent1b385a180250dac9a3b8aa469a242454322e76bc
Fix -Wnonportable-include-path suppression for header maps with absolute paths.

In `DirectoryLookup::LookupFile` parameter `HasBeenMapped` doesn't cover
the case when clang finds a file through a header map but doesn't remap
the lookup filename because the target path is an absolute path. As a
result, -Wnonportable-include-path suppression for header maps
introduced in r301592 wasn't triggered.

Change parameter `HasBeenMapped` to `IsInHeaderMap` and use parameter
`MappedName` to track the filename remapping. This way we can handle
both relative and absolute paths in header maps, and account for their
specific properties, like filename remapping being a property preserved
across lookups in multiple directories.

rdar://problem/39516483

Reviewers: dexonsmith, bruno

Reviewed By: dexonsmith

Subscribers: jkorous, cfe-commits, ributzka

Differential Revision: https://reviews.llvm.org/D58094

llvm-svn: 371655
clang/include/clang/Lex/DirectoryLookup.h
clang/lib/Lex/HeaderSearch.cpp
clang/test/Preprocessor/Inputs/nonportable-hmaps/foo.hmap.json
clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Bar.h [new file with mode: 0644]
clang/test/Preprocessor/Inputs/nonportable-hmaps/headers/foo/Baz.h [new file with mode: 0644]
clang/test/Preprocessor/nonportable-include-with-hmap.c