Skip to content

Commit 395451e

Browse files
Upgrade Harfbuzz to 11.1.0
[ChangeLog][Third-Party Code] Upgraded Harfbuzz to version 11.1.0. Pick-to: 5.15 6.5 6.8 6.9 Task-number: QTBUG-136054 Change-Id: I388586c887a3ae30ecc7b07bb0b6a5c12d3b6caf Reviewed-by: Eirik Aavitsland <[email protected]>
1 parent 3c80dd5 commit 395451e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2611
-2003
lines changed

src/3rdparty/harfbuzz-ng/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ qt_internal_add_3rdparty_library(BundledHarfbuzz
4747
src/hb-paint-extents.cc src/hb-paint-extents.hh
4848
src/hb-priority-queue.hh
4949
src/hb-repacker.hh
50+
src/hb-script-list.h
5051
src/hb-set.cc src/hb-set.h src/hb-set.hh
5152
src/hb-set-digest.hh
5253
src/hb-shape.cc src/hb-shape.h
@@ -64,8 +65,10 @@ qt_internal_add_3rdparty_library(BundledHarfbuzz
6465
src/hb-subset-instancer-iup.cc src/hb-subset-instancer-iup.hh
6566
src/hb-subset-instancer-solver.cc
6667
src/hb-subset-plan.cc
68+
src/hb-subset-plan-layout.cc
6769
src/hb-subset-plan-member-list.hh
6870
src/hb-subset-serialize.cc src/hb-subset-serialize.h
71+
src/hb-subset-plan-var.cc
6972
src/hb-unicode.cc src/hb-unicode.h src/hb-unicode.hh
7073
src/hb-utf.hh
7174
src/hb-version.h

src/3rdparty/harfbuzz-ng/README.md

+48-17
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
[![macoOS CI Status](https://github.com/harfbuzz/harfbuzz/actions/workflows/macos-ci.yml/badge.svg)](https://github.com/harfbuzz/harfbuzz/actions/workflows/macos-ci.yml)
33
[![Windows CI Status](https://github.com/harfbuzz/harfbuzz/actions/workflows/msvc-ci.yml/badge.svg)](https://github.com/harfbuzz/harfbuzz/actions/workflows/msvc-ci.yml)
44
[![CircleCI Build Status](https://circleci.com/gh/harfbuzz/harfbuzz/tree/main.svg?style=svg)](https://circleci.com/gh/harfbuzz/harfbuzz/tree/main)
5-
[![OSS-Fuzz Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/harfbuzz.svg)](https://oss-fuzz-build-logs.storage.googleapis.com/index.html)
5+
[![OSS-Fuzz Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/harfbuzz.svg)](https://oss-fuzz-build-logs.storage.googleapis.com/index.html#harfbuzz)
66
[![Coverity Scan Build Status](https://scan.coverity.com/projects/15166/badge.svg)](https://scan.coverity.com/projects/harfbuzz)
77
[![Packaging status](https://repology.org/badge/tiny-repos/harfbuzz.svg)](https://repology.org/project/harfbuzz/versions)
88
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/harfbuzz/harfbuzz/badge)](https://securityscorecards.dev/viewer/?uri=github.com/harfbuzz/harfbuzz)
@@ -35,13 +35,20 @@ will also find Win32/Win64 binary bundles that include `libharfbuzz` DLL,
3535
`hb-view.exe`, `hb-shape.exe`, and all dependencies.
3636

3737
The canonical source tree is available on [github][4].
38+
Both development and user support discussion around HarfBuzz happens on
39+
[github][4] as well.
3840

3941
The API that comes with `hb.h` will not change incompatibly. Other, peripheral,
4042
headers are more likely to go through minor modifications, but again, we do our
4143
best to never change API in an incompatible way. We will never break the ABI.
4244

43-
If you are not sure whether Pango or HarfBuzz is right for you, read [Pango vs
44-
HarfBuzz][5].
45+
The API and ABI are stable even across major version number jumps. In fact,
46+
current HarfBuzz is API/ABI compatible all the way back to the 0.9.x series.
47+
If one day we need to break the API/ABI, that would be called a new a library.
48+
49+
As such, we bump the major version number only when we add major new features,
50+
the minor version when there is new API, and the micro version when there
51+
are bug fixes.
4552

4653
## Development
4754

@@ -51,26 +58,38 @@ For custom configurations, see [CONFIG.md](CONFIG.md).
5158

5259
For testing and profiling, see [TESTING.md](TESTING.md).
5360

61+
For using with Python, see [README.python.md](README.python.md). There is also [uharfbuzz](https://github.com/harfbuzz/uharfbuzz).
62+
5463
For cross-compiling to Windows from Linux or macOS, see [README.mingw.md](README.mingw.md).
5564

65+
To report bugs or submit patches please use [github][4] issues and pull-requests.
66+
67+
### Developer documents
68+
5669
To get a better idea of where HarfBuzz stands in the text rendering stack you
5770
may want to read [State of Text Rendering 2024][6].
5871
Here are a few presentation slides about HarfBuzz at the
5972
Internationalization and Unicode Conference over the years:
6073

61-
* November 2014, [Unicode, OpenType, and HarfBuzz: Closing the Circle][7],
62-
* October 2012, [HarfBuzz, The Free and Open Text Shaping Engine][8],
63-
* October 2009, [HarfBuzz: the Free and Open Shaping Engine][9].
64-
65-
Both development and user support discussion around HarfBuzz happens on the
66-
[github][4].
74+
- 2014 – [Unicode, OpenType, and HarfBuzz: Closing the Circle][7]
75+
- 2012 – [HarfBuzz, The Free and Open Text Shaping Engine][8]
76+
- 2016 – [Ten Years of HarfBuzz][20]
77+
- 2009 – [HarfBuzz: the Free and Open Shaping Engine][9]
6778

68-
To report bugs or submit patches please use [github][4] issues and
69-
pull-requests.
79+
More presentations and papers are available on [behdad][11]'s website.
80+
In particular, the following _studies_ are relevant to HarfBuzz development:
7081

71-
For a comparison of old vs new HarfBuzz memory consumption see [this][10].
82+
- 2025 – [Subsetting][21]
83+
- 2025 – [Caching][12]
84+
- 2025 – [`hb-decycler`][13]
85+
- 2022 – [`hb-iter`][14]
86+
- 2022 – [A C library written in C++][15]
87+
- 2022 – [The case of the slow `hb-ft` `>h_advance` function][18]
88+
- 2022 – [PackTab: A static integer table packer][16]
89+
- 2020 – [HarfBuzz OT+AAT "Unishaper"][19]
90+
- 2014 – [Building the Indic Shaper][17]
91+
- 2012 – [Memory Consumption][10]
7292

73-
<!--See past and upcoming [HarfBuzz Hackfests](https://freedesktop.org/wiki/Software/HarfBuzz/Hackfests/)!-->
7493

7594
## Name
7695

@@ -87,6 +106,8 @@ transliterated using the Latin script. It also means "talkative" or
87106
> TrueType that adds support for complex script rendering, and HarfBuzz is an
88107
> implementation of OpenType complex text shaping.
89108
109+
## Distribution
110+
90111
<details>
91112
<summary>Packaging status of HarfBuzz</summary>
92113

@@ -98,9 +119,19 @@ transliterated using the Latin script. It also means "talkative" or
98119
[2]: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6AATIntro.html
99120
[3]: https://github.com/harfbuzz/harfbuzz/releases
100121
[4]: https://github.com/harfbuzz/harfbuzz
101-
[5]: http://mces.blogspot.com/2009/11/pango-vs-harfbuzz.html
102122
[6]: http://behdad.org/text2024
103-
[7]: https://goo.gl/FSIQuC
104-
[8]: https://goo.gl/2wSRu
123+
[7]: https://docs.google.com/presentation/d/1x97pfbB1gbD53Yhz6-_yBUozQMVJ_5yMqqR_D-R7b7I/preview
124+
[8]: https://docs.google.com/presentation/d/1ySTZaXP5XKFg0OpmHZM00v5b17GSr3ojnzJekl4U8qI/preview
105125
[9]: http://behdad.org/download/Presentations/slippy/harfbuzz_slides.pdf
106-
[10]: https://goo.gl/woyty
126+
[10]: https://docs.google.com/document/d/12jfNpQJzeVIAxoUSpk7KziyINAa1msbGliyXqguS86M/preview
127+
[11]: https://behdad.org/
128+
[12]: https://docs.google.com/document/d/1_VgObf6Je0J8byMLsi7HCQHnKo2emGnx_ib_sHo-bt4/preview
129+
[13]: https://docs.google.com/document/d/1Y-u08l9YhObRVObETZt1k8f_5lQdOix9TRH3zEXaoAw/preview
130+
[14]: https://docs.google.com/document/d/1o-xvxCbgMe9JYFHLVnPjk01ZY_8Cj0vB9-KTI1d0nyk/preview
131+
[15]: https://docs.google.com/document/d/18hI56KJpvXtwWbc9QSaz9zzhJwIMnrJ-zkAaKS-W-8k/preview
132+
[16]: https://docs.google.com/document/d/1Xq3owVt61HVkJqbLFHl73il6pcTy6PdPJJ7bSouQiQw/preview
133+
[17]: https://docs.google.com/document/d/1wMPwVNBvsIriamcyBO5aNs7Cdr8lmbwLJ8GmZBAswF4/preview
134+
[18]: https://docs.google.com/document/d/1wskYbA-czBt57oH9gEuGf3sWbTx7bfOiEIcDs36-heo/preview
135+
[19]: https://prezi.com/view/THNPJGFVDUCWoM20syev/
136+
[20]: https://behdad.org/doc/harfbuzz10years-slides.pdf
137+
[21]: https://docs.google.com/document/d/1_vZrt97OorJ0jA1YzJ29LRcGr3YGrNJANdOABjVZGEs/preview

src/3rdparty/harfbuzz-ng/qt_attribution.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
"Description": "HarfBuzz is an OpenType text shaping engine.",
99
"Homepage": "http://harfbuzz.org",
10-
"Version": "11.0.0",
11-
"DownloadLocation": "https://github.com/harfbuzz/harfbuzz/releases/tag/11.0.0",
10+
"Version": "11.1.0",
11+
"DownloadLocation": "https://github.com/harfbuzz/harfbuzz/releases/tag/11.1.0",
1212
"PURL": "pkg:github/harfbuzz/harfbuzz@$<VERSION>",
1313
"CPE": "cpe:2.3:a:harfbuzz_project:harfbuzz:$<VERSION>:*:*:*:*:*:*:*",
1414
"License": "MIT License",

src/3rdparty/harfbuzz-ng/src/OT/Layout/Common/CoverageFormat1.hh

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ struct CoverageFormat1_3
7777

7878
bool intersects (const hb_set_t *glyphs) const
7979
{
80-
if (glyphArray.len > glyphs->get_population () * hb_bit_storage ((unsigned) glyphArray.len) / 2)
80+
if (glyphArray.len > glyphs->get_population () * hb_bit_storage ((unsigned) glyphArray.len))
8181
{
8282
for (auto g : *glyphs)
8383
if (get_coverage (g) != NOT_COVERED)

src/3rdparty/harfbuzz-ng/src/OT/Layout/Common/CoverageFormat2.hh

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ struct CoverageFormat2_4
120120

121121
bool intersects (const hb_set_t *glyphs) const
122122
{
123-
if (rangeRecord.len > glyphs->get_population () * hb_bit_storage ((unsigned) rangeRecord.len) / 2)
123+
if (rangeRecord.len > glyphs->get_population () * hb_bit_storage ((unsigned) rangeRecord.len))
124124
{
125125
for (auto g : *glyphs)
126126
if (get_coverage (g) != NOT_COVERED)

src/3rdparty/harfbuzz-ng/src/OT/Layout/GDEF/GDEF.hh

+12-12
Original file line numberDiff line numberDiff line change
@@ -205,20 +205,19 @@ struct CaretValueFormat3
205205

206206
unsigned varidx = (this+deviceTable).get_variation_index ();
207207
hb_pair_t<unsigned, int> *new_varidx_delta;
208-
if (!c->plan->layout_variation_idx_delta_map.has (varidx, &new_varidx_delta))
209-
return_trace (false);
208+
if (c->plan->layout_variation_idx_delta_map.has (varidx, &new_varidx_delta)) {
209+
uint32_t new_varidx = hb_first (*new_varidx_delta);
210+
int delta = hb_second (*new_varidx_delta);
211+
if (delta != 0)
212+
{
213+
if (!c->serializer->check_assign (out->coordinate, coordinate + delta, HB_SERIALIZE_ERROR_INT_OVERFLOW))
214+
return_trace (false);
215+
}
210216

211-
uint32_t new_varidx = hb_first (*new_varidx_delta);
212-
int delta = hb_second (*new_varidx_delta);
213-
if (delta != 0)
214-
{
215-
if (!c->serializer->check_assign (out->coordinate, coordinate + delta, HB_SERIALIZE_ERROR_INT_OVERFLOW))
216-
return_trace (false);
217+
if (new_varidx == HB_OT_LAYOUT_NO_VARIATIONS_INDEX)
218+
return_trace (c->serializer->check_assign (out->caretValueFormat, 1, HB_SERIALIZE_ERROR_INT_OVERFLOW));
217219
}
218220

219-
if (new_varidx == HB_OT_LAYOUT_NO_VARIATIONS_INDEX)
220-
return_trace (c->serializer->check_assign (out->caretValueFormat, 1, HB_SERIALIZE_ERROR_INT_OVERFLOW));
221-
222221
if (!c->serializer->embed (deviceTable))
223222
return_trace (false);
224223

@@ -1015,7 +1014,8 @@ struct GDEF
10151014
hb_blob_ptr_t<GDEF> table;
10161015
#ifndef HB_NO_GDEF_CACHE
10171016
hb_vector_t<hb_set_digest_t> mark_glyph_set_digests;
1018-
mutable hb_cache_t<21, 3, 8> glyph_props_cache;
1017+
mutable hb_cache_t<21, 3> glyph_props_cache;
1018+
static_assert (sizeof (glyph_props_cache) == 512, "");
10191019
#endif
10201020
};
10211021

src/3rdparty/harfbuzz-ng/src/OT/Layout/GPOS/PairPosFormat1.hh

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ struct PairPosFormat1_3
5454
{
5555
auto &cov = this+coverage;
5656

57-
if (pairSet.len > glyphs->get_population () * hb_bit_storage ((unsigned) pairSet.len) / 4)
57+
if (pairSet.len > glyphs->get_population () * hb_bit_storage ((unsigned) pairSet.len))
5858
{
5959
for (hb_codepoint_t g : glyphs->iter())
6060
{

src/3rdparty/harfbuzz-ng/src/OT/Var/VARC/VARC.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ VARC::get_path_at (const hb_varc_context_t &c,
392392

393393
hb_ubytes_t record = (this+glyphRecords)[idx];
394394

395-
float static_cache[sizeof (void *) * 16];
395+
VarRegionList::cache_t static_cache[sizeof (void *) * 16];
396396
VarRegionList::cache_t *cache = parent_cache ?
397397
parent_cache :
398398
(this+varStore).create_cache (hb_array (static_cache));

src/3rdparty/harfbuzz-ng/src/harfbuzz-subset.cc

+2
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
#include "hb-subset-input.cc"
5858
#include "hb-subset-instancer-iup.cc"
5959
#include "hb-subset-instancer-solver.cc"
60+
#include "hb-subset-plan-layout.cc"
61+
#include "hb-subset-plan-var.cc"
6062
#include "hb-subset-plan.cc"
6163
#include "hb-subset-serialize.cc"
6264
#include "hb-subset.cc"

src/3rdparty/harfbuzz-ng/src/hb-aat-layout-common.hh

+4-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,10 @@ struct hb_aat_apply_context_t :
194194
HB_NODISCARD bool replace_glyph (hb_codepoint_t glyph)
195195
{
196196
if (glyph == DELETED_GLYPH)
197-
return delete_glyph ();
197+
{
198+
buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_AAT_HAS_DELETED;
199+
_hb_glyph_info_set_aat_deleted (&buffer->cur());
200+
}
198201

199202
if (likely (using_buffer_glyph_set))
200203
buffer_glyph_set->add (glyph);

src/3rdparty/harfbuzz-ng/src/hb-aat-layout-trak-table.hh

+42-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "hb-aat-layout-common.hh"
3232
#include "hb-ot-layout.hh"
3333
#include "hb-open-type.hh"
34+
#include "hb-ot-stat-table.hh"
3435

3536
/*
3637
* trak -- Tracking
@@ -115,7 +116,7 @@ struct TrackTableEntry
115116

116117
protected:
117118
F16DOT16 track; /* Track value for this record. */
118-
NameID trackNameID; /* The 'name' table index for this track.
119+
OT::NameID trackNameID; /* The 'name' table index for this track.
119120
* (a short word or phrase like "loose"
120121
* or "very tight") */
121122
NNOffset16To<UnsizedArrayOf<FWORD>>
@@ -200,6 +201,46 @@ struct trak
200201
float ptem = font->ptem > 0.f ? font->ptem : HB_CORETEXT_DEFAULT_FONT_SIZE;
201202
return font->em_scalef_y ((this+vertData).get_tracking (this, ptem, track));
202203
}
204+
hb_position_t get_tracking (hb_font_t *font, hb_direction_t dir, float track = 0.f) const
205+
{
206+
#ifndef HB_NO_STYLE
207+
if (!font->face->table.STAT->has_data ())
208+
return 0;
209+
return HB_DIRECTION_IS_HORIZONTAL (dir) ?
210+
get_h_tracking (font, track) :
211+
get_v_tracking (font, track);
212+
#else
213+
return 0;
214+
#endif
215+
}
216+
217+
bool apply (hb_aat_apply_context_t *c, float track = 0.f) const
218+
{
219+
TRACE_APPLY (this);
220+
221+
float ptem = c->font->ptem;
222+
if (unlikely (ptem <= 0.f))
223+
{
224+
/* https://developer.apple.com/documentation/coretext/1508745-ctfontcreatewithgraphicsfont */
225+
ptem = HB_CORETEXT_DEFAULT_FONT_SIZE;
226+
}
227+
228+
hb_buffer_t *buffer = c->buffer;
229+
if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
230+
{
231+
hb_position_t advance_to_add = get_h_tracking (c->font, track);
232+
foreach_grapheme (buffer, start, end)
233+
buffer->pos[start].x_advance += advance_to_add;
234+
}
235+
else
236+
{
237+
hb_position_t advance_to_add = get_v_tracking (c->font, track);
238+
foreach_grapheme (buffer, start, end)
239+
buffer->pos[start].y_advance += advance_to_add;
240+
}
241+
242+
return_trace (true);
243+
}
203244

204245
bool sanitize (hb_sanitize_context_t *c) const
205246
{

src/3rdparty/harfbuzz-ng/src/hb-aat-layout.cc

+12-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
#include "hb-aat-layout-just-table.hh" // Just so we compile it; unused otherwise.
3535
#include "hb-aat-layout-kerx-table.hh"
3636
#include "hb-aat-layout-morx-table.hh"
37-
#include "hb-aat-layout-trak-table.hh" // Just so we compile it; unused otherwise.
37+
#include "hb-aat-layout-trak-table.hh"
3838
#include "hb-aat-ltag-table.hh"
3939

4040
#include "hb-ot-layout-gsub-table.hh"
@@ -394,6 +394,17 @@ hb_aat_layout_has_tracking (hb_face_t *face)
394394
return face->table.trak->has_data ();
395395
}
396396

397+
void
398+
hb_aat_layout_track (const hb_ot_shape_plan_t *plan,
399+
hb_font_t *font,
400+
hb_buffer_t *buffer)
401+
{
402+
const AAT::trak& trak = *font->face->table.trak;
403+
404+
AAT::hb_aat_apply_context_t c (plan, font, buffer);
405+
trak.apply (&c);
406+
}
407+
397408
/**
398409
* hb_aat_layout_get_feature_types:
399410
* @face: #hb_face_t to work upon

src/3rdparty/harfbuzz-ng/src/hb-aat-layout.hh

+5
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,10 @@ hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
6868
hb_font_t *font,
6969
hb_buffer_t *buffer);
7070

71+
HB_INTERNAL void
72+
hb_aat_layout_track (const hb_ot_shape_plan_t *plan,
73+
hb_font_t *font,
74+
hb_buffer_t *buffer);
75+
7176

7277
#endif /* HB_AAT_LAYOUT_HH */

src/3rdparty/harfbuzz-ng/src/hb-atomic.hh

+5-6
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,14 @@ _hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N)
8080

8181
#include <atomic>
8282

83-
#define _hb_memory_barrier() std::atomic_thread_fence(std::memory_order_ack_rel)
8483
#define _hb_memory_r_barrier() std::atomic_thread_fence(std::memory_order_acquire)
8584
#define _hb_memory_w_barrier() std::atomic_thread_fence(std::memory_order_release)
8685

87-
#define hb_atomic_int_impl_add(AI, V) (reinterpret_cast<std::atomic<std::decay<decltype (*(AI))>::type> *> (AI)->fetch_add ((V), std::memory_order_acq_rel))
88-
#define hb_atomic_int_impl_set_relaxed(AI, V) (reinterpret_cast<std::atomic<std::decay<decltype (*(AI))>::type> *> (AI)->store ((V), std::memory_order_relaxed))
89-
#define hb_atomic_int_impl_set(AI, V) (reinterpret_cast<std::atomic<std::decay<decltype (*(AI))>::type> *> (AI)->store ((V), std::memory_order_release))
90-
#define hb_atomic_int_impl_get_relaxed(AI) (reinterpret_cast<std::atomic<std::decay<decltype (*(AI))>::type> const *> (AI)->load (std::memory_order_relaxed))
91-
#define hb_atomic_int_impl_get(AI) (reinterpret_cast<std::atomic<std::decay<decltype (*(AI))>::type> const *> (AI)->load (std::memory_order_acquire))
86+
#define hb_atomic_int_impl_add(AI, V) (reinterpret_cast<std::atomic<typename std::decay<decltype (*(AI))>::type> *> (AI)->fetch_add ((V), std::memory_order_acq_rel))
87+
#define hb_atomic_int_impl_set_relaxed(AI, V) (reinterpret_cast<std::atomic<typename std::decay<decltype (*(AI))>::type> *> (AI)->store ((V), std::memory_order_relaxed))
88+
#define hb_atomic_int_impl_set(AI, V) (reinterpret_cast<std::atomic<typename std::decay<decltype (*(AI))>::type> *> (AI)->store ((V), std::memory_order_release))
89+
#define hb_atomic_int_impl_get_relaxed(AI) (reinterpret_cast<std::atomic<typename std::decay<decltype (*(AI))>::type> const *> (AI)->load (std::memory_order_relaxed))
90+
#define hb_atomic_int_impl_get(AI) (reinterpret_cast<std::atomic<typename std::decay<decltype (*(AI))>::type> const *> (AI)->load (std::memory_order_acquire))
9291

9392
#define hb_atomic_ptr_impl_set_relaxed(P, V) (reinterpret_cast<std::atomic<void*> *> (P)->store ((V), std::memory_order_relaxed))
9493
#define hb_atomic_ptr_impl_get_relaxed(P) (reinterpret_cast<std::atomic<void*> const *> (P)->load (std::memory_order_relaxed))

0 commit comments

Comments
 (0)