r208345 - Remove -Wnon-modular-include
Alp Toker
alp at nuanti.com
Thu May 8 17:31:49 PDT 2014
On 09/05/2014 01:08, Argyrios Kyrtzidis wrote:
>
> On May 8, 2014, at 4:53 PM, Richard Smith <richard at metafoo.co.uk
> <mailto:richard at metafoo.co.uk>> wrote:
>
>> On Thu, May 8, 2014 at 4:39 PM, Richard Smith <richard at metafoo.co.uk
>> <mailto:richard at metafoo.co.uk>> wrote:
>>
>> On Thu, May 8, 2014 at 4:28 PM, Argyrios Kyrtzidis
>> <akyrtzi at gmail.com <mailto:akyrtzi at gmail.com>> wrote:
>>
>>
>> On May 8, 2014, at 4:23 PM, Richard Smith
>> <richard at metafoo.co.uk <mailto:richard at metafoo.co.uk>> wrote:
>>
>>> On Thu, May 8, 2014 at 4:21 PM, Argyrios
>>> Kyrtzidis<akyrtzi at gmail.com <mailto:akyrtzi at gmail.com>>wrote:
>>>
>>> Hi Richard,
>>>
>>> On May 8, 2014, at 1:27 PM, Richard Smith
>>> <richard at metafoo.co.uk <mailto:richard at metafoo.co.uk>>
>>> wrote:
>>>
>>>> On Thu, May 8, 2014 at 1:20 PM, Richard
>>>> Smith<richard at metafoo.co.uk
>>>> <mailto:richard at metafoo.co.uk>>wrote:
>>>>
>>>> On Thu, May 8, 2014 at 11:09 AM, Ben
>>>> Langmuir<blangmuir at apple.com
>>>> <mailto:blangmuir at apple.com>>wrote:
>>>>
>>>> Author: benlangmuir
>>>> Date: Thu May 8 13:09:29 2014
>>>> New Revision: 208345
>>>>
>>>> URL:http://llvm.org/viewvc/llvm-project?rev=208345&view=rev
>>>> Log:
>>>> Remove -Wnon-modular-include
>>>>
>>>> But keep
>>>> -Wnon-modular-include-in-[framework-]module
>>>>
>>>> This warning is too noisy and doesn't really
>>>> indicate a problem for most
>>>> people. Even though it would only really affect
>>>> people using
>>>> -Weverything, that seems bad so remove it.
>>>>
>>>>
>>>> Wait a second, we were planning on using this to
>>>> replace -fmodules-strict-decluse. People using
>>>> -Weverything need to use -Wno-foo for the warnings
>>>> they don't want; that's the cost of using that option.
>>>>
>>>>
>>>> From when -Weverything was added:
>>>>
>>>> Eli Friedman wrote:
>>>> > This seems like a bad idea: people will start using
>>>> it, then complain
>>>> > whenever we add a new warning which isn't generically
>>>> applicable
>>>> > (suppose we add an opt-in warning for C-style casts
>>>> in C++, for
>>>> > example). We already have -Wextra for people who want
>>>> lots of> warnings.
>>>>
>>>> Ted Kremenek responded:
>>>> [...]
>>>> > -Weverything is not for everybody, and for those that
>>>> complain about
>>>> > new warnings we can (and should) tell them to take
>>>> the opt-in approach
>>>> > as opposed to the opt-out approach. I don't see a
>>>> problem with really
>>>> > serving both sets of user preferences.
>>>>
>>>> => We do not get to use -Weverything as an excuse for
>>>> removing warning that are noisy and that some users
>>>> aren't interested in.
>>>
>>> This is not just noisy, it has no value IMO. How can we
>>> expect an application not to #include something
>>> textually and what is the user supposed to do when they
>>> see this warning ?
>>>
>>>
>>> If the application intends to have all of its own headers
>>> modularized, this warning can be used to check that. If the
>>> user sees this warning, and they're in that case, they
>>> should either add the header to a module or explicitly
>>> exclude it (if it's supposed to be textually included).
>>
>> I don’t think this is feasible in practice, preprocessor
>> tricks and textual includes will not go away, they have real
>> uses.
>>
>>
>> They do, but you can exclude headers meant for textual inclusion
>> just as easily for an application as for a library.
>>
>> The warning is very important for the framework/library
>> author, but I don’t think it provides value in practice for
>> the application author.
>>
>>
>> I disagree. An application may want to use modules for itself.
>> They're not limited to libraries.
>>
>>
>> I've done some more digging and I think what we want to replace
>> -fmodules-strict-decluse is to warn if either
>> a) a module build includes a header that's not referenced by any
>> module map, or
>> b) a non-module build with -fmodule-name= specified references such a
>> header
>> ... which looks like it matches the cases that the remaining
>> -Wnon-modular-include-in-module catches, so that's a non-issue.
>>
>> However, for my work modularizing LLVM, the -Wnon-modular-include
>> warning has *already* been very useful, despite having only been
>> available for a few hours. I have first-hand experience that this
>> *is* useful functionality for application authors. That said, I think
>> we should suppress the warning if the includer isn't in the main
>> source file (I don't care that my non-modular includes have
>> transitive non-modular includes.)
>
> How about adding it as a remark ? That way you can get the same
> benefit as before without the negative connotation that the user is
> doing something “wrong” by simply #including something.
I'd be cautious of categorising this at *lower* severity than, say,
-Wold-style-cast, because the distinction appears arbitrary. Are C-style
casts more severe than non-modular includes? How long is a piece of string?
The existing set of off-by-default warnings would seem fine for this, or
perhaps clang-tidy.
Alp.
--
http://www.nuanti.com
the browser experts
More information about the cfe-commits
mailing list