From 7bd111573699079b760f18e81439cd7dc5268cca Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 5 Jan 2011 14:51:20 +0000 Subject: [PATCH] c-parser.c (c_parser_omp_atomic): Pass location of assignment operator to c_finish_omp_atomic. gcc * c-parser.c (c_parser_omp_atomic): Pass location of assignment operator to c_finish_omp_atomic. * c-typeck.c (lvalue_or_else): Add 'loc' argument. (build_unary_op): Update. (build_modify_expr): Update. (build_asm_expr): Update. gcc/cp * typeck.c (cp_build_addr_expr_1): Update call to lvalue_error. (lvalue_or_else): Likewise. gcc/c-family * c-common.h (lvalue_error): Update. * c-common.c (lvalue_error): Add 'loc' argument. Call error_at, not error. From-SVN: r168514 --- gcc/ChangeLog | 9 +++++++++ gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-common.c | 17 +++++++++-------- gcc/c-family/c-common.h | 4 ++-- gcc/c-parser.c | 5 ++++- gcc/c-typeck.c | 22 ++++++++++++---------- gcc/cp/ChangeLog | 5 +++++ gcc/cp/typeck.c | 6 +++--- 8 files changed, 50 insertions(+), 24 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14397ef9b61a..1a072a5d9ee8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-01-05 Tom Tromey + + * c-parser.c (c_parser_omp_atomic): Pass location of assignment + operator to c_finish_omp_atomic. + * c-typeck.c (lvalue_or_else): Add 'loc' argument. + (build_unary_op): Update. + (build_modify_expr): Update. + (build_asm_expr): Update. + 2011-01-05 Ulrich Weigand * config/spu/spu.c (emit_nop_for_insn): Set INSN_LOCATOR for diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index bf0bc7689f7c..668524415b99 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2011-01-05 Tom Tromey + + * c-common.h (lvalue_error): Update. + * c-common.c (lvalue_error): Add 'loc' argument. Call error_at, + not error. + 2010-12-29 Nicola Pero PR objc/47075 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 8eb849aa1746..4af7ef4ee4e7 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -1,6 +1,6 @@ /* Subroutines shared by all languages that are variants of C. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -8631,27 +8631,28 @@ readonly_error (tree arg, enum lvalue_use use) } /* Print an error message for an invalid lvalue. USE says - how the lvalue is being used and so selects the error message. */ + how the lvalue is being used and so selects the error message. LOC + is the location for the error. */ void -lvalue_error (enum lvalue_use use) +lvalue_error (location_t loc, enum lvalue_use use) { switch (use) { case lv_assign: - error ("lvalue required as left operand of assignment"); + error_at (loc, "lvalue required as left operand of assignment"); break; case lv_increment: - error ("lvalue required as increment operand"); + error_at (loc, "lvalue required as increment operand"); break; case lv_decrement: - error ("lvalue required as decrement operand"); + error_at (loc, "lvalue required as decrement operand"); break; case lv_addressof: - error ("lvalue required as unary %<&%> operand"); + error_at (loc, "lvalue required as unary %<&%> operand"); break; case lv_asm: - error ("lvalue required in asm statement"); + error_at (loc, "lvalue required in asm statement"); break; default: gcc_unreachable (); diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 12845757c093..05456d33abd5 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -1,6 +1,6 @@ /* Definitions for c-common.c. Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -929,7 +929,7 @@ enum lvalue_use { }; extern void readonly_error (tree, enum lvalue_use); -extern void lvalue_error (enum lvalue_use); +extern void lvalue_error (location_t, enum lvalue_use); extern void invalid_indirection_error (location_t, tree, ref_operator); extern int complete_array_type (tree *, tree, bool); diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 4eaf8680f67a..1e868afddf6c 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -1,6 +1,6 @@ /* Parser for C and Objective-C. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Parser actions based on the old Bison parser; structure somewhat @@ -9104,6 +9104,9 @@ c_parser_omp_atomic (location_t loc, c_parser *parser) goto saw_error; } + /* Arrange to pass the location of the assignment operator to + c_finish_omp_atomic. */ + loc = c_parser_peek_token (parser)->location; c_parser_consume_token (parser); { location_t rhs_loc = c_parser_peek_token (parser)->location; diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 44223fb38da3..149235a8e775 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -1,6 +1,6 @@ /* Build expressions with type checking for C compiler. Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -98,7 +98,7 @@ static void set_nonincremental_init (struct obstack *); static void set_nonincremental_init_from_string (tree, struct obstack *); static tree find_init_member (tree, struct obstack *); static void readonly_warning (tree, enum lvalue_use); -static int lvalue_or_else (const_tree, enum lvalue_use); +static int lvalue_or_else (location_t, const_tree, enum lvalue_use); static void record_maybe_used_decl (tree); static int comptypes_internal (const_tree, const_tree, bool *, bool *); @@ -3564,7 +3564,8 @@ build_unary_op (location_t location, /* Complain about anything that is not a true lvalue. In Objective-C, skip this check for property_refs. */ if (!objc_is_property_ref (arg) - && !lvalue_or_else (arg, ((code == PREINCREMENT_EXPR + && !lvalue_or_else (location, + arg, ((code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR) ? lv_increment : lv_decrement))) @@ -3747,7 +3748,7 @@ build_unary_op (location_t location, /* Anything not already handled and not a true memory reference or a non-lvalue array is an error. */ else if (typecode != FUNCTION_TYPE && !flag - && !lvalue_or_else (arg, lv_addressof)) + && !lvalue_or_else (location, arg, lv_addressof)) return error_mark_node; /* Move address operations inside C_MAYBE_CONST_EXPR to simplify @@ -3905,15 +3906,16 @@ readonly_warning (tree arg, enum lvalue_use use) /* Return nonzero if REF is an lvalue valid for this language; otherwise, print an error message and return zero. USE says - how the lvalue is being used and so selects the error message. */ + how the lvalue is being used and so selects the error message. + LOCATION is the location at which any error should be reported. */ static int -lvalue_or_else (const_tree ref, enum lvalue_use use) +lvalue_or_else (location_t loc, const_tree ref, enum lvalue_use use) { int win = lvalue_p (ref); if (!win) - lvalue_error (use); + lvalue_error (loc, use); return win; } @@ -4801,7 +4803,7 @@ build_modify_expr (location_t location, tree lhs, tree lhs_origtype, return error_mark_node; /* For ObjC properties, defer this check. */ - if (!objc_is_property_ref (lhs) && !lvalue_or_else (lhs, lv_assign)) + if (!objc_is_property_ref (lhs) && !lvalue_or_else (location, lhs, lv_assign)) return error_mark_node; if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR) @@ -4851,7 +4853,7 @@ build_modify_expr (location_t location, tree lhs, tree lhs_origtype, return result; /* Else, do the check that we postponed for Objective-C. */ - if (!lvalue_or_else (lhs, lv_assign)) + if (!lvalue_or_else (location, lhs, lv_assign)) return error_mark_node; } @@ -8479,7 +8481,7 @@ build_asm_expr (location_t loc, tree string, tree outputs, tree inputs, get an error. Gross, but ... */ STRIP_NOPS (output); - if (!lvalue_or_else (output, lv_asm)) + if (!lvalue_or_else (loc, output, lv_asm)) output = error_mark_node; if (output != error_mark_node diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 854fff306202..67411a5fe09e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-01-05 Tom Tromey + + * typeck.c (cp_build_addr_expr_1): Update call to lvalue_error. + (lvalue_or_else): Likewise. + 2011-01-01 Kai Tietz PR target/38662 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 64ca9bd79f51..c062f0fa5e4d 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1,6 +1,6 @@ /* Build expressions with type checking for C++ compiler. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) @@ -4756,7 +4756,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) if (kind == clk_none) { if (complain & tf_error) - lvalue_error (lv_addressof); + lvalue_error (input_location, lv_addressof); return error_mark_node; } if (strict_lvalue && (kind & (clk_rvalueref|clk_class))) @@ -8219,7 +8219,7 @@ lvalue_or_else (tree ref, enum lvalue_use use, tsubst_flags_t complain) if (kind == clk_none) { if (complain & tf_error) - lvalue_error (use); + lvalue_error (input_location, use); return 0; } else if (kind & (clk_rvalueref|clk_class))