[ewg] 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 ewg
mailing list