Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Re: [PATCH] Add cast to VEC_iterate
  2015-10-29 13:03 [PATCH] Add cast to VEC_iterate Pedro Alves
@ 2015-10-29 13:03 ` Simon Marchi
  2015-10-29 17:53   ` Pedro Alves
  0 siblings, 1 reply; 3+ messages in thread
From: Simon Marchi @ 2015-10-29 13:03 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches

On 28 October 2015 at 15:59, Pedro Alves <palves@redhat.com> wrote:
> Fixes this in C++:
>
>  ../../src/gdb/break-catch-sig.c: In function ‘int VEC_gdb_signal_type_iterate(const VEC_gdb_signal_type*, unsigned int, gdb_signal_type*)’:
>  ../../src/gdb/common/vec.h:576:12: error: invalid conversion from ‘int’ to ‘gdb_signal_type {aka gdb_signal}’ [-fpermissive]
>         *ptr = 0;          \
>              ^
>  ../../src/gdb/common/vec.h:417:1: note: in expansion of macro ‘DEF_VEC_FUNC_P’
>   DEF_VEC_FUNC_P(T)         \
>   ^
>  ../../src/gdb/break-catch-sig.c:37:1: note: in expansion of macro ‘DEF_VEC_I’
>   DEF_VEC_I (gdb_signal_type);
>   ^
>
> I actually carried a different fix in the C++ branch that removed this
> assignment and then adjusted all callers that depended on it.  The
> thinking was that this is for the case where we're returning false,
> indicating end of iteration.  But that results in a much larger and
> tricker patch; looking back it seems quite pointless.  I looked at the
> history of GCC's C++ conversion and saw that they added this same cast
> to their version of vec.h, FWIW.  (GCC's vec.h is completely different
> nowadays, having been converted to templates meanwhile.)
>
> gdb/ChangeLog:
> 2015-10-28  Pedro Alves  <palves@redhat.com>
>
>         * common/vec.h (DEF_VEC_FUNC_P) [iterate]: Cast 0 to type T.
> ---
>  gdb/common/vec.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gdb/common/vec.h b/gdb/common/vec.h
> index 2564485..6189283 100644
> --- a/gdb/common/vec.h
> +++ b/gdb/common/vec.h
> @@ -573,7 +573,7 @@ static inline int VEC_OP (T,iterate)                                          \
>      }                                                                    \
>    else                                                                   \
>      {                                                                    \
> -      *ptr = 0;                                                                  \
> +      *ptr = (T) 0;                                                      \
>        return 0;                                                                  \
>      }                                                                    \
>  }                                                                        \
> --
> 1.9.3
>

LGTM.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] Add cast to VEC_iterate
@ 2015-10-29 13:03 Pedro Alves
  2015-10-29 13:03 ` Simon Marchi
  0 siblings, 1 reply; 3+ messages in thread
From: Pedro Alves @ 2015-10-29 13:03 UTC (permalink / raw)
  To: gdb-patches; +Cc: Simon Marchi

Fixes this in C++:

 ../../src/gdb/break-catch-sig.c: In function ‘int VEC_gdb_signal_type_iterate(const VEC_gdb_signal_type*, unsigned int, gdb_signal_type*)’:
 ../../src/gdb/common/vec.h:576:12: error: invalid conversion from ‘int’ to ‘gdb_signal_type {aka gdb_signal}’ [-fpermissive]
	*ptr = 0;          \
	     ^
 ../../src/gdb/common/vec.h:417:1: note: in expansion of macro ‘DEF_VEC_FUNC_P’
  DEF_VEC_FUNC_P(T)         \
  ^
 ../../src/gdb/break-catch-sig.c:37:1: note: in expansion of macro ‘DEF_VEC_I’
  DEF_VEC_I (gdb_signal_type);
  ^

I actually carried a different fix in the C++ branch that removed this
assignment and then adjusted all callers that depended on it.  The
thinking was that this is for the case where we're returning false,
indicating end of iteration.  But that results in a much larger and
tricker patch; looking back it seems quite pointless.  I looked at the
history of GCC's C++ conversion and saw that they added this same cast
to their version of vec.h, FWIW.  (GCC's vec.h is completely different
nowadays, having been converted to templates meanwhile.)

gdb/ChangeLog:
2015-10-28  Pedro Alves  <palves@redhat.com>

	* common/vec.h (DEF_VEC_FUNC_P) [iterate]: Cast 0 to type T.
---
 gdb/common/vec.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/common/vec.h b/gdb/common/vec.h
index 2564485..6189283 100644
--- a/gdb/common/vec.h
+++ b/gdb/common/vec.h
@@ -573,7 +573,7 @@ static inline int VEC_OP (T,iterate)					  \
     }									  \
   else									  \
     {									  \
-      *ptr = 0;								  \
+      *ptr = (T) 0;							  \
       return 0;								  \
     }									  \
 }									  \
-- 
1.9.3


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Add cast to VEC_iterate
  2015-10-29 13:03 ` Simon Marchi
@ 2015-10-29 17:53   ` Pedro Alves
  0 siblings, 0 replies; 3+ messages in thread
From: Pedro Alves @ 2015-10-29 17:53 UTC (permalink / raw)
  To: Simon Marchi; +Cc: gdb-patches

On 10/28/2015 08:33 PM, Simon Marchi wrote:

> LGTM.
> 

Thanks.  I pushed it in.

Thanks,
Pedro Alves


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-10-29 17:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-29 13:03 [PATCH] Add cast to VEC_iterate Pedro Alves
2015-10-29 13:03 ` Simon Marchi
2015-10-29 17:53   ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox