c++: Improve print_tree of static_assert.
authorJason Merrill <jason@redhat.com>
Mon, 11 May 2020 18:05:46 +0000 (14:05 -0400)
committerJason Merrill <jason@redhat.com>
Mon, 11 May 2020 19:09:42 +0000 (15:09 -0400)
We weren't printing the condition and message of a STATIC_ASSERT.

It's also unnecessary to duplicate the code for instantiating a
STATIC_ASSERT between tsubst_expr and instantiate_class_template_1.

gcc/cp/ChangeLog
2020-05-11  Jason Merrill  <jason@redhat.com>

* pt.c (instantiate_class_template_1): Call tsubst_expr for
STATIC_ASSERT member.
* ptree.c (cxx_print_xnode): Handle STATIC_ASSERT.

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/cp/ptree.c

index adbe287c5dcdcb784a7be3be736472f68c41494e..1fdc3880fff9ebf9573c7e7e502cd3932c074638 100644 (file)
@@ -1,3 +1,9 @@
+2020-05-11  Jason Merrill  <jason@redhat.com>
+
+       * pt.c (instantiate_class_template_1): Call tsubst_expr for
+       STATIC_ASSERT member.
+       * ptree.c (cxx_print_xnode): Handle STATIC_ASSERT.
+
 2020-05-11  Jason Merrill  <jason@redhat.com>
 
        * pt.c (find_parameter_packs_r) [LAMBDA_EXPR]: Remove redundant
index 112426af72a3ef4b7b5a9c5f3a81568d430e4f79..28f3c90f17b82aea57cca2122441cc0547ae5128 100644 (file)
@@ -11809,21 +11809,8 @@ instantiate_class_template_1 (tree type)
            {
              /* Build new TYPE_FIELDS.  */
               if (TREE_CODE (t) == STATIC_ASSERT)
-                {
-                  tree condition;
-
-                 ++c_inhibit_evaluation_warnings;
-                 condition =
-                   tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
-                                tf_warning_or_error, NULL_TREE,
-                                /*integral_constant_expression_p=*/true);
-                 --c_inhibit_evaluation_warnings;
-
-                  finish_static_assert (condition,
-                                        STATIC_ASSERT_MESSAGE (t), 
-                                        STATIC_ASSERT_SOURCE_LOCATION (t),
-                                        /*member_p=*/true);
-                }
+               tsubst_expr (t, args, tf_warning_or_error, NULL_TREE,
+                            /*integral_constant_expression_p=*/true);
              else if (TREE_CODE (t) != CONST_DECL)
                {
                  tree r;
index 285028a48418ad967ee73cece50bbec9d1b6fa8b..ab18eecd0e67a6da68f95ac98de9313862c79f5c 100644 (file)
@@ -269,6 +269,17 @@ cxx_print_xnode (FILE *file, tree node, int indent)
     case LAMBDA_EXPR:
       cxx_print_lambda_node (file, node, indent);
       break;
+    case STATIC_ASSERT:
+      if (location_t loc = STATIC_ASSERT_SOURCE_LOCATION (node))
+       {
+         expanded_location xloc = expand_location (loc);
+         indent_to (file, indent+4);
+         fprintf (file, "%s:%d:%d", xloc.file, xloc.line, xloc.column);
+       }
+      print_node (file, "condition", STATIC_ASSERT_CONDITION (node), indent+4);
+      if (tree message = STATIC_ASSERT_MESSAGE (node))
+       print_node (file, "message", message, indent+4);
+      break;
     default:
       break;
     }