aaron.ballman added a comment.

In D150226#4516337 <https://reviews.llvm.org/D150226#4516337>, @dblaikie wrote:

> In D150226#4515843 <https://reviews.llvm.org/D150226#4515843>, @aaron.ballman 
> wrote:
>
>> In D150226#4515783 <https://reviews.llvm.org/D150226#4515783>, @dblaikie 
>> wrote:
>>
>>> In D150226#4498024 <https://reviews.llvm.org/D150226#4498024>, 
>>> @aaron.ballman wrote:
>>>
>>>> In D150226#4461846 <https://reviews.llvm.org/D150226#4461846>, @efriedma 
>>>> wrote:
>>>>
>>>>> The fundamental problem here is the interaction with SFINAE; if we don't 
>>>>> diagnose this as an error, we actually miscompile some cases.  Because of 
>>>>> that, a flag wouldn't really be "turning off the warning"; it would be 
>>>>> enabling a non-compliant language mode that has different rules for 
>>>>> whether enum casts are legal.
>>>>>
>>>>> If it weren't for that, I don't think anyone would be in a hurry to turn 
>>>>> the warning into a hard error.
>>>>
>>>> +1 to this. I'm worried about the miscompiles continuing in the wild. We 
>>>> did the best we could when landing the warning-as-error changes in D131307 
>>>> <https://reviews.llvm.org/D131307> by telling users explicitly "This 
>>>> diagnostic is expected to turn into an error-only diagnostic in the next 
>>>> Clang release." in the release notes. Obviously, that's not ideal because 
>>>> very few folks read release notes, but we don't have any better mechanism 
>>>> for communicating these kinds of changes.
>>>>
>>>> What do folks think is a reasonable path forward here? Given that we're 
>>>> going to branch the Clang 17 release in a few weeks (AIUI), my suggestion 
>>>> is to kick the can down the road by landing these changes just after we 
>>>> branch. That way the changes land such that early adopters can test and 
>>>> see how disruptive we're being without time pressure or hassle of dealing 
>>>> with release branches. Do folks think that's a reasonable approach? (I'm 
>>>> open to other suggestions.)
>>>
>>> I'm not quite following if/what the objection is to removing the "ignore in 
>>> system headers" for the warning for a release or two prior to making this a 
>>> hard error? That seems like a fairly low-cost change (it does kick the can 
>>> down the road a release or two before it becomes a hard error - but isn't 
>>> worse for users, for the most part - if they were going to get a hard error 
>>> from a system header before, at least now instead they'd get a warning or 
>>> warning-defaulted-to-error instead, they could turn it off (but they had 
>>> been warned that their system headers were going to cause them problems 
>>> soon) and then it becomes a hard error a release or two later).
>>
>> Thank you for bringing that up, sorry for not being more explicit -- by 
>> "these changes", I meant "whatever form we decide they should take" as 
>> opposed to "the patch as it is now."
>
> Ah, OK.
>
>> In terms of removing the "ignore in system headers" flag, I'm not strongly 
>> opposed to it, but I do worry it will throw the baby out with the bathwater. 
>> The specific use case I'm worried about is: user has a system header with 
>> the problematic code, they run into this diagnostic and they can't address 
>> it themselves so they disable the warning for the project. The user then 
>> doesn't learn about the problems in their own (non-system header) code until 
>> it becomes a hard error later.
>
> OK, I think we're still talking past each other/making different comparisons.
> I think you're comparing "make this a warning in system headers" to "not 
> doing anything" (so, yes, it causes people to ignore the warning even in 
> their own code when if they had done nothing/we had done nothing to force 
> them, they would've kept getting the warning in their code)
> Whereas I'm comparing "make this a warning in system headers" to "making this 
> a hard error" (in which case a user for which it would've been a hard error 
> and they'd have had no choice but to fix their system headers (might be 
> hard/impossible) would have some relief valve for a time/some notice that 
> this would be a problem in the future when it becomes a hard error)
>
> If we picture a timeline:
> Time 1) Code is valid/no problem
> Time 2) Warning added (not in system headers)
> Time 3) Warning becomes error by default (but could be disabled by a user) 
> (still not in system headers)
> Time 4) Becomes hard error
>
> And if someone has a system header with a violation, they won't know about it 
> until (4) and they won't be able to do much/anything about it.
>
> I'm suggesting making the process longer.
>
> Time 4) default-error warning becomes enabled in system headers
>
> Users who, in the first timeline, would be stuck - at least have a release 
> valve. I think they are better off than they were in the first timeline - 
> even though they lose warning coverage over their own code (which is bad), at 
> least they can still build their project and know they have problems in their 
> system headers they should report/etc and try to have addressed.
>
> then Time 5) make it a hard error.
>
> So it takes a bit longer to get to (5), and users who would be OK in the 
> original timeline are no worse off - they had there system headers fixed by 
> (4) and don't need to disable the warning. But users who would've had a bad 
> time at (4) have a less bad time/some chance of working through the bad time.

Thank you for the detailed explanation, that's really helpful! I think we were 
approaching this from somewhat different angles, but I now better understand 
what you mean. The tradeoff boils down to a question of which is less bad for 
users: losing warning coverage in their own code or finding out they have to 
get new system headers (or modify the existing ones, but no easy switch to 
address the issue). I think getting new system headers is harder for projects 
to deal with, so I think I'm now in agreement with you that we should enable 
the warning as an error in system headers.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150226/new/

https://reviews.llvm.org/D150226

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to