Patchwork [c++] tidy error-handling in cp/typeck2.c

login
register
mail settings
Submitter Nathan Froyd
Date Dec. 9, 2010, 6:43 p.m.
Message ID <20101209184321.GL25904@nightcrawler>
Download mbox | patch
Permalink /patch/74958/
State New
Headers show

Comments

Nathan Froyd - Dec. 9, 2010, 6:43 p.m.
The patch below pulls out some common diagnostic code about composite
pointer operations into its own function.

Tested on x86_64-unknown-linux-gnu.  OK to commit?

-Nathan

	* typeck.c (composite_pointer_error): New function.
	(composite_pointer_type_r, composite_pointer_type): Call it.
Gabriel Dos Reis - Dec. 9, 2010, 9:42 p.m.
On Thu, Dec 9, 2010 at 12:43 PM, Nathan Froyd <froydnj@codesourcery.com> wrote:
> The patch below pulls out some common diagnostic code about composite
> pointer operations into its own function.
>
> Tested on x86_64-unknown-linux-gnu.  OK to commit?

OK.
Richard Guenther - Dec. 10, 2010, 9:44 a.m.
On Thu, Dec 9, 2010 at 7:43 PM, Nathan Froyd <froydnj@codesourcery.com> wrote:
> The patch below pulls out some common diagnostic code about composite
> pointer operations into its own function.
>
> Tested on x86_64-unknown-linux-gnu.  OK to commit?
>
> -Nathan
>
>        * 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 7416f09..a4bbd4e 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)

This function lacks a comment ...

Richard.

> +{
> +  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;
>         }
>     }
>
>

Patch

diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 7416f09..a4bbd4e 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;
         }
     }