+static void
+test_fontfuncs_parallels (void)
+{
+ hb_blob_t *blob;
+ hb_face_t *face;
+
+ hb_font_funcs_t *ffuncs1;
+ hb_font_funcs_t *ffuncs2;
+
+ hb_font_t *font0;
+ hb_font_t *font1;
+ hb_font_t *font2;
+ hb_codepoint_t glyph;
+
+ blob = hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL);
+ face = hb_face_create (blob, 0);
+ hb_blob_destroy (blob);
+ font0 = hb_font_create (face);
+ hb_face_destroy (face);
+
+ /* setup sub-font1 */
+ font1 = hb_font_create_sub_font (font0);
+ hb_font_destroy (font0);
+ ffuncs1 = hb_font_funcs_create ();
+ hb_font_funcs_set_nominal_glyph_func (ffuncs1, nominal_glyph_func, NULL, NULL);
+ hb_font_set_funcs (font1, ffuncs1, NULL, NULL);
+ hb_font_funcs_destroy (ffuncs1);
+
+ /* setup sub-font2 */
+ font2 = hb_font_create_sub_font (font1);
+ hb_font_destroy (font1);
+ ffuncs2 = hb_font_funcs_create ();
+ hb_font_funcs_set_nominal_glyphs_func (ffuncs1, nominal_glyphs_func, NULL, NULL);
+ hb_font_set_funcs (font2, ffuncs2, NULL, NULL);
+ hb_font_funcs_destroy (ffuncs2);
+
+ /* Just test that calling get_nominal_glyph doesn't infinite-loop. */
+ hb_font_get_nominal_glyph (font2, 0x0020u, &glyph);
+
+ hb_font_destroy (font2);
+}