Hi Matthias,

thanks for addressing this issue!

I'm pretty sure that his is a compiler bug and I have a short
reproducer which I'll send to IBM.

The problem is that xlC can't distinguish a static member function
(which uses an ordinary function call) from a non-static member
function (which uses a member function call)  with the same name.

I've just found a slightly more elegant (and less intrusive) fix. We
can help the compiler to find the correct method by simply casting it
to the correct version:

diff -r be065f758154
src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh
--- 
a/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh
     Thu Dec 14 12:49:47 2017 +0530
+++ 
b/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh
     Thu Dec 14 17:11:49 2017 +0100
@@ -77,7 +77,7 @@

   /* Bubble-sort or something equally good!
    * May not be good-enough for presidential candidate interviews,
but good-enough for us... */
-  hb_stable_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp, &substitutes[0]);
+  hb_stable_sort (&glyphs[0], num_glyphs, (int(*)(const OT::GlyphID
*, const OT::GlyphID *)) OT::GlyphID::cmp, &substitutes[0]);

   OT::Supplier<OT::GlyphID> glyphs_supplier      (glyphs, num_glyphs);
   OT::Supplier<OT::GlyphID> substitutes_supplier (substitutes, num_glyphs);
@@ -126,7 +126,7 @@
     first_glyphs_indirection[num_first_glyphs] = first_glyph_idx;
     num_first_glyphs++;
   }
-  hb_stable_sort (&first_glyphs[0], num_first_glyphs,
OT::GlyphID::cmp, &first_glyphs_indirection[0]);
+  hb_stable_sort (&first_glyphs[0], num_first_glyphs, (int(*)(const
OT::GlyphID *, const OT::GlyphID *)) OT::GlyphID::cmp,
&first_glyphs_indirection[0]);

   /* Now that the first-glyphs are sorted, walk again, populate ligatures. */
   for (unsigned int i = 0; i < num_first_glyphs; i++)

I'll also try to bring this change upstream into Harfbuzz, but we need
to push this into the new jdk/jdk10 repo because there will be no more
HarfBuzz integration for Java 10.

Regards,
Volker


On Thu, Dec 14, 2017 at 4:10 PM, Baesken, Matthias
<matthias.baes...@sap.com> wrote:
> Hello, after upgrading to new   Harfbuzz 1.7.1  the openjdk build fails on
> AIX.
>
>
>
> I created the following bug :
>
> https://bugs.openjdk.java.net/browse/JDK-8193515
>
>
>
> The compile  error we get on AIX  (using XLC 12.1) is :
>
>
>
> === Output from failing command(s) repeated here ===
>
> * For target
> support_native_java.desktop_libfontmanager_hb-ot-shape-complex-arabic.o:
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh",
> line 80.3: 1540-0218 (S) The call does not match any parameter list for
> "hb_stable_sort".
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-private.hh",
> line 723.1: 1540-1283 (I) "template <class T, class T2> hb_stable_sort(T *,
> unsigned int, int (*)(const T *, const T *), T2 *)" is not a viable
> candidate.
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh",
> line 80.43: 1540-0298 (I) Template argument deduction cannot be performed
> using the function "template int cmp(Type2) const".
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-private.hh",
> line 748.1: 1540-1283 (I) "template <class T> hb_stable_sort(T *, unsigned
> int, int (*)(const T *, const T *))" is not a viable candidate.
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh",
> line 80.3: 1540-0215 (I) The wrong number of arguments has been specified
> for "template <class T> hb_stable_sort(T *, unsigned int, int (*)(const T *,
> const T *))".
>
>
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh",
> line 129.3: 1540-0218 (S) The call does not match any parameter list for
> "hb_stable_sort".
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-private.hh",
> line 723.1: 1540-1283 (I) "template <class T, class T2> hb_stable_sort(T *,
> unsigned int, int (*)(const T *, const T *), T2 *)" is not a viable
> candidate.
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh",
> line 129.55: 1540-0298 (I) Template argument deduction cannot be performed
> using the function "template int cmp(Type2) const".
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-private.hh",
> line 748.1: 1540-1283 (I) "template <class T> hb_stable_sort(T *, unsigned
> int, int (*)(const T *, const T *))" is not a viable candidate.
>
> "
> /jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh",
> line 129.3: 1540-0215 (I) The wrong number of arguments has been specified
> for "template <class T> hb_stable_sort(T *, unsigned int, int (*)(const T *,
> const T *))".
>
>
>
> The compilation “complains”  about the hb_stable_sort template used in
> hb-ot-shape-complex-arabic-fallback.hh .  After looking a bit into this ,
> the third parameter
>
>       OT::GlyphID::cmp
>
> of
>
>      hb_stable_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp,
> &substitutes[0]);
>
>
>
> seems to trigger this XLC 12 issue .
>
> XLC 12 does not like the fact that  we have two cmp functions (one a
> template)  in
>
>
>
> hb-open-type-private.hh  :
>
>
>
> 610 template <typename Type, unsigned int Size>
>
> 611 struct IntType
>
> 612 {
>
> ....
>
> 617   static inline int cmp (const IntType<Type,Size> *a, const
> IntType<Type,Size> *b) { return b->cmp (*a); }
>
> 622
>
>  623   template <typename Type2>
>
> 624   inline int cmp (Type2 a) const
>
> 625   {
>
>
>
> ( GlyphID is an IntType )
>
> This looks like an  XLC bug, however it is pretty easy to workaround it by
> using  a helper compare-function with a unique name (issue with cmp is that
> it is not unique, that confuses XLC ).
>
> See this webrev :
>
>
>
> http://cr.openjdk.java.net/~mbaesken/webrevs/8193515/
>
>
>
> Please review it.
>
>
>
>
>
> Thanks, Matthias

Reply via email to