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