diff --git a/ChangeLog b/ChangeLog index 349b116..4bf76cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2016-11-26 Bruno Haible + + Avoid 'warning: use of old-style cast' in output code. + * src/output.h (Output::output_asso_values_index): New method + declaration. + * src/output.cc (Output::output_asso_values_index): New method, + extracted from Output::output_asso_values_ref. + (Output::output_asso_values_ref): Use it. In C++ mode, emit C++ style + cast syntax. + Reported at . + 2016-11-26 Bruno Haible Avoid 'warning: implicit conversion changes signedness' in output code. diff --git a/src/output.cc b/src/output.cc index e60f8f7..c42fbba 100644 --- a/src/output.cc +++ b/src/output.cc @@ -749,6 +749,21 @@ void Output_Compare_Memcmp::output_comparison (const Output_Expr& expr1, /* ------------------------------------------------------------------------- */ +/* Generates a C expression for an asso_values[] index. */ + +void +Output::output_asso_values_index (int pos) const +{ + if (pos == Positions::LASTCHAR) + printf ("str[len - 1]"); + else + { + printf ("str[%d]", pos); + if (_alpha_inc[pos]) + printf ("+%u", _alpha_inc[pos]); + } +} + /* Generates a C expression for an asso_values[] reference. */ void @@ -757,14 +772,18 @@ Output::output_asso_values_ref (int pos) const printf ("asso_values["); /* Always cast to unsigned char. This is necessary when the alpha_inc is nonzero, and also avoids a gcc warning "subscript has type 'char'". */ - printf ("(unsigned char)"); - if (pos == Positions::LASTCHAR) - printf ("str[len - 1]"); + if (option[CPLUSPLUS]) + { + /* In C++, a C style cast may lead to a 'warning: use of old-style cast'. + Therefore prefer the C++ style cast syntax. */ + printf ("static_cast("); + output_asso_values_index (pos); + printf (")"); + } else { - printf ("str[%d]", pos); - if (_alpha_inc[pos]) - printf ("+%u", _alpha_inc[pos]); + printf ("(unsigned char)"); + output_asso_values_index (pos); } printf ("]"); } diff --git a/src/output.h b/src/output.h index 6f61a04..397cde6 100644 --- a/src/output.h +++ b/src/output.h @@ -2,7 +2,7 @@ /* Output routines. - Copyright (C) 1989-1998, 2000, 2002-2003, 2009 Free Software Foundation, Inc. + Copyright (C) 1989-1998, 2000, 2002-2003, 2009, 2016 Free Software Foundation, Inc. Written by Douglas C. Schmidt and Bruno Haible . @@ -71,6 +71,9 @@ private: /* Outputs the maximum and minimum hash values etc. */ void output_constants (struct Output_Constants&) const; + /* Generates a C expression for an asso_values[] index. */ + void output_asso_values_index (int pos) const; + /* Generates a C expression for an asso_values[] reference. */ void output_asso_values_ref (int pos) const;