https://gcc.gnu.org/g:c886eb3421883a3ab70c6af79f271289cc8bb1d4

commit r15-4488-gc886eb3421883a3ab70c6af79f271289cc8bb1d4
Author: Alejandro Colomar <a...@kernel.org>
Date:   Wed Oct 16 14:10:48 2024 +0200

    gcc/: Merge definitions of array_type_nelts_top
    
    There were two identical definitions, and none of them are available
    where they are needed for implementing a number-of-elements-of
    operator.  Merge them, and provide the single definition in
    gcc/tree.{h,cc}, where it's available for that operator, which will be
    added in a following commit.
    
    gcc/ChangeLog:
    
            * tree.h (array_type_nelts_top)
            * tree.cc (array_type_nelts_top):
            Define function (moved from gcc/cp/).
    
    gcc/cp/ChangeLog:
    
            * cp-tree.h (array_type_nelts_top)
            * tree.cc (array_type_nelts_top):
            Remove function (move to gcc/).
    
    gcc/rust/ChangeLog:
    
            * backend/rust-tree.h (array_type_nelts_top)
            * backend/rust-tree.cc (array_type_nelts_top):
            Remove function.
    
    Signed-off-by: Alejandro Colomar <a...@kernel.org>

Diff:
---
 gcc/cp/cp-tree.h              |  1 -
 gcc/cp/tree.cc                | 13 -------------
 gcc/rust/backend/rust-tree.cc | 13 -------------
 gcc/rust/backend/rust-tree.h  |  2 --
 gcc/tree.cc                   | 13 +++++++++++++
 gcc/tree.h                    |  1 +
 6 files changed, 14 insertions(+), 29 deletions(-)

diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 94ee550bd9cb..a44100a2bc43 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -8121,7 +8121,6 @@ extern tree build_exception_variant               (tree, 
tree);
 extern void fixup_deferred_exception_variants   (tree, tree);
 extern tree bind_template_template_parm                (tree, tree);
 extern tree array_type_nelts_total             (tree);
-extern tree array_type_nelts_top               (tree);
 extern bool array_of_unknown_bound_p           (const_tree);
 extern tree break_out_target_exprs             (tree, bool = false);
 extern tree build_ctor_subob_ref               (tree, tree, tree);
diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc
index 3cac8ac4df1b..c80ee0689588 100644
--- a/gcc/cp/tree.cc
+++ b/gcc/cp/tree.cc
@@ -3076,19 +3076,6 @@ cxx_print_statistics (void)
             depth_reached);
 }
 
-/* Return, as an INTEGER_CST node, the number of elements for TYPE
-   (which is an ARRAY_TYPE).  This counts only elements of the top
-   array.  */
-
-tree
-array_type_nelts_top (tree type)
-{
-  return fold_build2_loc (input_location,
-                     PLUS_EXPR, sizetype,
-                     array_type_nelts_minus_one (type),
-                     size_one_node);
-}
-
 /* Return, as an INTEGER_CST node, the number of elements for TYPE
    (which is an ARRAY_TYPE).  This one is a recursive count of all
    ARRAY_TYPEs that are clumped together.  */
diff --git a/gcc/rust/backend/rust-tree.cc b/gcc/rust/backend/rust-tree.cc
index 8d32e5203aea..3dc6b0767112 100644
--- a/gcc/rust/backend/rust-tree.cc
+++ b/gcc/rust/backend/rust-tree.cc
@@ -859,19 +859,6 @@ is_empty_class (tree type)
   return CLASSTYPE_EMPTY_P (type);
 }
 
-// forked from gcc/cp/tree.cc array_type_nelts_top
-
-/* Return, as an INTEGER_CST node, the number of elements for TYPE
-   (which is an ARRAY_TYPE).  This counts only elements of the top
-   array.  */
-
-tree
-array_type_nelts_top (tree type)
-{
-  return fold_build2_loc (input_location, PLUS_EXPR, sizetype,
-                         array_type_nelts_minus_one (type), size_one_node);
-}
-
 // forked from gcc/cp/tree.cc builtin_valid_in_constant_expr_p
 
 /* Test whether DECL is a builtin that may appear in a
diff --git a/gcc/rust/backend/rust-tree.h b/gcc/rust/backend/rust-tree.h
index 26c8b653ac64..e597c3ab81d9 100644
--- a/gcc/rust/backend/rust-tree.h
+++ b/gcc/rust/backend/rust-tree.h
@@ -2993,8 +2993,6 @@ extern location_t rs_expr_location (const_tree);
 extern int
 is_empty_class (tree type);
 
-extern tree array_type_nelts_top (tree);
-
 extern bool
 is_really_empty_class (tree, bool);
 
diff --git a/gcc/tree.cc b/gcc/tree.cc
index 94c6d086bd73..b40f4d31b2f1 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -3732,6 +3732,19 @@ array_type_nelts_minus_one (const_tree type)
          ? max
          : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
 }
+
+/* Return, as an INTEGER_CST node, the number of elements for TYPE
+   (which is an ARRAY_TYPE).  This counts only elements of the top
+   array.  */
+
+tree
+array_type_nelts_top (tree type)
+{
+  return fold_build2_loc (input_location,
+                     PLUS_EXPR, sizetype,
+                     array_type_nelts_minus_one (type),
+                     size_one_node);
+}
 
 /* If arg is static -- a reference to an object in static storage -- then
    return the object.  This is not the same as the C meaning of `static'.
diff --git a/gcc/tree.h b/gcc/tree.h
index c996821c9534..f4c89f5477c5 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4930,6 +4930,7 @@ extern tree build_method_type (tree, tree);
 extern tree build_offset_type (tree, tree);
 extern tree build_complex_type (tree, bool named = false);
 extern tree array_type_nelts_minus_one (const_tree);
+extern tree array_type_nelts_top (tree);
 
 extern tree value_member (tree, tree);
 extern tree purpose_member (const_tree, tree);

Reply via email to