On Sat, Jan 9, 2016 at 7:26 AM, Gerald Pfeifer <ger...@pfeifer.com> wrote:
> Hi Sebastian,
>
> On Fri, 25 Dec 2015, Sebastian Pop wrote:
>>> on December 17th 2015, my nightly bootstrap (on i386-unknown-freebsd10.1,
>>> but I don't think this is material) started to fail as follows:
>>>
>>>   /scratch/tmp/gerald/gcc-HEAD/gcc/graphite-scop-detection.c:1892:17:
>>>   note: in instantiation of member function 'vec<dr_info, va_heap, 
>>> vl_ptr>::safe_push'
>>>   requested here
>>>       scop->drs.safe_push (dr_info (dr, pbb));
>> I do not see what the error is.  Do you happen to have
>> the few lines with the error before this note?
>
> thanks for the quick response.  My Internet (non-)connectivity the
> last two weeks did not allow me to debug this further.  Now I'm back
> to normal, and here is what I found:
>
> When I remove the isl package, GCC bootstraps just fine.  As soon as
> I add the package again, things fail again.
>
> From the configure log:
>
>   checking for isl 0.15 (or deprecated 0.14)... yes
>   checking Checking for isl_options_set_schedule_serialize_sccs... no
>
> And here is the actual failure, which is different from my original
> report (probably due to forcing serial building).  Invocation:
>
>   c++ -std=gnu++98 -fno-PIE -c -g -DIN_GCC -fno-strict-aliasing
>   -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall
>   -Wno-narrowing -Wwrite-string s -Wcast-qual -Wno-format
>   -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long
>   -Wno-variadic-macros -Wno-overlength-strings -fno-common -DHAVE_CONFIG_H
>   :
>   -o graphite-dependences.o -MT graphite-dependences.o -MMD -MP -MF
>   ./.deps/graphite-dependences.TPo 
> /scratch/tmp/gerald/gcc-HEAD/gcc/graphite-dependences.c
>
> Error:
>
>   /scratch/tmp/gerald/gcc-HEAD/gcc/graphite-dependences.c:240:3: error: no 
> matching function for call to 'isl_union_map_foreach_map'
>   isl_union_map_foreach_map (x, max_number_of_out_dimensions, (void *) &max);
>   ^~~~~~~~~~~~~~~~~~~~~~~~~
>   /home/gerald/10-i386/include/isl/union_map.h:204:10: note: candidate
>   function not viable: no known conversion from 'int (isl_map *, void *)'
>   to 'isl_stat (*)(isl_map *, void *)' for 2nd argument
>   isl_stat isl_union_map_foreach_map(__isl_keep isl_union_map *umap,
>
>
> At first I thought this is related to FreeBSD now using clang as the
> system compiler, but the same happens using a current GCC 6 build.
>
> Then I started digging into this, wondering why apparently it had
> as the return type for the second argument as opposed to "isl_stat".
>
> My .../include/isl/union_map.h has
>
>   isl_stat isl_union_map_foreach_map(__isl_keep isl_union_map *umap,
>         isl_stat (*fn)(__isl_take isl_map *map, void *user), void *user);
>
> whereas graphite_dependences.c has
>
>   static isl_stat
>   max_number_of_out_dimensions (__isl_take isl_map *map, void *user)
>
> so everything should be fine, shouldn't it?
>
> Turns out gcc/graphite.h is causing all this:
>
>   #ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
>   /* isl 0.15 or later.  */
>   #include <isl/schedule_node.h>
>
>   #else
>   /* isl 0.14 or 0.13.  */
>   # define isl_stat int
>   # define isl_stat_ok 0
>   #endif
>
> So, despite actually _having_ type isl_stat we #define isl_stat to int
> and do so after having all the isl/ include files use the proper type.
>
> Digging deeper, there appear to be two issues:
>
>  1. Instead of a feature test (for isl_stat) we use a version check
>     based on another feature test (isl_options_set_schedule_serialize_sccs).
>
>  2. That feature test for isl_options_set_schedule_serialize_sccs does
>     not work properly.
>
> It would be great could you look into issue 1 in any case, but for the

I will have a look.
In general I do not like the current status of having that many
#ifdefs in graphite: it makes the code hard to read and to maintain.

> time being let's focus on issue 2.  Here is what gcc/config.log shows:
>
>   configure:28943: checking Checking for 
> isl_options_set_schedule_serialize_sccs
>   configure:28956: /home/gerald/gcc-ref10-i386/bin/g++ -std=gnu++98 -o 
> conftest -g
>     -static-libstdc++ -static-libgcc  conftest.cpp  -lisl
>     -L/home/gerald/10-i386 /lib -lmpc -lmpfr -lgmp >&5
>   conftest.cpp:258:26: fatal error: isl/schedule.h: No such file or directory
>      #include <isl/schedule.h>
>   compilation terminated.
>   configure:28956: $? = 1
>
> Note the -L option pointing to /home/gerald/10-i386 (where I have my
> local packages for this kind of testing), whereas the associated -I
> option is missing.  And indeed, that's it:  We use GMPLIB in that
> configure test, but not GMPINC.
>
> (For MPFR and MPC, the include and library paths for GMP are always
> included as well, by the way.  It is only necessary to use --with-gmp=
> if one has a non-standard tree structure.)
>
> With the patch allow, my bootstraps in that environment succeed again,
> so I went ahead and applied it.
>
> Gerald
>
>
> 2016-01-09  Gerald Pfeifer  <ger...@pfeifer.com>
>
>         * configure.ac (isl_options_set_schedule_serialize_sccs): Also
>         use GMPINC.
>         * configure: Regenerate.
>
> Index: gcc/configure.ac
> ===================================================================
> --- gcc/configure.ac    (revision 232188)
> +++ gcc/configure.ac    (working copy)
> @@ -5918,7 +5918,7 @@
>  # it's new in isl 0.15.
>  if test "x${ISLLIBS}" != "x" ; then
>    saved_CXXFLAGS="$CXXFLAGS"
> -  CXXFLAGS="$CXXFLAGS $ISLINC"
> +  CXXFLAGS="$CXXFLAGS $ISLINC $GMPINC"

The change looks good to me.  Thanks for fixing this problem.

Sebastian

Reply via email to