[Debian-med-packaging] Bug#667214: Help needed to fix gcc 4.7 bug in jellyfish package

Andreas Tille andreas at an3as.eu
Thu May 3 12:46:58 UTC 2012


Hi Guillaume,

in the Debian bug tracking system

   http://bugs.debian.org/667214

a build problem when using gcc-4.7 was reported.  Below you can read
some discussion about a possible fix.

Michael, I can confirm that I also tried to s/uint_t/int/ in
parse_dna.hpp with the same result (same error message) after I did my
initial posting (that's why I did not felt a real need to send another
mail).

And yes, I agree that assigning negative values to unsigned variables
smells like done with some purpose which might stay hidden from the
first look and I would have definitely asked upstream about any problem
my suggested patch might have caused.  I just felt like doing some
investigation into the problem might make sense.  However, it seems
that this does not lead to any progres.

Guillaume, could you enlighten us a bit about this trick?

Kind regards

        Andreas.

On Thu, May 03, 2012 at 09:52:09AM +0200, Michael Wild wrote:
> On 05/02/2012 08:33 AM, Andreas Tille wrote:
> > Hi,
> > 
> > I tried to fix the problem in the jellyfish package but the general
> > hints given did not helped me really.  Any more precise help to fix
> > this problem:
> > 
> > parse_dna.cc:97:3: error: narrowing conversion of '-3' from 'int' to 'const uint_t {aka const long unsigned int}' inside { } is ill-formed in C++11 [-Werror=narrowing]
> > 
> > My first idea was to do
> > 
> > --- jellyfish.orig/jellyfish/parse_dna.cc
> > +++ jellyfish/jellyfish/parse_dna.cc
> > @@ -57,7 +57,7 @@
> >      }
> >    }
> > 
> > -  const uint_t parse_dna::codes[256] = {
> > +  const int parse_dna::codes[256] = {
> >      -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -3, -3, -3, -3, -3,
> >      -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
> >      -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -1, -3, -3,
> > --- jellyfish.orig/jellyfish/parse_dna.hpp
> > +++ jellyfish/jellyfish/parse_dna.hpp
> > @@ -55,7 +55,7 @@
> >      static uint64_t mer_string_to_binary(const char *in, uint_t klen) {
> >        uint64_t res = 0;
> >        for(uint_t i = 0; i < klen; i++) {
> > -        const uint_t c = parse_dna::codes[(uint_t)*in++];
> > +        const int c = parse_dna::codes[(int)*in++];
> >          if(c & CODE_NOT_DNA)
> >            return 0;
> >          res = (res << 2) | c;
> > 
> > 
> > because it makes no sense to initialise uint with negative numbers but
> > this did not changed the error message which sounds totally strange to
> > me.
> > 
> > Kind regards
> > 
> >         Andreas.
> > 
> 
> You missed the declaration of parse_dna::codes in parse_dna.hpp.
> 
> 
> diff --git a/jellyfish/parse_dna.cc b/jellyfish/parse_dna.cc
> index ab3ec64..9ea5ae1 100644
> --- a/jellyfish/parse_dna.cc
> +++ b/jellyfish/parse_dna.cc
> @@ -57,7 +57,7 @@ namespace jellyfish {
>      }
>    }
> 
> -  const uint_t parse_dna::codes[256] = {
> +  const int parse_dna::codes[256] = {
>      -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -3, -3, -3, -3, -3,
>      -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
>      -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -1, -3, -3,
> diff --git a/jellyfish/parse_dna.hpp b/jellyfish/parse_dna.hpp
> index 0435ae2..7ef8afd 100644
> --- a/jellyfish/parse_dna.hpp
> +++ b/jellyfish/parse_dna.hpp
> @@ -46,7 +46,7 @@ namespace jellyfish {
>       * '\n': map to -2. ignore
>       * Other ASCII: map to -3. Skip to next line
>       */
> -    static const uint_t codes[256];
> +    static const int codes[256];
>      static const uint_t CODE_RESET = -1;
>      static const uint_t CODE_IGNORE = -2;
>      static const uint_t CODE_COMMENT = -3;
> @@ -55,7 +55,7 @@ namespace jellyfish {
>      static uint64_t mer_string_to_binary(const char *in, uint_t klen) {
>        uint64_t res = 0;
>        for(uint_t i = 0; i < klen; i++) {
> -        const uint_t c = parse_dna::codes[(uint_t)*in++];
> +        const int c = parse_dna::codes[(uint_t)*in++];
>          if(c & CODE_NOT_DNA)
>            return 0;
>          res = (res << 2) | c;
> 
> That said, assigning -3 to an unsigned int seems to be a pretty
> conscious choice to me, so it might have been done on purpose to create
> a wrap-around. Also, the same pattern shows up many other places (e.g.
> parse_dna::CODE_RESET, parse_dna::CODE_IGNORE, ...). IMHO bad practice,
> but plausible. Probably it's best to contact upstream about this and ask
> what their original intention was.
> 
> Michael
> 
> 
> -- 
> To UNSUBSCRIBE, email to debian-mentors-REQUEST at lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster at lists.debian.org
> Archive: http://lists.debian.org/4FA23929.3000509@gmail.com
> 
> 

-- 
http://fam-tille.de





More information about the Debian-med-packaging mailing list