c-typeck.c (build_indirect_ref): Call invalid_indirection_error.

gcc/
	* c-typeck.c (build_indirect_ref): Call invalid_indirection_error.

gcc/c-family/
	* c-common.h (invalid_indirection_error): Declare.
	* c-common.c (invalid_indirection_error): Define.

gcc/cp/
	* typeck.c (cp_build_indirect_ref): Call invalid_indirection_error.

From-SVN: r167666
This commit is contained in:
Nathan Froyd 2010-12-09 21:50:23 +00:00 committed by Nathan Froyd
parent 083586b880
commit 7a6daeb0d6
7 changed files with 55 additions and 37 deletions

View File

@ -1,3 +1,7 @@
2010-12-09 Nathan Froyd <froydnj@codesourcery.com>
* c-typeck.c (build_indirect_ref): Call invalid_indirection_error.
2010-12-09 Joseph Myers <joseph@codesourcery.com>
* doc/extend.texi (Attribute Syntax): Correct description of

View File

@ -1,3 +1,8 @@
2010-12-09 Nathan Froyd <froydnj@codesourcery.com>
* c-common.h (invalid_indirection_error): Declare.
* c-common.c (invalid_indirection_error): Define.
2010-12-03 Richard Guenther <rguenther@suse.de>
PR c/46745

View File

@ -8585,6 +8585,43 @@ lvalue_error (enum lvalue_use use)
gcc_unreachable ();
}
}
/* Print an error message for an invalid indirection of type TYPE.
ERRSTRING is the name of the operator for the indirection. */
void
invalid_indirection_error (location_t loc, tree type, ref_operator errstring)
{
switch (errstring)
{
case RO_NULL:
gcc_assert (c_dialect_cxx ());
error_at (loc, "invalid type argument (have %qT)", type);
break;
case RO_ARRAY_INDEXING:
error_at (loc,
"invalid type argument of array indexing (have %qT)",
type);
break;
case RO_UNARY_STAR:
error_at (loc,
"invalid type argument of unary %<*%> (have %qT)",
type);
break;
case RO_ARROW:
error_at (loc,
"invalid type argument of %<->%> (have %qT)",
type);
break;
case RO_IMPLICIT_CONVERSION:
error_at (loc,
"invalid type argument of implicit conversion (have %qT)",
type);
break;
default:
gcc_unreachable ();
}
}
/* *PTYPE is an incomplete array. Complete it with a domain based on
INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT

View File

@ -929,6 +929,7 @@ enum lvalue_use {
};
extern void lvalue_error (enum lvalue_use);
extern void invalid_indirection_error (location_t, tree, ref_operator);
extern int complete_array_type (tree *, tree, bool);

View File

@ -2267,26 +2267,8 @@ build_indirect_ref (location_t loc, tree ptr, ref_operator errstring)
}
}
else if (TREE_CODE (pointer) != ERROR_MARK)
switch (errstring)
{
case RO_ARRAY_INDEXING:
error_at (loc,
"invalid type argument of array indexing (have %qT)",
type);
break;
case RO_UNARY_STAR:
error_at (loc,
"invalid type argument of unary %<*%> (have %qT)",
type);
break;
case RO_ARROW:
error_at (loc,
"invalid type argument of %<->%> (have %qT)",
type);
break;
default:
gcc_unreachable ();
}
invalid_indirection_error (loc, type, errstring);
return error_mark_node;
}

View File

@ -1,3 +1,7 @@
2010-12-09 Nathan Froyd <froydnj@codesourcery.com>
* typeck.c (cp_build_indirect_ref): Call invalid_indirection_error.
2010-12-09 Nathan Froyd <froydnj@codesourcery.com>
* typeck.c (composite_pointer_error): New function.

View File

@ -2776,23 +2776,8 @@ cp_build_indirect_ref (tree ptr, ref_operator errorstring,
gcc_unreachable ();
}
else if (pointer != error_mark_node)
switch (errorstring)
{
case RO_NULL:
error ("invalid type argument");
break;
case RO_ARRAY_INDEXING:
error ("invalid type argument of array indexing");
break;
case RO_UNARY_STAR:
error ("invalid type argument of unary %<*%>");
break;
case RO_IMPLICIT_CONVERSION:
error ("invalid type argument of implicit conversion");
break;
default:
gcc_unreachable ();
}
invalid_indirection_error (input_location, type, errorstring);
return error_mark_node;
}