[subset] Don't add invalid gids (-1) to the glyphset when loading glyph map from the accelerator.
diff --git a/src/OT/Layout/GPOS/PairPosFormat1.hh b/src/OT/Layout/GPOS/PairPosFormat1.hh
index b4a9a9a..4dada1c 100644
--- a/src/OT/Layout/GPOS/PairPosFormat1.hh
+++ b/src/OT/Layout/GPOS/PairPosFormat1.hh
@@ -55,7 +55,7 @@
 
     if (pairSet.len > glyphs->get_population () * hb_bit_storage ((unsigned) pairSet.len) / 4)
     {
-      for (hb_codepoint_t g = HB_SET_VALUE_INVALID; glyphs->next (&g);)
+      for (hb_codepoint_t g : glyphs->iter())
       {
 	unsigned i = cov.get_coverage (g);
 	if ((this+pairSet[i]).intersects (glyphs, valueFormat))
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc
index 5ac22e7..3a2d508 100644
--- a/src/hb-subset-plan.cc
+++ b/src/hb-subset-plan.cc
@@ -556,9 +556,12 @@
 	if (plan->codepoint_to_glyph->has (cp))
 	  continue;
 
-	hb_codepoint_t gid = (*unicode_glyphid_map)[cp];
-	plan->codepoint_to_glyph->set (cp, gid);
-	plan->unicode_to_new_gid_list.push (hb_pair (cp, gid));
+        hb_codepoint_t *gid;
+        if (!unicode_glyphid_map->has(cp, &gid))
+          continue;
+
+	plan->codepoint_to_glyph->set (cp, *gid);
+	plan->unicode_to_new_gid_list.push (hb_pair (cp, *gid));
       }
       plan->unicode_to_new_gid_list.qsort ();
     }
diff --git a/test/subset/data/Makefile.am b/test/subset/data/Makefile.am
index 864db2d..e13053e 100644
--- a/test/subset/data/Makefile.am
+++ b/test/subset/data/Makefile.am
@@ -10,6 +10,7 @@
 	$(DISABLED_TESTS) \
 	expected/32bit_var_store \
 	expected/basics \
+	expected/preprocess \
 	expected/full-font \
 	expected/glyf_bug_3131 \
 	expected/cff-full-font \
diff --git a/test/subset/data/Makefile.sources b/test/subset/data/Makefile.sources
index 6437c00..22367f9 100644
--- a/test/subset/data/Makefile.sources
+++ b/test/subset/data/Makefile.sources
@@ -1,6 +1,7 @@
 TESTS = \
 	tests/32bit_var_store.tests \
 	tests/basics.tests \
+	tests/preprocess.tests \
 	tests/cbdt.tests \
 	tests/cff-full-font.tests \
 	tests/cff-japanese.tests \
diff --git a/test/subset/data/expected/preprocess/Roboto-Regular.gids.61,62,63,30D9.ttf b/test/subset/data/expected/preprocess/Roboto-Regular.gids.61,62,63,30D9.ttf
new file mode 100644
index 0000000..5f8bff0
--- /dev/null
+++ b/test/subset/data/expected/preprocess/Roboto-Regular.gids.61,62,63,30D9.ttf
Binary files differ
diff --git a/test/subset/data/tests/preprocess.tests b/test/subset/data/tests/preprocess.tests
new file mode 100644
index 0000000..ba2a0e2
--- /dev/null
+++ b/test/subset/data/tests/preprocess.tests
@@ -0,0 +1,8 @@
+FONTS:
+Roboto-Regular.ttf
+
+PROFILES:
+gids.txt
+
+SUBSETS:
+abcベ
diff --git a/test/subset/meson.build b/test/subset/meson.build
index 4f360a3..289cc16 100644
--- a/test/subset/meson.build
+++ b/test/subset/meson.build
@@ -1,5 +1,6 @@
 tests = [
   'basics',
+  'preprocess',
   'full-font',
   'cff-full-font',
   'japanese',