[PATCH] D47301: Warning for framework include violation from Headers to PrivateHeaders
Bruno Cardoso Lopes via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 23 16:36:57 PDT 2018
bruno created this revision.
bruno added reviewers: ributzka, vsapsai, dexonsmith.
Framework vendors usually layout their framework headers in the following way:
Foo.framework/Headers -> "public" headers
Foo.framework/PrivateHeader -> "private" headers
Since both headers in both directories can be found with #import <Foo/some-header.h>, it's easy to make mistakes and include headers in Foo.framework/PrivateHeader from headers in Foo.framework/Headers, which usually configures a layering violation on Darwin ecosystems. One of the problem this causes is dep cycles when modules are used, since it's very common for "private" modules to include from the "public" ones; adding an edge the other way around will trigger cycles.
Add a warning to catch those cases such that:
In file included from test.m:1:
./A.framework/Headers/A.h:2:10: warning: public framework header includes private framework header 'A/APriv.h' [-Wframework-include-private-from-public]
^
This only works for the layering violation within a framework.
rdar://problem/38712182
Depends on https://reviews.llvm.org/D47157
Repository:
rC Clang
https://reviews.llvm.org/D47301
Files:
include/clang/Basic/DiagnosticGroups.td
include/clang/Basic/DiagnosticLexKinds.td
lib/Lex/HeaderSearch.cpp
test/Modules/Inputs/framework-public-includes-private/A.framework/Headers/A.h
test/Modules/Inputs/framework-public-includes-private/A.framework/Modules/module.modulemap
test/Modules/Inputs/framework-public-includes-private/A.framework/Modules/module.private.modulemap
test/Modules/Inputs/framework-public-includes-private/A.framework/PrivateHeaders/APriv.h
test/Modules/Inputs/framework-public-includes-private/A.framework/PrivateHeaders/APriv2.h
test/Modules/Inputs/framework-public-includes-private/a.hmap.json
test/Modules/Inputs/framework-public-includes-private/flat-header-path/Z.h
test/Modules/Inputs/framework-public-includes-private/flat-header-path/Z.modulemap
test/Modules/Inputs/framework-public-includes-private/flat-header-path/Z.private.modulemap
test/Modules/Inputs/framework-public-includes-private/flat-header-path/ZPriv.h
test/Modules/Inputs/framework-public-includes-private/z.hmap.json
test/Modules/Inputs/framework-public-includes-private/z.yaml
test/Modules/framework-public-includes-private.m
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47301.148309.patch
Type: text/x-patch
Size: 11496 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180523/bc70ac54/attachment-0001.bin>
More information about the cfe-commits
mailing list