[Debian-med-packaging] Bug#749136: jellyfish: FTBFS with clang instead of gcc

Andreas Tille andreas at an3as.eu
Sat Oct 4 17:41:57 UTC 2014


Hi Martin,

thanks a lot for your QA work.  In the case of Jellyfish I guess
the best thing is to migrate to latest upstream version.  I commited
the packaging to Git - however, it needs
   https://github.com/gmarcais/yaggo
which needs to be packaged first.  No idea whether we get it to pass
new right in time. :-(

Kind regards

      Andreas.

On Fri, Oct 03, 2014 at 06:42:51PM +0200, Martin Steghöfer wrote:
> Hi all,
> 
> I can confirm that the build fails with clang 3.4 and that the patch
> sent by Alexander fixes the problem.
> 
> The most recent version of clang (3.5), however, compiles the
> package fine without any patches. This is because Clang has extended
> its detection of constant values and is now able to detect that the
> used size is a constant value, even if it's passed through a
> function.
> 
> In case you decide to patch the code anyway (after all it's
> non-standard language features that make it compile - GCC's support
> for VLAs and Clang's extended detection of constant values), there's
> an alternative patch attached to this message. I originally created
> it because I didn't realize that Alexander had already attached a
> patch (I'm sorry, Alexander, I didn't mean to disappreciate your
> work!). Now I decided to send it in anyway because it's an
> alternative way to fix the problem, one that's probably closer to
> the upstream authors' intention to allocate the space on the stack
> using a fixed-length array.
> 
> Btw. I noted that there has been a jellyfish 2 out there for quite
> some time now (almost a year). As they moved to github for the 2.x
> releases and the watch file is only targeting the old html page,
> maybe you missed it...
> 
> Cheers,
> Martin
> 

> Description: Fix clang (< 3.5) compilation by avoiding VLAs
>  The length of the array defined locally in array::_get_val
>  cannot be detected to be constant by a standard C++ compiler.
>  GCC's g++ accepts the code anyway because of its ample
>  support for variable-length arrays (VLAs). Clang doesn't
>  support VLAs for non-POD (Plain Old Type) types. Starting
>  from version 3.5, however, it is able to detect the constant
>  nature of the value used (using non-standard language
>  features, too) and therefore doesn't need LVAs here. However,
>  clang compilers before 3.5 as well as compilers that support
>  only pure C++ need this patching.
> Author: Martin Stegh??fer <martin at steghoefer.eu>
> Bug-Debian: https://bugs.debian.org/749136
> 
> --- jellyfish-1.1.11.orig/jellyfish/invertible_hash_array.hpp
> +++ jellyfish-1.1.11/jellyfish/invertible_hash_array.hpp
> @@ -636,7 +636,7 @@ namespace jellyfish {
>        bool _get_val(const size_t id, size_t &key_id, const word key, word &val, 
>                             bool full = false, bool carry_bit = false) const {
>          // Buffer for pre-cached information
> -        prefetch_info info_ary[prefetch_buffer::capacity()];
> +        prefetch_info info_ary[prefetch_buffer::capacityConstant];
>          prefetch_buffer buffer(info_ary);
>          warm_up_cache(buffer, id, false);
>  
> --- jellyfish-1.1.11.orig/jellyfish/simple_circular_buffer.hpp
> +++ jellyfish-1.1.11/jellyfish/simple_circular_buffer.hpp
> @@ -106,6 +106,7 @@ namespace jellyfish {
>      class pre_alloc : public base<T, pre_alloc<T, capa> > {
>        typedef base<T, pre_alloc<T, capa> > super;
>      public:
> +      static const int capacityConstant = capa;
>        explicit pre_alloc(T* data) : super(data) { }
>        static int capacity() { return capa; }
>      };

> _______________________________________________
> Debian-med-packaging mailing list
> Debian-med-packaging at lists.alioth.debian.org
> http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-packaging


-- 
http://fam-tille.de



More information about the Debian-med-packaging mailing list