From 227d73b492c7629695c3669029bb788f9679149f Mon Sep 17 00:00:00 2001 From: dberlin Date: Thu, 9 Aug 2007 21:13:30 +0000 Subject: [PATCH] 2007-08-09 Daniel Berlin * c-typeck.c (readonly_error): Improve error for assignment. * c-pretty-print.c (pp_c_additive_expression): Handle pointer-plus expression. (pp_c_expression): Ditto. 2007-08-09 Daniel Berlin * typeck2.c (readonly_error): Handle general expressions. * error.c (dump_expr): Handle POINTER_PLUS_EXPR git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127320 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/c-pretty-print.c | 4 +++- gcc/c-typeck.c | 9 +++++---- gcc/cp/ChangeLog | 5 +++++ gcc/cp/error.c | 4 ++++ gcc/cp/typeck2.c | 2 +- gcc/testsuite/gcc.dg/readonly-loc.c | 11 +++++++++++ 7 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/readonly-loc.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b6c953a..f9cfb2e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2007-08-09 Daniel Berlin + + * c-typeck.c (readonly_error): Improve error for assignment. + + * c-pretty-print.c (pp_c_additive_expression): Handle pointer-plus + expression. + (pp_c_expression): Ditto. + 2007-08-09 Simon Baldwin * simplify-rtx.c (simplify_binary_operation_1): Removed erroneous diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c index e11d83c..a5dd82f 100644 --- a/gcc/c-pretty-print.c +++ b/gcc/c-pretty-print.c @@ -1597,11 +1597,12 @@ pp_c_additive_expression (c_pretty_printer *pp, tree e) enum tree_code code = TREE_CODE (e); switch (code) { + case POINTER_PLUS_EXPR: case PLUS_EXPR: case MINUS_EXPR: pp_c_additive_expression (pp, TREE_OPERAND (e, 0)); pp_c_whitespace (pp); - if (code == PLUS_EXPR) + if (code == PLUS_EXPR || code == POINTER_PLUS_EXPR) pp_plus (pp); else pp_minus (pp); @@ -1979,6 +1980,7 @@ pp_c_expression (c_pretty_printer *pp, tree e) pp_conditional_expression (pp, e); break; + case POINTER_PLUS_EXPR: case PLUS_EXPR: case MINUS_EXPR: pp_c_additive_expression (pp, e); diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index e54eedb..3e209e2 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -3152,10 +3152,11 @@ readonly_error (tree arg, enum lvalue_use use) G_("read-only variable %qD used as % output")), arg); else - error (READONLY_MSG (G_("assignment of read-only location"), - G_("increment of read-only location"), - G_("decrement of read-only location"), - G_("read-only location used as % output"))); + error (READONLY_MSG (G_("assignment of read-only location %qE"), + G_("increment of read-only location %qE"), + G_("decrement of read-only location %qE"), + G_("read-only location %qE used as % output")), + arg); } diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e656382..e4fcf64 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2007-08-09 Daniel Berlin + + * typeck2.c (readonly_error): Handle general expressions. + * error.c (dump_expr): Handle POINTER_PLUS_EXPR + 2007-08-06 Dan Hipschman * method.c (use_thunk): Use DECL_NAME instead of DECL_RTL to diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 4e34f04..46785f9 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1612,6 +1612,10 @@ dump_expr (tree t, int flags) dump_expr (TREE_OPERAND (t, 1), flags | TFF_EXPR_IN_PARENS); break; + case POINTER_PLUS_EXPR: + dump_binary_op ("+", t, flags); + break; + case INIT_EXPR: case MODIFY_EXPR: case PLUS_EXPR: diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 215e1a3..f1c3c32 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -104,7 +104,7 @@ readonly_error (tree arg, const char* string) else if (TREE_CODE (arg) == FUNCTION_DECL) error ("%s of function %qD", string, arg); else - error ("%s of read-only location", string); + error ("%s of read-only location %qE", string, arg); } diff --git a/gcc/testsuite/gcc.dg/readonly-loc.c b/gcc/testsuite/gcc.dg/readonly-loc.c new file mode 100644 index 0000000..c5d1c97 --- /dev/null +++ b/gcc/testsuite/gcc.dg/readonly-loc.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O" } */ +int func() +{ + const int *arr; + const int arr2[5]; + arr[0] = 1; /* { dg-error "assignment of read-only location" "*(arr)" } */ + arr[1] = 1; /* { dg-error "assignment of read-only location" "*(arr + 4u)" } */ + arr2[0] = 1; /* { dg-error "assignment of read-only location" "arr2\[0\]" } */ + arr2[1] = 1; /* { dg-error "assignment of read-only location" "arr2\[1\]" } */ +} -- 2.7.4