From fe5f0da48681bc0b6f8174cbe11e83745cc84ca2 Mon Sep 17 00:00:00 2001 From: froydnj Date: Thu, 9 Dec 2010 21:47:12 +0000 Subject: [PATCH] * typeck.c (composite_pointer_error): New function. (composite_pointer_type_r, composite_pointer_type): Call it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167665 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 5 +++ gcc/cp/typeck.c | 94 ++++++++++++++++++++------------------------------------ 2 files changed, 38 insertions(+), 61 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fb148620b41..3c14d737d2b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-12-09 Nathan Froyd + + * typeck.c (composite_pointer_error): New function. + (composite_pointer_type_r, composite_pointer_type): Call it. + 2010-12-08 Jason Merrill PR c++/46348 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 7416f090de8..a4bbd4eb137 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -443,6 +443,35 @@ type_after_usual_arithmetic_conversions (tree t1, tree t2) return cp_common_type (t1, t2); } +static void +composite_pointer_error (diagnostic_t kind, tree t1, tree t2, + composite_pointer_operation operation) +{ + switch (operation) + { + case CPO_COMPARISON: + emit_diagnostic (kind, input_location, 0, + "comparison between " + "distinct pointer types %qT and %qT lacks a cast", + t1, t2); + break; + case CPO_CONVERSION: + emit_diagnostic (kind, input_location, 0, + "conversion between " + "distinct pointer types %qT and %qT lacks a cast", + t1, t2); + break; + case CPO_CONDITIONAL_EXPR: + emit_diagnostic (kind, input_location, 0, + "conditional expression between " + "distinct pointer types %qT and %qT lacks a cast", + t1, t2); + break; + default: + gcc_unreachable (); + } +} + /* Subroutine of composite_pointer_type to implement the recursive case. See that function for documentation of the parameters. */ @@ -486,28 +515,8 @@ composite_pointer_type_r (tree t1, tree t2, else { if (complain & tf_error) - { - switch (operation) - { - case CPO_COMPARISON: - permerror (input_location, "comparison between " - "distinct pointer types %qT and %qT lacks a cast", - t1, t2); - break; - case CPO_CONVERSION: - permerror (input_location, "conversion between " - "distinct pointer types %qT and %qT lacks a cast", - t1, t2); - break; - case CPO_CONDITIONAL_EXPR: - permerror (input_location, "conditional expression between " - "distinct pointer types %qT and %qT lacks a cast", - t1, t2); - break; - default: - gcc_unreachable (); - } - } + composite_pointer_error (DK_PERMERROR, t1, t2, operation); + result_type = void_type_node; } result_type = cp_build_qualified_type (result_type, @@ -520,28 +529,7 @@ composite_pointer_type_r (tree t1, tree t2, if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1), TYPE_PTRMEM_CLASS_TYPE (t2)) && (complain & tf_error)) - { - switch (operation) - { - case CPO_COMPARISON: - permerror (input_location, "comparison between " - "distinct pointer types %qT and %qT lacks a cast", - t1, t2); - break; - case CPO_CONVERSION: - permerror (input_location, "conversion between " - "distinct pointer types %qT and %qT lacks a cast", - t1, t2); - break; - case CPO_CONDITIONAL_EXPR: - permerror (input_location, "conditional expression between " - "distinct pointer types %qT and %qT lacks a cast", - t1, t2); - break; - default: - gcc_unreachable (); - } - } + composite_pointer_error (DK_PERMERROR, t1, t2, operation); result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1), result_type); } @@ -662,23 +650,7 @@ composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2, else { if (complain & tf_error) - switch (operation) - { - case CPO_COMPARISON: - error ("comparison between distinct " - "pointer types %qT and %qT lacks a cast", t1, t2); - break; - case CPO_CONVERSION: - error ("conversion between distinct " - "pointer types %qT and %qT lacks a cast", t1, t2); - break; - case CPO_CONDITIONAL_EXPR: - error ("conditional expression between distinct " - "pointer types %qT and %qT lacks a cast", t1, t2); - break; - default: - gcc_unreachable (); - } + composite_pointer_error (DK_ERROR, t1, t2, operation); return error_mark_node; } } -- 2.11.0