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
This commit is contained in:
Tom Tromey 2011-01-05 14:51:20 +00:00 committed by Tom Tromey
parent cd656e2360
commit 7bd1115736
8 changed files with 50 additions and 24 deletions

View File

@ -1,3 +1,12 @@
2011-01-05 Tom Tromey <tromey@redhat.com>
* 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 <Ulrich.Weigand@de.ibm.com>
* config/spu/spu.c (emit_nop_for_insn): Set INSN_LOCATOR for

View File

@ -1,3 +1,9 @@
2011-01-05 Tom Tromey <tromey@redhat.com>
* c-common.h (lvalue_error): Update.
* c-common.c (lvalue_error): Add 'loc' argument. Call error_at,
not error.
2010-12-29 Nicola Pero <nicola@nicola.brainstorm.co.uk>
PR objc/47075

View File

@ -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 ();

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -1,3 +1,8 @@
2011-01-05 Tom Tromey <tromey@redhat.com>
* typeck.c (cp_build_addr_expr_1): Update call to lvalue_error.
(lvalue_or_else): Likewise.
2011-01-01 Kai Tietz <kai.tietz@onevision.com>
PR target/38662

View File

@ -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))