harfbuzz / harfbuzz

HarfBuzz text shaping engine
http://harfbuzz.github.io/
Other
3.64k stars 589 forks source link

Build failures with clang 5 #3872

Closed rvandermeulen closed 1 year ago

rvandermeulen commented 1 year ago

Current tip is hitting build failures in Mozilla's CI with clang 5 builds (our minimum supported compiler): https://treeherder.mozilla.org/logviewer?job_id=396298960&repo=try&lineNumber=11512

 INFO -  In file included from Unified_cpp_gfx_harfbuzz_src0.cpp:2:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-layout.cc:28:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb.hh:481:
ERROR -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-iter.hh:362:16: error: no matching function for call to object of type 'struct (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:423:1)'
 INFO -              decltype (hb_get (hb_declval (Proj), *hb_declval (Iter)))>
 INFO -                        ^~~~~~
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-map.hh:301:5: note: in instantiation of template class 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, hb_function_sortedness_t::NOT_SORTED, nullptr>' requested here
 INFO -      + hb_array (items, mask ? mask + 1 : 0)
 INFO -      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-subset-input.hh:84:62: note: in instantiation of template class 'hb_hashmap_t<unsigned int, hb_array_t<const char>, false>' requested here
 INFO -      return axes_location->in_error () || name_table_overrides->in_error ();
 INFO -                                                               ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:449:3: note: candidate template ignored: substitution failure [with Proj = const char *, Val = hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t &]: no matching member function for call to 'impl'
 INFO -    operator () (Proj&& f, Val &&v) const HB_AUTO_RETURN
 INFO -    ^
 INFO -  In file included from Unified_cpp_gfx_harfbuzz_src0.cpp:2:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-layout.cc:28:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb.hh:481:
ERROR -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-iter.hh:366:21: error: no matching function for call to object of type 'struct (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:423:1)'
 INFO -    typedef decltype (hb_get (hb_declval (Proj), *hb_declval (Iter))) __item_t__;
 INFO -                      ^~~~~~
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:449:3: note: candidate template ignored: substitution failure [with Proj = const char *, Val = hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t &]: no matching member function for call to 'impl'
 INFO -    operator () (Proj&& f, Val &&v) const HB_AUTO_RETURN
 INFO -    ^
 INFO -  In file included from Unified_cpp_gfx_harfbuzz_src0.cpp:2:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-layout.cc:30:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-layout.hh:33:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-ltag-table.hh:28:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-open-type.hh:34:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-face.hh:34:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-shaper.hh:31:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-machinery.hh:37:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-serialize.hh:36:
ERROR -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-map.hh:304:5: error: invalid operands to binary expression ('decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') and 'hb_map_iter_factory_t<(anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:217:1) &, hb_function_sortedness_t::NOT_SORTED>')
 INFO -      | hb_map (hb_ridentity)
 INFO -      ^ ~~~~~~~~~~~~~~~~~~~~~
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-meta.hh:76:41: note: expanded from macro 'HB_AUTO_RETURN'
 INFO -  #define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
 INFO -                                          ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-subset-input.hh:84:62: note: in instantiation of template class 'hb_hashmap_t<unsigned int, hb_array_t<const char>, false>' requested here
 INFO -      return axes_location->in_error () || name_table_overrides->in_error ();
 INFO -                                                               ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-buffer.hh:60:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_glyph_flags_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_glyph_flags_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-buffer.hh:61:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_buffer_flags_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_buffer_flags_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-buffer.hh:62:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_buffer_serialize_flags_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_buffer_serialize_flags_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-buffer.hh:63:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_buffer_diff_flags_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_buffer_diff_flags_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-buffer.hh:81:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_buffer_scratch_flags_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_buffer_scratch_flags_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-ot-map.hh:187:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_ot_map_feature_flags_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_ot_map_feature_flags_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-serialize.hh:55:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_serialize_error_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_serialize_error_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-subset-input.hh:39:1: note: candidate function not viable: no known conversion from 'decltype((std::forward<hb_map_iter_factory_t<const char *, hb_function_sortedness_t::NOT_SORTED> >(rhs)(std::forward<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr> >(lhs))))' (aka 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, (hb_function_sortedness_t)0>') to 'hb_subset_flags_t' for 1st argument
 INFO -  HB_MARK_AS_FLAG_T (hb_subset_flags_t);
 INFO -  ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:59:30: note: expanded from macro 'HB_MARK_AS_FLAG_T'
 INFO -            static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
 INFO -                                      ^
 INFO -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-iter.hh:348:1: note: candidate template ignored: substitution failure [with Lhs = hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, hb_function_sortedness_t::NOT_SORTED, nullptr>, Rhs = hb_map_iter_factory_t<(anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:217:1) &, hb_function_sortedness_t::NOT_SORTED>]: no type named 'item_t' in 'hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t>, bool (hb_hashmap_t<unsigned int, hb_array_t<const char>, false>::item_t::*)() const, (anonymous struct at /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:200:1) &, nullptr>, const char *, hb_function_sortedness_t::NOT_SORTED, nullptr>'
 INFO -  operator | (Lhs&& lhs, Rhs&& rhs) HB_AUTO_RETURN (std::forward<Rhs> (rhs) (std::forward<Lhs> (lhs)))
 INFO -  ^
 INFO -  In file included from Unified_cpp_gfx_harfbuzz_src0.cpp:2:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-layout.cc:30:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-layout.hh:33:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-aat-ltag-table.hh:28:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-open-type.hh:37:
 INFO -  In file included from /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-subset.hh:37:
ERROR -  /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-subset-plan.hh:92:43: error: no member named 'values' in 'hb_hashmap_t<unsigned int, hb_array_t<const char>, false>'
 INFO -        for (auto _ : name_table_overrides->values ())
 INFO -                      ~~~~~~~~~~~~~~~~~~~~  ^
 INFO -  4 errors generated.

Regression from https://github.com/harfbuzz/harfbuzz/commit/dbb7f47b19e60551ef4707f6a2cb60f1bd8334dd?

behdad commented 1 year ago

Regression from dbb7f47?

No. The name_able_overrides code is new. If anything, we might need more changes similar to https://github.com/harfbuzz/harfbuzz/commit/dbb7f47b19e60551ef4707f6a2cb60f1bd8334dd

So it looks like it's failing at this code:

    + hb_array (items, mask ? mask + 1 : 0) 
    | hb_filter (&item_t::is_real) 
    | hb_map (&item_t::value) 
    | hb_map (hb_ridentity) 

when value_t has an overriden operator &. I tried rewriting the line with value in it as a lambda, but that's only allowed in C++20 the way this code is used.

What baffles me most is this error message: no type named 'item_t' in 'hb_map_iter_t.

Right now the best I can think of is to somehow disable this code unless HB_EXPERIMENTAL is on, since its use is only switched on that flag.

behdad commented 1 year ago

@rvandermeulen can you check if this is fixed?

rvandermeulen commented 1 year ago

@behdad Still some issues with current tip, but fewer than before: https://treeherder.mozilla.org/logviewer?job_id=396484035&repo=try&lineNumber=11767

behdad commented 1 year ago

INFO - /builds/worker/checkouts/gecko/gfx/harfbuzz/src/hb-algs.hh:449:3: note: candidate template ignored: substitution failure [with Proj = const char *, Val = hb_hashmap_t<unsigned int, hb_array_t, false>::item_t &]: no matching member function for call to 'impl'

That Proj here is const char * clearly shows that &item_t::value instead of resulting in a pointer-to-member, calls the operator & of the type instead, which is wrong.

Now, we removed all the calls that go through this. The fact that there's still one error left is because this construct appears in the signatures of the values() function, which is of a non-template type, so gets instantiated.

The only way to work around this is to not instantiate hb_map_t with hb_bytes_t on this compiler at all.

We probably need to rewrite this code such that if the experimental feature is not used, the problematic new function signature is not exposed at all.

behdad commented 1 year ago

We probably need to rewrite this code such that if the experimental feature is not used, the problematic new function signature is not exposed at all.

I just did that. Please test.

rvandermeulen commented 1 year ago

Confirmed, thanks!

behdad commented 2 weeks ago

@rvandermeulen We want to move the affected code out of experimental. Is clang 5 still the minimum supported compiler for Mozilla? cc @jfkthame

rvandermeulen commented 2 weeks ago

No, we're at Clang 8.0 minimum now.

behdad commented 2 weeks ago

Thanks. We'll go ahead with moving those API out of experimental. Please shout out if it breaks clang 8.