[PPL-devel] [GIT] ppl/ppl(master): Avoid implicit conversions changing integer type signedness.

Enea Zaffanella zaffanella at cs.unipr.it
Wed Feb 22 21:49:26 CET 2012


Module: ppl/ppl
Branch: master
Commit: 9afcaffceb21f412fe286e06bb438a8cc78b7dd6
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=9afcaffceb21f412fe286e06bb438a8cc78b7dd6

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Wed Feb 22 21:48:20 2012 +0100

Avoid implicit conversions changing integer type signedness.
Detected by ECLAIR service utypflag.

---

 src/CO_Tree.cc           |   13 ++++++++-----
 src/CO_Tree.inlines.hh   |    5 +++--
 src/CO_Tree.templates.hh |    5 +++--
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/CO_Tree.cc b/src/CO_Tree.cc
index 94cd7f5..45913e0 100644
--- a/src/CO_Tree.cc
+++ b/src/CO_Tree.cc
@@ -893,7 +893,8 @@ PPL::CO_Tree
     --subtree_size;
   }
 
-  return first_unused_index - indexes;
+  PPL_ASSERT(first_unused_index >= indexes);
+  return static_cast<dimension_type>(first_unused_index - indexes);
 }
 
 void
@@ -911,8 +912,9 @@ PPL::CO_Tree::redistribute_elements_in_subtree(
   // For each node level, the stack may contain up to two element (one for the
   // subtree rooted at the right son of a node of that level, and one for the
   // node itself). An additional element can be at the top of the tree.
-  static std::pair<dimension_type,dimension_type>
-    stack[2*CHAR_BIT*sizeof(dimension_type)+1];
+  static const unsigned stack_size
+    = 2U * static_cast<unsigned>(CHAR_BIT) * sizeof(dimension_type) + 1U;
+  static std::pair<dimension_type,dimension_type> stack[stack_size];
 
   std::pair<dimension_type,dimension_type>* stack_first_empty = stack;
 
@@ -1003,8 +1005,9 @@ PPL::CO_Tree::move_data_from(CO_Tree& tree) {
   // with operation 0, one element with operation 2 and one element
   // with operation 3. An additional element with operation 1 can be at the
   // top of the tree.
-  static std::pair<dimension_type, signed char>
-    stack[5*CHAR_BIT*sizeof(dimension_type)];
+  static const unsigned stack_size
+    = 5U * static_cast<unsigned>(CHAR_BIT) * sizeof(dimension_type);
+  static std::pair<dimension_type, signed char> stack[stack_size];
 
   dimension_type stack_first_empty = 0;
 
diff --git a/src/CO_Tree.inlines.hh b/src/CO_Tree.inlines.hh
index 50a03e7..48b76fc 100644
--- a/src/CO_Tree.inlines.hh
+++ b/src/CO_Tree.inlines.hh
@@ -761,7 +761,8 @@ CO_Tree::tree_iterator::follow_left_children_with_value() {
   p -= (offset - 1);
   while (*p == unused_index)
     ++p;
-  i = p - tree.indexes;
+  PPL_ASSERT(p >= tree.indexes);
+  i = static_cast<dimension_type>(p - tree.indexes);
   offset = i & -i;
   PPL_ASSERT(OK());
 }
@@ -774,7 +775,7 @@ CO_Tree::tree_iterator::follow_right_children_with_value() {
   p += (offset - 1);
   while (*p == unused_index)
     --p;
-  i = p - tree.indexes;
+  i = static_cast<dimension_type>(p - tree.indexes);
   offset = i & -i;
   PPL_ASSERT(OK());
 }
diff --git a/src/CO_Tree.templates.hh b/src/CO_Tree.templates.hh
index 488f541..7c8e5ac 100644
--- a/src/CO_Tree.templates.hh
+++ b/src/CO_Tree.templates.hh
@@ -53,8 +53,9 @@ CO_Tree::CO_Tree(Iterator i, dimension_type n) {
   // with operation 0, one element with operation 2 and one element
   // with operation 3. An additional element with operation 1 can be at the
   // top of the tree.
-  static std::pair<dimension_type, signed char>
-    stack[4*CHAR_BIT*sizeof(dimension_type)+1];
+  static const unsigned stack_size
+    = 4U * static_cast<unsigned>(CHAR_BIT) * sizeof(dimension_type) + 1U;
+  static std::pair<dimension_type, signed char> stack[stack_size];
 
   dimension_type stack_first_empty = 0;
 




More information about the PPL-devel mailing list