From 3200d783eb38ef0d34dcd0017e091012ba8b63cc Mon Sep 17 00:00:00 2001
From: scott snyder <snyder@bnl.gov>
Date: Wed, 24 May 2017 15:14:45 +0200
Subject: [PATCH] TrigFTKSim: Fix compilation warnings.

Compilation warnings: pointer aliasing, member ordering in initialization,
left shifts of signed values, unused variables, variable-length arrays.
---
 .../TrigFTK/TrigFTKSim/src/FTKConstantBank.cxx   | 10 ++++++----
 Trigger/TrigFTK/TrigFTKSim/src/FTKRoadStream.cxx |  2 +-
 Trigger/TrigFTK/TrigFTKSim/src/FTK_AMBank.cxx    |  2 +-
 Trigger/TrigFTK/TrigFTKSim/src/TrackFitter.cxx   |  2 +-
 .../TrigFTK/TrigFTKSim/src/TrackFitter711.cxx    |  2 +-
 .../TrigFTK/TrigFTKSim/src/tsp/FTKTSPBank.cxx    |  2 +-
 Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPLevel.cxx  | 16 ++++++++--------
 Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPMap.cxx    |  2 +-
 .../TrigFTKSim/src/tsp/TSPROOTBankGenerator.cxx  | 12 ++++++------
 9 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/Trigger/TrigFTK/TrigFTKSim/src/FTKConstantBank.cxx b/Trigger/TrigFTK/TrigFTKSim/src/FTKConstantBank.cxx
index f66434b797a..bc25396bada 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/FTKConstantBank.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/FTKConstantBank.cxx
@@ -19,6 +19,7 @@
 #include <cstdio>
 #include <cmath>
 #include <bitset>
+#include <ieee754.h>
 using namespace std;
 
 //#define SIMPLEMJ // ibl undefined simple majority to see if we can get majority for ibl
@@ -756,10 +757,11 @@ int FTKConstantBank::missing_point_guess(FTKTrack &track, int secid, float *newc
 
 unsigned int FTKConstantBank::floatToReg27(float f) {
 
-  int f_f = (*(int*)&f);
-  int f_sign = (f_f >> 31) & 0x1;
-  int f_exp = (f_f >> 23) & 0xFF;
-  int f_frac = f_f & 0x007FFFFF;
+  ieee754_float f_f;
+  f_f.f = f;
+  int f_sign = f_f.ieee.negative;
+  int f_exp = f_f.ieee.exponent;
+  int f_frac = f_f.ieee.mantissa;
   int r_sign;
   int r_exp;
   int r_frac;
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/FTKRoadStream.cxx b/Trigger/TrigFTK/TrigFTKSim/src/FTKRoadStream.cxx
index 7ed0fbacf51..ee99d64a19f 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/FTKRoadStream.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/FTKRoadStream.cxx
@@ -255,7 +255,7 @@ void FTKRoadStream::attachHits( int roadid)
       int basessid = curroad->getSSID(ipl); // base full resolution SS for this layer
 
       // extract DC mask for this layer, reading only the related bits
-      unsigned int localdcmask = dcmask>>maskoffset & (~(~0<<ndcbits));
+      unsigned int localdcmask = dcmask>>maskoffset & (~(~0u<<ndcbits));
       // in the basessid mask the bits involved by the DC placing them to 0
       basessid &= ~localdcmask;
 
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/FTK_AMBank.cxx b/Trigger/TrigFTK/TrigFTKSim/src/FTK_AMBank.cxx
index 6b0a0319de2..c1219d1cef0 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/FTK_AMBank.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/FTK_AMBank.cxx
@@ -229,7 +229,7 @@ void FTK_AMBank::applyWildcard()
   m_useWC = true; // set the use of the WC
 
   // adject the WC and Veto IDs if the STL map is used
-  m_VetoID = ~(~0<<(sizeof(int)*8-1));
+  m_VetoID = ~(~0u<<(sizeof(int)*8-1));
   m_WCID = m_VetoID-1;
 
   unsigned int *m_WC_stat = new unsigned int[m_nplanes]; // store the static collected on the wildcard
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter.cxx b/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter.cxx
index 9570f667e8f..7bc0cc4f19e 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter.cxx
@@ -228,7 +228,7 @@ void TrackFitter::init()
   // counter that enumerates current hit in FTKHit array
   m_hitcnt = new int[m_nplanes];
 
-  m_complete_mask = ~(~0<<m_ncoords);
+  m_complete_mask = ~(~0u<<m_ncoords);
   // allocate once the array of recovered tracks
   combtrack = new FTKTrack[m_ncoords];
   for (int ic=0;ic!=m_ncoords;++ic) {
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter711.cxx b/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter711.cxx
index 2f14c6d463e..a8225fa7c8a 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter711.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/TrackFitter711.cxx
@@ -242,7 +242,7 @@ void TrackFitter711::init()
     combtrackI[ic].setNCoords(m_ncoords_incomplete);
     combtrackI[ic].setNPlanes(m_nplanes_incomplete);
   }
-  m_complete_maskI = ~(~0<<m_ncoords_incomplete);
+  m_complete_maskI = ~(~0u<<m_ncoords_incomplete);
 
   m_nplanes_ignored = m_nplanes-m_nplanes_incomplete;
   m_ncoords_ignored = m_ncoords-m_ncoords_incomplete;
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/tsp/FTKTSPBank.cxx b/Trigger/TrigFTK/TrigFTKSim/src/tsp/FTKTSPBank.cxx
index 3a4c8808801..5d883db2d4f 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/tsp/FTKTSPBank.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/tsp/FTKTSPBank.cxx
@@ -1093,7 +1093,7 @@ const std::list<FTKRoad>& FTKTSPBank::getRoads()
       int basessid = curroad.getSSID(ipl);
 
       // extract DC mask for this layer, reading only the related bits
-      unsigned int localdcmask = (dcmask>>maskoffset)&(~(~0<<ndcbits));
+      unsigned int localdcmask = (dcmask>>maskoffset)&(~(~0u<<ndcbits));
       // in the basessid mask the bits involved by the DC placing them to 0
       basessid &= ~localdcmask;
 
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPLevel.cxx b/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPLevel.cxx
index 6050e58477c..b817dff9f3d 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPLevel.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPLevel.cxx
@@ -201,7 +201,7 @@ void TSPLevel::storeAMInfo()
 
       /* check is a valid mask: a valid mask has at least 1 bit set,
 	 there isn't any bit further the maximum set */
-      unsigned int maskForInvalidBits=~0<<npos;
+      unsigned int maskForInvalidBits=~0u<<npos;
       if (npos==32) maskForInvalidBits = 0;
       if (npos>32) FTKSetup::PrintMessageFmt(ftk::sevr,"Error: npos>32 (i.e. more than 5 DC bits) is an invalid configuration. npos=%d\n",npos);
       if (!mask || mask&(maskForInvalidBits)) {
@@ -229,7 +229,7 @@ int TSPLevel::evaluateSubSSMask(int nbits, int position, int dcmask, int hbmask)
   if (!nbits) return 0;
 
   // build mask to select only the first nbits
-  const int ref_ok = ~(~0<<nbits);
+  const int ref_ok = ~(~0u<<nbits);
   // shift the masks to remove the previous bits
   dcmask >>= position;
   hbmask >>= position;
@@ -280,7 +280,7 @@ void TSPLevel::simulate(FTKRoad& road){
       FTKSS& ss = m_splitted_ssmap[iplane][road.getSSID(iplane)];
 
       // in the bitmask filter the position for this layer
-      int pos = (hbmask>>m_tspmap.getBitOffset(iplane)) & (~(~0<<m_tspmap.getNBits(iplane)));
+      int pos = (hbmask>>m_tspmap.getBitOffset(iplane)) & (~(~0u<<m_tspmap.getNBits(iplane)));
 
       // the position value has to be converted in binary form from the Gray encoding
       pos = m_tspmap.getPosition(iplane,pos);
@@ -300,7 +300,7 @@ void TSPLevel::simulate(FTKRoad& road){
       subroad.setPatternDBID(subroad.getPatternID()); // there is no difference at this level between 2 Ids
       subroad.setSectorID(road.getSectorID());
       for (int ip=0;ip!=m_nplanes;++ip) {
-	int pos = (hbmask>>m_tspmap.getBitOffset(ip)) & (~(~0<<m_tspmap.getNBits(ip)));
+	int pos = (hbmask>>m_tspmap.getBitOffset(ip)) & (~(~0u<<m_tspmap.getNBits(ip)));
 	// the "pos" value is encoded using the Gray encoding, has to trasformed in standard binary code
 	pos = m_tspmap.getPosition(ip,pos);
 
@@ -446,7 +446,7 @@ int TSPLevel::getPatternInfo(int ipatt, const FTKPattern *ampatt, bool readTSP)
 
     /* check is a valid mask: a valid mask has at least 1 bit set,
 	 there isn't any bit further the maximum set */
-    unsigned int maskForInvalidBits=~0<<npos;
+    unsigned int maskForInvalidBits=~0u<<npos;
     if (npos==32) maskForInvalidBits = 0;
     if (npos>32) FTKSetup::PrintMessageFmt(ftk::sevr,"Error: npos>32 (i.e. more than 5 DC bits) is an invalid configuration. npos=%d\n",npos);
     if (!mask || mask&(maskForInvalidBits)) {
@@ -534,7 +534,7 @@ int TSPLevel::getPatternInfo(int ipatt, int _dcmask, int _hbmask/*, bool readTSP
 
     /* check is a valid mask: a valid mask has at least 1 bit set,
 	 there isn't any bit further the maximum set */
-    unsigned int maskForInvalidBits=~0<<npos;
+    unsigned int maskForInvalidBits=~0u<<npos;
     if (npos==32) maskForInvalidBits = 0;
     if (npos>32) FTKSetup::PrintMessageFmt(ftk::sevr,"Error: npos>32 (i.e. more than 5 DC bits) is an invalid configuration. npos=%d\n",npos);
     if (!mask || mask&(maskForInvalidBits)) {
@@ -561,7 +561,7 @@ unsigned int TSPLevel::getHBMask(int patt, int layer) const {
   const int &curhbmask =  m_hbmask[patt][0];
 
   // shift the word to have the bits for the layer in LSB position and set to bits after npos
-  return (curhbmask>>bitoffset)&(~(~0<<npos));
+  return (curhbmask>>bitoffset)&(~(~0u<<npos));
 }
 
 /** Return the DC mask for the high precision part for the layer "patt"
@@ -577,7 +577,7 @@ unsigned int TSPLevel::getDCMask(int patt, int layer) const {
   const int &curdcmask =  m_dcmask[patt];
 
   // shift the word to have the bits for the layer in LSB position and set to bits after npos
-  return (curdcmask>>bitoffset)&(~(~0<<npos));
+  return (curdcmask>>bitoffset)&(~(~0u<<npos));
 }
 
 
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPMap.cxx b/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPMap.cxx
index 6d1038dcff6..e761d4aafe3 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPMap.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPMap.cxx
@@ -218,7 +218,7 @@ int TSPMap::getPosition(int plane, int val)
   case 2:
     // decompose the 2 coordinates
     posY = val>>m_internal_nbits[plane][0];
-    posX = val&(~(~0<<m_internal_nbits[plane][0]));
+    posX = val&(~(~0u<<m_internal_nbits[plane][0]));
     // convert the value in Gray code
     posX = GC2IEEE(m_internal_nbits[plane][0],posX);
     posY = GC2IEEE(m_internal_nbits[plane][1],posY);
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPROOTBankGenerator.cxx b/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPROOTBankGenerator.cxx
index 59d47ca9a3b..081040d9c2b 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPROOTBankGenerator.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/tsp/TSPROOTBankGenerator.cxx
@@ -266,10 +266,10 @@ void TSPROOTBankGenerator::generateChildren(int bankID, int planes) throw (TSPPa
                     unsigned int bitlayerY = (localY % etass)/(m_ssMaps[bankID-1]->getMap(i, 0, 0).m_etass); // between 0 and 2^(nbitsY)-1
                     
                     // verify that there are not bits set after nbitsX, then nbitsY
-                    if (bitlayerX&(~0<<nbitsX)) {
+                    if (bitlayerX&(~0u<<nbitsX)) {
                        FTKSetup::PrintMessageFmt(ftk::sevr,"Error creating the local-SS representation for pattern %d, bitlayerX[%d]=%d\n",iTSP,i,bitlayerX);
                     }
-                    if (bitlayerY&(~0<<nbitsY)) {
+                    if (bitlayerY&(~0u<<nbitsY)) {
                        FTKSetup::PrintMessageFmt(ftk::sevr,"Error creating the local-SS representation for pattern %d, bitlayerY[%d]=%d\n",iTSP,i,bitlayerY);
                     }
                     
@@ -292,7 +292,7 @@ void TSPROOTBankGenerator::generateChildren(int bankID, int planes) throw (TSPPa
                     // Half plane bit
                     unsigned int bitlayerX = (localX % phiss)/(m_ssMaps[bankID-1]->getMap(i, 0, 0).m_phiss); // is 0 to (2^nbits-1)
                     // verify that there are not bits set after nbitsX
-                    if (bitlayerX&(~0<<nbitsX)) {
+                    if (bitlayerX&(~0u<<nbitsX)) {
                        FTKSetup::PrintMessageFmt(ftk::sevr,"Error creating the local-SS representation for pattern %d, bitlayerX[%d]=%d\n",iTSP,i,bitlayerX);
                     }
                     // use the Grey code for the position
@@ -391,10 +391,10 @@ void TSPROOTBankGenerator::generateChildren(int bankID, int planes) throw (TSPPa
                     // if (debug) printf ("bitlayerX: %d, bitlayerY: %d\n", bitlayerX,bitlayerY);
                     
                     // verify that there are not bits set after nbitsX, then nbitsY
-                    if (bitlayerX&(~0<<nbitsX)) {
+                    if (bitlayerX&(~0u<<nbitsX)) {
                        FTKSetup::PrintMessageFmt(ftk::sevr,"Error creating the local-SS representation for pattern %d, bitlayerX[%d]=%d\n",iTSP,i,bitlayerX);
                     }
-                    if (bitlayerY&(~0<<nbitsY)) {
+                    if (bitlayerY&(~0u<<nbitsY)) {
                        FTKSetup::PrintMessageFmt(ftk::sevr,"Error creating the local-SS representation for pattern %d, bitlayerY[%d]=%d\n",iTSP,i,bitlayerY);
                     }
                     
@@ -445,7 +445,7 @@ void TSPROOTBankGenerator::generateChildren(int bankID, int planes) throw (TSPPa
                     unsigned int bitlayerX = phi_dc; // between 0 and 2^(nbitsX)-1
                     
                     // verify that there are not bits set after nbitsX, then nbitsY
-                    if (bitlayerX&(~0<<nbitsX)) {
+                    if (bitlayerX&(~0u<<nbitsX)) {
                        FTKSetup::PrintMessageFmt(ftk::sevr,"Error creating the local-SS representation for pattern %d, bitlayerX[%d]=%d\n",iTSP,i,bitlayerX);
                     }
                     
-- 
GitLab