From 7a6daeb0d68cba3ace6ceb2d8113bc0ee7ca7c18 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Thu, 9 Dec 2010 21:50:23 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 4 ++++ gcc/c-family/ChangeLog | 5 +++++ gcc/c-family/c-common.c | 37 +++++++++++++++++++++++++++++++++++++ gcc/c-family/c-common.h | 1 + gcc/c-typeck.c | 22 ++-------------------- gcc/cp/ChangeLog | 4 ++++ gcc/cp/typeck.c | 19 ++----------------- 7 files changed, 55 insertions(+), 37 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9ba828f..d9d2724 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2010-12-09 Nathan Froyd + + * c-typeck.c (build_indirect_ref): Call invalid_indirection_error. + 2010-12-09 Joseph Myers * doc/extend.texi (Attribute Syntax): Correct description of diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 2ea3960..495816b 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2010-12-09 Nathan Froyd + + * c-common.h (invalid_indirection_error): Declare. + * c-common.c (invalid_indirection_error): Define. + 2010-12-03 Richard Guenther PR c/46745 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 7a57838..8d0fcc3 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -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 diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 928e502..b6f8d39 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -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); diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 7bba44e..cbe9f20 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -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; } diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3c14d73..ae7d057 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2010-12-09 Nathan Froyd + * typeck.c (cp_build_indirect_ref): Call invalid_indirection_error. + +2010-12-09 Nathan Froyd + * typeck.c (composite_pointer_error): New function. (composite_pointer_type_r, composite_pointer_type): Call it. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index a4bbd4e..f055bbc 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -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; } -- 2.7.4