[cfe-commits] r172102 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaStmt.cpp test/Sema/switch-1.c

Dmitri Gribenko gribozavr at gmail.com
Thu Jan 10 12:44:57 PST 2013


On Thu, Jan 10, 2013 at 10:26 PM, Fariborz Jahanian <fjahanian at apple.com> wrote:
> Author: fjahanian
> Date: Thu Jan 10 14:26:42 2013
> New Revision: 172102
>
> URL: http://llvm.org/viewvc/llvm-project?rev=172102&view=rev
> Log:
> Provide a better warning when case value overflows.
> // rdar://11577384
>
> Modified:
>     cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>     cfe/trunk/lib/Sema/SemaStmt.cpp
>     cfe/trunk/test/Sema/switch-1.c
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=172102&r1=172101&r2=172102&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Jan 10 14:26:42 2013
> @@ -5712,6 +5712,9 @@
>  def warn_case_value_overflow : Warning<
>    "overflow converting case value to switch condition type (%0 to %1)">,
>    InGroup<Switch>;
> +def warn_case_constant_overflow : Warning<
> +  "overflow in case constant expression results in new value (%0)">,
> +  InGroup<DiagGroup<"switch">>;

Hi Fariborz,

Please use InGroup<Switch> here.

Dmitri

>  def err_duplicate_case : Error<"duplicate case value '%0'">;
>  def err_duplicate_case_differing_expr : Error<
>    "duplicate case value: '%0' and '%1' both equal '%2'">;
>
> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=172102&r1=172101&r2=172102&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Thu Jan 10 14:26:42 2013
> @@ -730,8 +730,8 @@
>          LoVal = Lo->EvaluateKnownConstInt(Context, &Diags);
>          if (Diags.size() == 1 &&
>              Diags[0].second.getDiagID() == diag::note_constexpr_overflow) {
> -          Diag(Lo->getLocStart(), diag::warn_case_value_overflow) <<
> -            LoVal.toString(10) << "switch condition value";
> +          Diag(Lo->getLocStart(), diag::warn_case_constant_overflow) <<
> +            LoVal.toString(10);
>            Diag(Diags[0].first, Diags[0].second);
>          }
>
>
> Modified: cfe/trunk/test/Sema/switch-1.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/switch-1.c?rev=172102&r1=172101&r2=172102&view=diff
> ==============================================================================
> --- cfe/trunk/test/Sema/switch-1.c (original)
> +++ cfe/trunk/test/Sema/switch-1.c Thu Jan 10 14:26:42 2013
> @@ -5,10 +5,10 @@
>  int f(int i) {
>    switch (i) {
>      case 2147483647 + 2: // expected-note {{value 2147483649 is outside the range of representable values of type 'int'}}  \
> -                      // expected-warning {{overflow converting case value to switch condition type}}
> +                      // expected-warning {{overflow in case constant expression results in new value (-2147483647)}}
>        return 1;
>      case 9223372036854775807L * 4 : // expected-note {{value 36893488147419103228 is outside the range of representable values of type 'long'}}   \
> -                        // expected-warning {{overflow converting case value to switch condition type}}
> +                        // expected-warning {{overflow in case constant expression results in new value (-4)}}
>        return 2;
>      case 2147483647:
>        return 0;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/



More information about the cfe-commits mailing list