This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Add cast to VEC_iterate
- From: Pedro Alves <palves at redhat dot com>
- To: gdb-patches at sourceware dot org
- Cc: Simon Marchi <simon dot marchi at polymtl dot ca>
- Date: Wed, 28 Oct 2015 19:59:12 +0000
- Subject: [PATCH] Add cast to VEC_iterate
- Authentication-results: sourceware.org; auth=none
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