aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2009-06-18 15:10:23 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2009-06-18 15:10:23 +0000
commitb506a5a2387f4a5f69a8c23840e1c733bcb1e595 (patch)
tree18edd293d0c14435ca25ef1e53b3051f9a051794
parent4c1a901679c2dbb549916f260f3f878dcb48390a (diff)
downloadgcc-b506a5a2387f4a5f69a8c23840e1c733bcb1e595.zip
gcc-b506a5a2387f4a5f69a8c23840e1c733bcb1e595.tar.gz
gcc-b506a5a2387f4a5f69a8c23840e1c733bcb1e595.tar.bz2
expr.c (num_div_op): Take explicit location.
2009-06-18 Manuel López-Ibáñez <manu@gcc.gnu.org> libcpp/ * expr.c (num_div_op): Take explicit location. testsuite/ * gcc.dg/cpp/arith-3.c: Add column info. From-SVN: r148662
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/cpp/arith-3.c6
-rw-r--r--libcpp/ChangeLog4
-rw-r--r--libcpp/expr.c17
4 files changed, 22 insertions, 9 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9a7c599..caf69f5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2009-06-18 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ * gcc.dg/cpp/arith-3.c: Add column info.
+
2009-06-18 Sandra Loosemore <sandra@codesourcery.com>
* gcc.target/arm/fp16-compile-none-2.c: New.
diff --git a/gcc/testsuite/gcc.dg/cpp/arith-3.c b/gcc/testsuite/gcc.dg/cpp/arith-3.c
index 3015d31..2f94e98 100644
--- a/gcc/testsuite/gcc.dg/cpp/arith-3.c
+++ b/gcc/testsuite/gcc.dg/cpp/arith-3.c
@@ -9,7 +9,7 @@
Please keep changes to arith-2.c and arith-3.c in sync. */
/* { dg-do preprocess } */
-/* { dg-options "-std=c99" } */
+/* { dg-options "-std=c99 -fshow-column" } */
#include <limits.h>
@@ -274,7 +274,7 @@
# error /* { dg-bogus "error" } */
#endif
-#if -5 / (2 - 2) /* { dg-error "division by zero" } */
+#if -5 / (2 - 2) /* { dg-error "13:division by zero" } */
#endif
#if LONG_UDIVISION != LONG_UDIVISION_ANSWER
@@ -286,7 +286,7 @@
#endif
/* Binary %. Cannot overflow. */
-#if -5 % (2 - 2) /* { dg-error "division by zero" } */
+#if -5 % (2 - 2) /* { dg-error "13:division by zero" } */
#endif
#if TARG_MIN % 1 /* { dg-bogus "overflow" } */
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index e6ef4c3..d714658 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,7 @@
+2009-06-18 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ * expr.c (num_div_op): Take explicit location.
+
2009-06-17 Ian Lance Taylor <iant@google.com>
* include/cpplib.h (progname): Don't declare.
diff --git a/libcpp/expr.c b/libcpp/expr.c
index 6887b16..96dd2fd 100644
--- a/libcpp/expr.c
+++ b/libcpp/expr.c
@@ -52,7 +52,8 @@ static cpp_num num_inequality_op (cpp_reader *, cpp_num, cpp_num,
static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
enum cpp_ttype);
static cpp_num num_mul (cpp_reader *, cpp_num, cpp_num);
-static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
+static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype,
+ source_location);
static cpp_num num_lshift (cpp_num, size_t, size_t);
static cpp_num num_rshift (cpp_num, size_t, size_t);
@@ -1123,7 +1124,7 @@ reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
case CPP_DIV:
case CPP_MOD:
top[-1].value = num_div_op (pfile, top[-1].value,
- top->value, top->op);
+ top->value, top->op, top->loc);
top[-1].loc = top->loc;
break;
@@ -1668,10 +1669,13 @@ num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
return result;
}
-/* Divide two preprocessing numbers, returning the answer or the
- remainder depending upon OP. */
+/* Divide two preprocessing numbers, LHS and RHS, returning the answer
+ or the remainder depending upon OP. LOCATION is the source location
+ of this operator (for diagnostics). */
+
static cpp_num
-num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
+num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op,
+ source_location location)
{
cpp_num result, sub;
cpp_num_part mask;
@@ -1711,7 +1715,8 @@ num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
else
{
if (!pfile->state.skip_eval)
- cpp_error (pfile, CPP_DL_ERROR, "division by zero in #if");
+ cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
+ "division by zero in #if");
return lhs;
}