aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2010-06-11 19:56:18 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2010-06-11 19:56:18 +0000
commit6312e84d63b9fdcce0ba0f813590d1dd22a7b37e (patch)
tree054d2a26cd3808fe14b8216d53eda4e92448616c /gcc
parentd4d1606b284058e02290abda66eded7c6a33d152 (diff)
downloadgcc-6312e84d63b9fdcce0ba0f813590d1dd22a7b37e.zip
gcc-6312e84d63b9fdcce0ba0f813590d1dd22a7b37e.tar.gz
gcc-6312e84d63b9fdcce0ba0f813590d1dd22a7b37e.tar.bz2
c-common.c (conversion_warning): Warn at expression location.
2010-06-11 Manuel López-Ibáñez <manu@gcc.gnu.org> c-family/ * c-common.c (conversion_warning): Warn at expression location. From-SVN: r160631
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-common.c32
2 files changed, 22 insertions, 15 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index bd9c0f5..785ae95 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2010-06-11 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ * c-common.c (conversion_warning): Warn at expression
+ location.
+
2010-06-10 Joseph Myers <joseph@codesourcery.com>
* c-opts.c (c_common_handle_option): Don't handle
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 7c841b1..f1dfe71 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -1838,6 +1838,8 @@ conversion_warning (tree type, tree expr)
int i;
const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
tree expr_type = TREE_TYPE (expr);
+ location_t loc = EXPR_HAS_LOCATION (expr)
+ ? EXPR_LOCATION (expr) : input_location;
if (!warn_conversion && !warn_sign_conversion)
return;
@@ -1869,8 +1871,8 @@ conversion_warning (tree type, tree expr)
can hold the values 0 and -1) doesn't lose information - but
it does change the value. */
if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type))
- warning (OPT_Wconversion,
- "conversion to %qT from boolean expression", type);
+ warning_at (loc, OPT_Wconversion,
+ "conversion to %qT from boolean expression", type);
return;
case REAL_CST:
@@ -1891,11 +1893,11 @@ conversion_warning (tree type, tree expr)
{
if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)
&& tree_int_cst_sgn (expr) < 0)
- warning (OPT_Wsign_conversion,
- "negative integer implicitly converted to unsigned type");
+ warning_at (loc, OPT_Wsign_conversion, "negative integer"
+ " implicitly converted to unsigned type");
else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (expr_type))
- warning (OPT_Wsign_conversion, "conversion of unsigned constant "
- "value to negative integer");
+ warning_at (loc, OPT_Wsign_conversion, "conversion of unsigned"
+ " constant value to negative integer");
else
give_warning = true;
}
@@ -1920,9 +1922,9 @@ conversion_warning (tree type, tree expr)
}
if (give_warning)
- warning (OPT_Wconversion,
- "conversion to %qT alters %qT constant value",
- type, expr_type);
+ warning_at (loc, OPT_Wconversion,
+ "conversion to %qT alters %qT constant value",
+ type, expr_type);
return;
@@ -2013,9 +2015,9 @@ conversion_warning (tree type, tree expr)
unsigned but expr is signed, then negative values
will be changed. */
|| (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)))
- warning (OPT_Wsign_conversion, "conversion to %qT from %qT "
- "may change the sign of the result",
- type, expr_type);
+ warning_at (loc, OPT_Wsign_conversion, "conversion to %qT from %qT "
+ "may change the sign of the result",
+ type, expr_type);
}
/* Warn for integer types converted to real types if and only if
@@ -2049,9 +2051,9 @@ conversion_warning (tree type, tree expr)
if (give_warning)
- warning (OPT_Wconversion,
- "conversion to %qT from %qT may alter its value",
- type, expr_type);
+ warning_at (loc, OPT_Wconversion,
+ "conversion to %qT from %qT may alter its value",
+ type, expr_type);
}
}