chaser for cp-tree.h
Zack Weinberg
zack@rabi.columbia.edu
Thu Dec 23 10:46:00 GMT 1999
This patch silences half of the new warnings from my -Wsign-compare patch.
The macros that are being modified store a flag in one of two different
places, one of which is unsigned. It *might* be feasible to make
TYPE_ALIAS_SET(node) an unsigned int, but that would affect code all over
the compiler.
Hrm... looking at it again while awake, I shouldn't have had to modify the
BINFO_* macros. Will experiment further.
zw
* cp-tree.h (CLASSTYPE_MARKED_N, SET_CLASSTYPE_MARKED_N,
CLEAR_CLASSTYPE_MARKED_N, ...): Cast signed branch of ? : expression
to unsigned.
===================================================================
Index: cp-tree.h
--- cp-tree.h 1999/12/21 02:11:10 1.367
+++ cp-tree.h 1999/12/23 18:40:16
@@ -1339,20 +1339,20 @@ struct lang_type
/* Get the value of the Nth mark bit. */
#define CLASSTYPE_MARKED_N(NODE, N) \
- (((CLASS_TYPE_P (NODE) ? TYPE_LANG_SPECIFIC (NODE)->marks \
- : TYPE_ALIAS_SET (NODE)) & (1 << N)) != 0)
+ (((CLASS_TYPE_P (NODE) ? TYPE_LANG_SPECIFIC (NODE)->marks \
+ : (unsigned) TYPE_ALIAS_SET (NODE)) & (1 << N)) != 0)
/* Set the Nth mark bit. */
#define SET_CLASSTYPE_MARKED_N(NODE, N) \
(CLASS_TYPE_P (NODE) \
- ? (TYPE_LANG_SPECIFIC (NODE)->marks |= (1 << (N))) \
- : (TYPE_ALIAS_SET (NODE) |= (1 << (N))))
+ ? (TYPE_LANG_SPECIFIC (NODE)->marks |= (1 << (N))) \
+ : (unsigned) (TYPE_ALIAS_SET (NODE) |= (1 << (N))))
/* Clear the Nth mark bit. */
#define CLEAR_CLASSTYPE_MARKED_N(NODE, N) \
(CLASS_TYPE_P (NODE) \
- ? (TYPE_LANG_SPECIFIC (NODE)->marks &= ~(1 << (N))) \
- : (TYPE_ALIAS_SET (NODE) &= ~(1 << (N))))
+ ? (TYPE_LANG_SPECIFIC (NODE)->marks &= ~(1 << (N))) \
+ : (unsigned) (TYPE_ALIAS_SET (NODE) &= ~(1 << (N))))
/* Get the value of the mark bits. */
#define CLASSTYPE_MARKED(NODE) CLASSTYPE_MARKED_N(NODE, 0)
@@ -1514,13 +1514,25 @@ struct lang_type
The TREE_CHAIN is for scratch space in search.c. */
+/* In the macros that follow, the casts are to silence warnings about
+ mismatched signedness. */
+
/* Nonzero means marked by DFS or BFS search, including searches
by `get_binfo' and `get_base_distance'. */
-#define BINFO_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLASSTYPE_MARKED(BINFO_TYPE(NODE)):TREE_LANG_FLAG_0(NODE))
+#define BINFO_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLASSTYPE_MARKED(BINFO_TYPE(NODE)) \
+ : TREE_LANG_FLAG_0(NODE))
/* Macros needed because of C compilers that don't allow conditional
- expressions to be lvalues. Grr! */
-#define SET_BINFO_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?SET_CLASSTYPE_MARKED(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_0(NODE)=1))
-#define CLEAR_BINFO_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLEAR_CLASSTYPE_MARKED(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_0(NODE)=0))
+ expressions to be lvalues. Grr! */
+#define SET_BINFO_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) SET_CLASSTYPE_MARKED(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_0(NODE) = 1))
+#define CLEAR_BINFO_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLEAR_CLASSTYPE_MARKED(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_0(NODE) = 0))
/* Nonzero means marked in search through virtual inheritance hierarchy. */
#define BINFO_VBASE_MARKED(NODE) CLASSTYPE_MARKED2 (BINFO_TYPE (NODE))
@@ -1530,21 +1542,45 @@ struct lang_type
/* Nonzero means marked in search for members or member functions. */
#define BINFO_FIELDS_MARKED(NODE) \
- (TREE_VIA_VIRTUAL(NODE)?CLASSTYPE_MARKED2 (BINFO_TYPE (NODE)):TREE_LANG_FLAG_2(NODE))
-#define SET_BINFO_FIELDS_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?SET_CLASSTYPE_MARKED2(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_2(NODE)=1))
-#define CLEAR_BINFO_FIELDS_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLEAR_CLASSTYPE_MARKED2(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_2(NODE)=0))
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLASSTYPE_MARKED2 (BINFO_TYPE (NODE)) \
+ : TREE_LANG_FLAG_2(NODE))
+#define SET_BINFO_FIELDS_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) SET_CLASSTYPE_MARKED2(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_2(NODE) = 1))
+#define CLEAR_BINFO_FIELDS_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLEAR_CLASSTYPE_MARKED2(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_2(NODE) = 0))
/* Nonzero means that this class is on a path leading to a new vtable. */
#define BINFO_VTABLE_PATH_MARKED(NODE) \
- (TREE_VIA_VIRTUAL(NODE)?CLASSTYPE_MARKED3(BINFO_TYPE(NODE)):TREE_LANG_FLAG_3(NODE))
-#define SET_BINFO_VTABLE_PATH_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?SET_CLASSTYPE_MARKED3(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_3(NODE)=1))
-#define CLEAR_BINFO_VTABLE_PATH_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLEAR_CLASSTYPE_MARKED3(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_3(NODE)=0))
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLASSTYPE_MARKED3(BINFO_TYPE(NODE)) \
+ : TREE_LANG_FLAG_3(NODE))
+#define SET_BINFO_VTABLE_PATH_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) SET_CLASSTYPE_MARKED3(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_3(NODE) = 1))
+#define CLEAR_BINFO_VTABLE_PATH_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLEAR_CLASSTYPE_MARKED3(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_3(NODE) = 0))
/* Nonzero means that this class has a new vtable. */
#define BINFO_NEW_VTABLE_MARKED(NODE) \
- (TREE_VIA_VIRTUAL(NODE)?CLASSTYPE_MARKED4(BINFO_TYPE(NODE)):TREE_LANG_FLAG_4(NODE))
-#define SET_BINFO_NEW_VTABLE_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?SET_CLASSTYPE_MARKED4(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_4(NODE)=1))
-#define CLEAR_BINFO_NEW_VTABLE_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLEAR_CLASSTYPE_MARKED4(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_4(NODE)=0))
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLASSTYPE_MARKED4(BINFO_TYPE(NODE)) \
+ : TREE_LANG_FLAG_4(NODE))
+#define SET_BINFO_NEW_VTABLE_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) SET_CLASSTYPE_MARKED4(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_4(NODE) = 1))
+#define CLEAR_BINFO_NEW_VTABLE_MARKED(NODE) \
+(TREE_VIA_VIRTUAL(NODE) \
+ ? (unsigned) CLEAR_CLASSTYPE_MARKED4(BINFO_TYPE(NODE)) \
+ : (TREE_LANG_FLAG_4(NODE) = 0))
/* Nonzero means this class has done dfs_pushdecls. */
#define BINFO_PUSHDECLS_MARKED(NODE) BINFO_VTABLE_PATH_MARKED (NODE)
More information about the Gcc-patches
mailing list