On 1/5/22 10:00, Bruno Haible wrote:
Another possible fix would be to change
   size_t size;
to
   idx_t size;
in the struct.

Yes, that fits better into our strategy of preferring signed to unsigned types for sizes. Plus, it avoids a cast that's too powerful in C. I installed the attached.
From 403968da56573bdbdcab79adabddcdc270e05cc9 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Wed, 5 Jan 2022 11:37:26 -0800
Subject: [PATCH 1/2] stack: pacify gcc -Wsign-compare

* lib/stack.h (_GL_STACK_TYPE): Use idx_t for size too.
Suggested by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2022-01/msg00035.html
---
 ChangeLog   | 7 +++++++
 lib/stack.h | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index ad29aed978..609720a451 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2022-01-05  Paul Eggert  <egg...@cs.ucla.edu>
+
+	stack: pacify gcc -Wsign-compare
+	* lib/stack.h (_GL_STACK_TYPE): Use idx_t for size too.
+	Suggested by Bruno Haible in:
+	https://lists.gnu.org/r/bug-gnulib/2022-01/msg00035.html
+
 2022-01-05  Bruno Haible  <br...@clisp.org>
 
 	Fix last commit.
diff --git a/lib/stack.h b/lib/stack.h
index 26fdbad770..b4c35535a7 100644
--- a/lib/stack.h
+++ b/lib/stack.h
@@ -77,7 +77,7 @@
 typedef struct
 {
   GL_STACK_ELEMENT *base;
-  size_t size;
+  idx_t size;
   idx_t allocated;
 } _GL_STACK_TYPE;
 
-- 
2.32.0

From 9d3ec33a02dccaaa930f839752304d1b8d0b903e Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Wed, 5 Jan 2022 11:51:38 -0800
Subject: [PATCH 2/2] stack: also update stack_size to return idx_t

* lib/stack.h (_GL_STACK_PREFIX (size)): Return idx_t, not size_t.
---
 ChangeLog   | 1 +
 NEWS        | 3 +++
 lib/stack.h | 6 +++---
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 609720a451..4829d58e83 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
 	* lib/stack.h (_GL_STACK_TYPE): Use idx_t for size too.
 	Suggested by Bruno Haible in:
 	https://lists.gnu.org/r/bug-gnulib/2022-01/msg00035.html
+	(_GL_STACK_PREFIX (size)): Return idx_t, not size_t.
 
 2022-01-05  Bruno Haible  <br...@clisp.org>
 
diff --git a/NEWS b/NEWS
index 2ce1c73014..c13a115ada 100644
--- a/NEWS
+++ b/NEWS
@@ -66,6 +66,9 @@ User visible incompatible changes
 
 Date        Modules         Changes
 
+2022-01-05  stack           This module now uses idx_t instead of size_t
+                            for indexes and counts.
+
 2021-08-27  base32          These modules now use idx_t instead of size_t
             base64          for indexes and counts.
 
diff --git a/lib/stack.h b/lib/stack.h
index b4c35535a7..28b9d7a542 100644
--- a/lib/stack.h
+++ b/lib/stack.h
@@ -17,7 +17,7 @@
 /* Written by Marc Nieper-Wißkirchen <m...@nieper-wisskirchen.de>, 2020.  */
 
 /* This header file does not have include-guards as it is meant to be
-   includeable multiple times as long as the necessary defines have
+   includable multiple times as long as the necessary defines have
    been set up.
 
    A stack is implemented with a homogenous array of elements in
@@ -36,7 +36,7 @@
      Popping:            ELEMENT element = stack_pop (&stack);
      Discarding:         stack_discard (&stack);
      Top-of-stack:       ELEMENT element = stack_top (&stack);
-     Size:               size_t size = stack_size (&stack);
+     Size:               idx_t size = stack_size (&stack);
 
    Here, ELEMENT is the type to which GL_STACK_ELEMENT was defined when
    this file was included.
@@ -152,7 +152,7 @@ _GL_STACK_PREFIX (top) (const _GL_STACK_TYPE *stack)
 }
 
 /* Return the currently stored number of elements in the stack.  */
-GL_STACK_STORAGECLASS _GL_ATTRIBUTE_PURE size_t
+GL_STACK_STORAGECLASS _GL_ATTRIBUTE_PURE idx_t
 _GL_STACK_PREFIX (size) (const _GL_STACK_TYPE *stack)
 {
   return stack->size;
-- 
2.32.0

Reply via email to