[ofw] Re: [OPENSM] cast to remove warnings about signed vs. unsigned comparisons

Sasha Khapyorsky sashak at voltaire.com
Thu Oct 1 08:56:13 PDT 2009


On 13:30 Wed 30 Sep     , Stan C. Smith wrote:
> 
> Use (unsigned) cast to remove compiler warnings for signed component in comparison (for loops) .
> In a couple of cases use unsigned instead of int for the variable declaration.
> 
> Signed-off-by: Stan Smith <stan.smith at intel.com>

Applied. Thanks.

Basically I prefer to avoid castings when possible - much better is to
use proper types. So I'm adding the patch below, hope that it is fine
for you.

In general to simplify a detection of such cases we can consider to use
-Wsign-compare gcc flag in linux environment.

Sasha


commit 3b30f3b1311b44f3e2042ea2c4e180ffa8291532
Author: Sasha Khapyorsky <sashak at voltaire.com>
Date:   Thu Oct 1 17:50:04 2009 +0200

    opensm/osm_mesh.c: remove some castings
    
    Instead of casting for preventing different sign comparison warnings use
    unsigned types for affected variables.
    
    Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>

diff --git a/opensm/opensm/osm_mesh.c b/opensm/opensm/osm_mesh.c
index 8235e55..e5c53d9 100644
--- a/opensm/opensm/osm_mesh.c
+++ b/opensm/opensm/osm_mesh.c
@@ -58,7 +58,7 @@
 static const struct mesh_info {
 	int dimension;			/* dimension of the torus */
 	int size[MAX_DIMENSION];	/* size of the torus */
-	int degree;			/* degree of polynomial */
+	unsigned int degree;		/* degree of polynomial */
 	int poly[MAX_DEGREE+1];		/* polynomial */
 } mesh_info[] = {
 	{0, {0},       0, {0},					},
@@ -263,7 +263,7 @@ static char *poly_print(int n, int *coeff)
  *
  * return a nonzero value if polynomials differ else 0
  */
-static int poly_diff(int n, const int *p, switch_t *s)
+static int poly_diff(unsigned int n, const int *p, switch_t *s)
 {
 	if (s->node->num_links != n)
 		return 1;
@@ -591,13 +591,13 @@ static int get_switch_metric(lash_t *p_lash, int sw)
 {
 	osm_log_t *p_log = &p_lash->p_osm->log;
 	int ret = -1;
-	int i, j, change;
+	unsigned int i, j, change;
 	int sw1, sw2, sw3;
 	switch_t *s = p_lash->switches[sw];
 	switch_t *s1, *s2, *s3;
 	int **m;
 	mesh_node_t *node = s->node;
-	int num_links = node->num_links;
+	unsigned int num_links = node->num_links;
 
 	OSM_LOG_ENTER(p_log);
 
@@ -622,7 +622,7 @@ static int get_switch_metric(lash_t *p_lash, int sw)
 					s2 = p_lash->switches[sw2];
 					if (s2->node->temp == LARGE)
 						continue;
-					for (j = 0; (unsigned)j < s2->node->num_links; j++) {
+					for (j = 0; j < s2->node->num_links; j++) {
 						sw3 = s2->node->links[j]->switch_id;
 						s3 = p_lash->switches[sw3];
 
@@ -925,8 +925,8 @@ static void make_geometry(lash_t *p_lash, int sw)
 	int num_switches = p_lash->num_switches;
 	int sw1, sw2;
 	switch_t *s, *s1, *s2, *seed;
-	int i, j, k, l, n, m;
-	int change;
+	unsigned int i, j, k, l, n, m;
+	unsigned int change;
 
 	OSM_LOG_ENTER(p_log);
 
@@ -956,7 +956,7 @@ static void make_geometry(lash_t *p_lash, int sw)
 			/*
 			 * ignore chain fragments
 			 */
-			if ((unsigned)n < seed->node->num_links && n <= 2)
+			if (n < seed->node->num_links && n <= 2)
 				continue;
 
 			/*
@@ -1068,11 +1068,11 @@ static void make_geometry(lash_t *p_lash, int sw)
 					 * find switch (other than s1) that neighbors i and j
 					 * have in common
 					 */
-					for (k = 0; (unsigned)k < s1->node->num_links; k++) {
+					for (k = 0; k < s1->node->num_links; k++) {
 						if (s1->node->links[k]->switch_id == sw1)
 							continue;
 
-						for (l = 0; (unsigned)l < s2->node->num_links; l++) {
+						for (l = 0; l < s2->node->num_links; l++) {
 							if (s2->node->links[l]->switch_id == sw1)
 								continue;
 
@@ -1204,11 +1204,11 @@ static int reorder_node_links(lash_t *p_lash, mesh_t *mesh, int sw)
 static int make_coord(lash_t *p_lash, mesh_t *mesh, int seed)
 {
 	osm_log_t *p_log = &p_lash->p_osm->log;
-	int i, j, k;
+	unsigned int i, j, k;
 	int sw;
 	switch_t *s, *s1;
-	int change;
-	int dimension = mesh->dimension;
+	unsigned int change;
+	unsigned int dimension = mesh->dimension;
 	int num_switches = p_lash->num_switches;
 	int assigned_axes = 0, unassigned_axes = 0;
 
@@ -1228,7 +1228,7 @@ static int make_coord(lash_t *p_lash, mesh_t *mesh, int seed)
 		for (i = 0; i < dimension; i++)
 			s->node->coord[i] = (sw == seed) ? 0 : LARGE;
 
-		for (i = 0; (unsigned)i < s->node->num_links; i++)
+		for (i = 0; i < s->node->num_links; i++)
 			if (s->node->axes[i] == 0)
 				unassigned_axes++;
 			else
@@ -1246,7 +1246,7 @@ static int make_coord(lash_t *p_lash, mesh_t *mesh, int seed)
 			if (s->node->coord[0] == LARGE)
 				continue;
 
-			for (j = 0; (unsigned)j < s->node->num_links; j++) {
+			for (j = 0; j < s->node->num_links; j++) {
 				if (!s->node->axes[j])
 					continue;
 
@@ -1254,7 +1254,7 @@ static int make_coord(lash_t *p_lash, mesh_t *mesh, int seed)
 
 				for (k = 0; k < dimension; k++) {
 					int coord = s->node->coord[k];
-					int axis = s->node->axes[j] - 1;
+					unsigned axis = s->node->axes[j] - 1;
 
 					if (k == axis/2)
 						coord += (axis & 1)? -1 : +1;
@@ -1395,8 +1395,8 @@ static int compare_switches(const void *p1, const void *p2)
  */
 static void sort_switches(lash_t *p_lash, mesh_t *mesh)
 {
-	int i, j;
-	int num_switches = p_lash->num_switches;
+	unsigned int i, j;
+	unsigned int num_switches = p_lash->num_switches;
 	comp_t *comp;
 	int *reverse;
 	switch_t *s;
@@ -1426,7 +1426,7 @@ static void sort_switches(lash_t *p_lash, mesh_t *mesh)
 		s = p_lash->switches[comp[i].index];
 		switches[i] = s;
 		s->id = i;
-		for (j = 0; (unsigned)j < s->node->num_links; j++)
+		for (j = 0; j < s->node->num_links; j++)
 			s->node->links[j]->switch_id =
 				reverse[s->node->links[j]->switch_id];
 	}



More information about the ofw mailing list