Sorry, answered on phone, missed it. I looked at your buildbots for
chromium and yeah, so many warnings. I will make it off by default.

ut 1. 10. 2019 o 19:58 Dávid Bolvanský <david.bolvan...@gmail.com> napísal(a):
>
> (Not sure if you intentionally didn't reply-all.)
>
> Sorry, answered on phone, missed it. I looked at your buildbots for
> chromium and yeah, so many warnings. I will make it off by default.
>
> ut 1. 10. 2019 o 19:17 Nico Weber <tha...@chromium.org> napísal(a):
>
> >
> > (Not sure if you intentionally didn't reply-all.)
> >
> > We should probably write it down, but clang's warning philosophy is that 
> > warnings should be very high-signal. The usual way to prove this is to 
> > build some large open-source codebase with the warning and counting true 
> > and false positives.
> >
> > Just "gcc has it" isn't sufficient motivation – gcc has lots of not so good 
> > warnings :)
> >
> > ps: To be clear, I appreciate all your work to add warnings a lot! It's 
> > very useful. It's also possible that this warning is useful, but it's not 
> > immediately clear, so there should be some data to back it up.
> >
> > On Tue, Oct 1, 2019 at 12:12 PM Dávid Bolvanský <david.bolvan...@gmail.com> 
> > wrote:
> >>
> >> I hit this bug myself, GCC warned me with -Wenum-compare, Clang was 
> >> silent. Clang “supports” this flag, but failed to catch it. Either Clang 
> >> should not pretend that it supports this flag (and all related 
> >> functionality) or should support it fully. Basically, new warnings will 
> >> show up only for Clang-only environments.
> >>
> >> I think the own subgroup is a good compromise for now.  We can still make 
> >> it off by default before next release if we decide so.
> >>
> >> Dňa 1. 10. 2019 o 17:56 užívateľ Nico Weber <tha...@chromium.org> napísal:
> >>
> >> 
> >> Thanks!
> >>
> >> Any thoughts on the true positive rate for this warning?
> >>
> >> On Tue, Oct 1, 2019 at 11:43 AM Dávid Bolvanský 
> >> <david.bolvan...@gmail.com> wrote:
> >>>
> >>> Yeah, I moved this warning into own subgroup in rL373345. Thanks.
> >>>
> >>> ut 1. 10. 2019 o 16:24 Nico Weber <tha...@chromium.org> napísal(a):
> >>> >
> >>> > Can we move this behind a Wenum-compare subgroup, say 
> >>> > Wenum-compare-type? Our codebase is (well, was) Wenum-compare clean, 
> >>> > and this new warnings fires pretty often and from a first quick glance 
> >>> > the warning looks pretty low-signal anyways (*). Maybe the subgroup 
> >>> > shouldn't even be on by default -- do you have any data on true / false 
> >>> > positive rate of this?
> >>> >
> >>> > (But for starters, just having a way to turn this off is enough.)
> >>> >
> >>> > For example, we have a windows common control that's either a PGRP_DOWN 
> >>> > or a PGRP_UP page control and depending on which you store the control 
> >>> > state in the same int, then stuff like `return extra.inner_spin.spin_up 
> >>> > ? UPS_DISABLED : DNS_DISABLED;`.
> >>> >
> >>> > On Mon, Sep 30, 2019 at 3:53 PM David Bolvansky via cfe-commits 
> >>> > <cfe-commits@lists.llvm.org> wrote:
> >>> >>
> >>> >> Author: xbolva00
> >>> >> Date: Mon Sep 30 12:55:50 2019
> >>> >> New Revision: 373252
> >>> >>
> >>> >> URL: http://llvm.org/viewvc/llvm-project?rev=373252&view=rev
> >>> >> Log:
> >>> >> [Diagnostics] Warn if enumeration type mismatch in conditional 
> >>> >> expression
> >>> >>
> >>> >> Summary:
> >>> >> - Useful warning
> >>> >> - GCC compatibility (GCC warns in C++ mode)
> >>> >>
> >>> >> Reviewers: rsmith, aaron.ballman
> >>> >>
> >>> >> Reviewed By: aaron.ballman
> >>> >>
> >>> >> Subscribers: cfe-commits
> >>> >>
> >>> >> Tags: #clang
> >>> >>
> >>> >> Differential Revision: https://reviews.llvm.org/D67919
> >>> >>
> >>> >> Added:
> >>> >>     cfe/trunk/test/Sema/warn-conditional-emum-types-mismatch.c
> >>> >> Modified:
> >>> >>     cfe/trunk/lib/Sema/SemaChecking.cpp
> >>> >>
> >>> >> Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
> >>> >> URL: 
> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=373252&r1=373251&r2=373252&view=diff
> >>> >> ==============================================================================
> >>> >> --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
> >>> >> +++ cfe/trunk/lib/Sema/SemaChecking.cpp Mon Sep 30 12:55:50 2019
> >>> >> @@ -11308,6 +11308,32 @@ static const IntegerLiteral *getIntegerL
> >>> >>    return IL;
> >>> >>  }
> >>> >>
> >>> >> +static void CheckConditionalWithEnumTypes(Sema &S, SourceLocation Loc,
> >>> >> +                                          Expr *LHS, Expr *RHS) {
> >>> >> +  QualType LHSStrippedType = LHS->IgnoreParenImpCasts()->getType();
> >>> >> +  QualType RHSStrippedType = RHS->IgnoreParenImpCasts()->getType();
> >>> >> +
> >>> >> +  const auto *LHSEnumType = LHSStrippedType->getAs<EnumType>();
> >>> >> +  if (!LHSEnumType)
> >>> >> +    return;
> >>> >> +  const auto *RHSEnumType = RHSStrippedType->getAs<EnumType>();
> >>> >> +  if (!RHSEnumType)
> >>> >> +    return;
> >>> >> +
> >>> >> +  // Ignore anonymous enums.
> >>> >> +  if (!LHSEnumType->getDecl()->hasNameForLinkage())
> >>> >> +    return;
> >>> >> +  if (!RHSEnumType->getDecl()->hasNameForLinkage())
> >>> >> +    return;
> >>> >> +
> >>> >> +  if (S.Context.hasSameUnqualifiedType(LHSStrippedType, 
> >>> >> RHSStrippedType))
> >>> >> +    return;
> >>> >> +
> >>> >> +  S.Diag(Loc, diag::warn_conditional_mixed_enum_types)
> >>> >> +      << LHSStrippedType << RHSStrippedType << LHS->getSourceRange()
> >>> >> +      << RHS->getSourceRange();
> >>> >> +}
> >>> >> +
> >>> >>  static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {
> >>> >>    E = E->IgnoreParenImpCasts();
> >>> >>    SourceLocation ExprLoc = E->getExprLoc();
> >>> >> @@ -11799,6 +11825,8 @@ static void CheckConditionalOperator(Sem
> >>> >>    bool Suspicious = false;
> >>> >>    CheckConditionalOperand(S, E->getTrueExpr(), T, CC, Suspicious);
> >>> >>    CheckConditionalOperand(S, E->getFalseExpr(), T, CC, Suspicious);
> >>> >> +  CheckConditionalWithEnumTypes(S, E->getBeginLoc(), E->getTrueExpr(),
> >>> >> +                                E->getFalseExpr());
> >>> >>
> >>> >>    if (T->isBooleanType())
> >>> >>      DiagnoseIntInBoolContext(S, E);
> >>> >>
> >>> >> Added: cfe/trunk/test/Sema/warn-conditional-emum-types-mismatch.c
> >>> >> URL: 
> >>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-conditional-emum-types-mismatch.c?rev=373252&view=auto
> >>> >> ==============================================================================
> >>> >> --- cfe/trunk/test/Sema/warn-conditional-emum-types-mismatch.c (added)
> >>> >> +++ cfe/trunk/test/Sema/warn-conditional-emum-types-mismatch.c Mon Sep 
> >>> >> 30 12:55:50 2019
> >>> >> @@ -0,0 +1,39 @@
> >>> >> +// RUN: %clang_cc1 -x c -fsyntax-only -verify -Wenum-compare %s
> >>> >> +// RUN: %clang_cc1 -x c -fsyntax-only -verify  %s
> >>> >> +// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -Wenum-compare %s
> >>> >> +// RUN: %clang_cc1 -x c++ -fsyntax-only -verify %s
> >>> >> +
> >>> >> +enum ro { A = 0x10 };
> >>> >> +enum rw { B = 0xFF };
> >>> >> +enum { C = 0x1A};
> >>> >> +
> >>> >> +enum {
> >>> >> +  STATUS_SUCCESS,
> >>> >> +  STATUS_FAILURE,
> >>> >> +  MAX_BASE_STATUS_CODE
> >>> >> +};
> >>> >> +
> >>> >> +enum ExtendedStatusCodes {
> >>> >> +  STATUS_SOMETHING_INTERESTING = MAX_BASE_STATUS_CODE + 1000,
> >>> >> +};
> >>> >> +
> >>> >> +
> >>> >> +int get_flag(int cond) {
> >>> >> +  return cond ? A : B;
> >>> >> +  #ifdef __cplusplus
> >>> >> +  // expected-warning@-2 {{enumeration type mismatch in conditional 
> >>> >> expression ('ro' and 'rw')}}
> >>> >> +  #else
> >>> >> +  // expected-no-diagnostics
> >>> >> +  #endif
> >>> >> +}
> >>> >> +
> >>> >> +// In the following cases we purposefully differ from GCC and dont 
> >>> >> warn because
> >>> >> +// this code pattern is quite sensitive and we dont want to produce 
> >>> >> so many false positives.
> >>> >> +
> >>> >> +int get_flag_anon_enum(int cond) {
> >>> >> +  return cond ? A : C;
> >>> >> +}
> >>> >> +
> >>> >> +int foo(int c) {
> >>> >> +  return c ? STATUS_SOMETHING_INTERESTING : STATUS_SUCCESS;
> >>> >> +}
> >>> >>
> >>> >>
> >>> >> _______________________________________________
> >>> >> cfe-commits mailing list
> >>> >> cfe-commits@lists.llvm.org
> >>> >> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to