re PR c++/19565 (g++ does not warn about overflow in conversion but gcc does)
PR c++/19565 * g++.dg/warn/Wconversion1.C: New test. * g++.dg/ext/packed4.C: Compile with -w. * g++.dg/opt/20050511-1.C: Likewise. * g++.old-deja/g++.other/warn4.C: Compiler with -Wconversion. From-SVN: r105421
This commit is contained in:
parent
21dac32c3c
commit
3c955a0481
@ -1,3 +1,15 @@
|
||||
2005-10-14 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/19565
|
||||
* call.c (convert_like_real): Rely on convert_and_check to issue
|
||||
warnings about overflow and conversion to unsigned.
|
||||
* decl.c (finish_enum): Use the location of the enumerators, not
|
||||
the closing brace of the enumeration, when reporting warnings
|
||||
about conversions.
|
||||
(build_enumerator): Use error_mark_node for erroneous values.
|
||||
* typeck2.c (digest_init): Remove reference to "signature pointer"
|
||||
from comment.
|
||||
|
||||
2005-10-14 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/17796
|
||||
|
@ -4216,21 +4216,6 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
|
||||
else
|
||||
warning (0, "converting to %qT from %qT", t, TREE_TYPE (expr));
|
||||
}
|
||||
/* And warn about assigning a negative value to an unsigned
|
||||
variable. */
|
||||
else if (TYPE_UNSIGNED (t) && TREE_CODE (t) != BOOLEAN_TYPE)
|
||||
{
|
||||
if (TREE_CODE (expr) == INTEGER_CST && TREE_NEGATED_INT (expr))
|
||||
{
|
||||
if (fn)
|
||||
warning (0, "passing negative value %qE for argument %P to %qD",
|
||||
expr, argnum, fn);
|
||||
else
|
||||
warning (0, "converting negative value %qE to %qT", expr, t);
|
||||
}
|
||||
|
||||
overflow_warning (expr);
|
||||
}
|
||||
}
|
||||
|
||||
switch (convs->kind)
|
||||
@ -4430,8 +4415,13 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ocp_convert (totype, expr, CONV_IMPLICIT,
|
||||
LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
|
||||
|
||||
if (issue_conversion_warnings)
|
||||
expr = convert_and_check (totype, expr);
|
||||
else
|
||||
expr = convert (totype, expr);
|
||||
|
||||
return expr;
|
||||
}
|
||||
|
||||
/* Build a call to __builtin_trap. */
|
||||
|
@ -9750,6 +9750,8 @@ finish_enum (tree enumtype)
|
||||
|
||||
/* Update the minimum and maximum values, if appropriate. */
|
||||
value = DECL_INITIAL (decl);
|
||||
if (value == error_mark_node)
|
||||
value = integer_zero_node;
|
||||
/* Figure out what the minimum and maximum values of the
|
||||
enumerators are. */
|
||||
if (!minnode)
|
||||
@ -9852,9 +9854,14 @@ finish_enum (tree enumtype)
|
||||
type of the enumeration. */
|
||||
for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
|
||||
{
|
||||
location_t saved_location;
|
||||
|
||||
decl = TREE_VALUE (values);
|
||||
saved_location = input_location;
|
||||
input_location = DECL_SOURCE_LOCATION (decl);
|
||||
value = perform_implicit_conversion (underlying_type,
|
||||
DECL_INITIAL (decl));
|
||||
input_location = saved_location;
|
||||
|
||||
/* Do not clobber shared ints. */
|
||||
value = copy_node (value);
|
||||
@ -9944,7 +9951,10 @@ build_enumerator (tree name, tree value, tree enumtype)
|
||||
overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
|
||||
|
||||
if (overflowed)
|
||||
error ("overflow in enumeration values at %qD", name);
|
||||
{
|
||||
error ("overflow in enumeration values at %qD", name);
|
||||
value = error_mark_node;
|
||||
}
|
||||
}
|
||||
else
|
||||
value = integer_zero_node;
|
||||
|
@ -695,10 +695,8 @@ digest_init (tree type, tree init)
|
||||
}
|
||||
}
|
||||
|
||||
/* Handle scalar types, including conversions,
|
||||
and signature pointers and references. */
|
||||
if (SCALAR_TYPE_P (type)
|
||||
|| code == REFERENCE_TYPE)
|
||||
/* Handle scalar types (including conversions) and references. */
|
||||
if (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE)
|
||||
return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
|
||||
"initialization", NULL_TREE, 0);
|
||||
|
||||
|
@ -1,3 +1,11 @@
|
||||
2005-10-14 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/19565
|
||||
* g++.dg/warn/Wconversion1.C: New test.
|
||||
* g++.dg/ext/packed4.C: Compile with -w.
|
||||
* g++.dg/opt/20050511-1.C: Likewise.
|
||||
* g++.old-deja/g++.other/warn4.C: Compiler with -Wconversion.
|
||||
|
||||
2005-10-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gfortran.dg/boz_5.f90: New test.
|
||||
|
@ -1,4 +1,5 @@
|
||||
// { dg-do run }
|
||||
// { dg-options "-w" }
|
||||
|
||||
// Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 15 Jul 2003 <nathan@codesourcery.com>
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O3" { target powerpc*-*-* } } */
|
||||
/* { dg-options "-w" } */
|
||||
/* { dg-options "-O3 -w" { target powerpc*-*-* } } */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
12
gcc/testsuite/g++.dg/warn/Wconversion1.C
Normal file
12
gcc/testsuite/g++.dg/warn/Wconversion1.C
Normal file
@ -0,0 +1,12 @@
|
||||
// { dg-options "-Wconversion" }
|
||||
|
||||
char c1 = 1024; // { dg-warning "overflow" }
|
||||
char c2 = char(1024);
|
||||
char c3 = (char) 1024;
|
||||
char c4 = static_cast<char>(1024);
|
||||
|
||||
unsigned char uc1 = -129; // { dg-warning "unsigned" }
|
||||
|
||||
bool b1 = -3;
|
||||
|
||||
int i1 = 0x80000000;
|
@ -1,4 +1,5 @@
|
||||
// { dg-do assemble }
|
||||
// { dg-options "-Wconversion" }
|
||||
|
||||
// Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 21 Nov 1999 <nathan@acm.org>
|
||||
|
Loading…
Reference in New Issue
Block a user