Fix glyph closure for alternate substitution.
It was not filtering on the glyphs to be retained.
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 90666d3..1526dd1 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -605,6 +605,7 @@
   void closure (hb_closure_context_t *c) const
   {
     + hb_zip (this+coverage, alternateSet)
+    | hb_filter(c->glyphs, hb_first)
     | hb_map (hb_second)
     | hb_map (hb_add (this))
     | hb_apply ([c] (const AlternateSet &_) { _.closure (c); })
diff --git a/test/subset/data/Makefile.am b/test/subset/data/Makefile.am
index 2070582..15f0811 100644
--- a/test/subset/data/Makefile.am
+++ b/test/subset/data/Makefile.am
@@ -18,6 +18,7 @@
 	expected/layout.gpos3 \
 	expected/layout.gpos4 \
 	expected/layout.gpos6 \
+	expected/layout.gsub3 \
 	expected/layout.gsub6 \
 	expected/cmap \
 	expected/cmap14 \
diff --git a/test/subset/data/Makefile.sources b/test/subset/data/Makefile.sources
index 2b57ef0..dd4fff8 100644
--- a/test/subset/data/Makefile.sources
+++ b/test/subset/data/Makefile.sources
@@ -10,6 +10,7 @@
 	tests/layout.gpos3.tests \
 	tests/layout.gpos4.tests \
 	tests/layout.gpos6.tests \
+	tests/layout.gsub3.tests \
 	tests/layout.gsub6.tests \
 	tests/cmap.tests \
 	tests/cmap14.tests \
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf
new file mode 100644
index 0000000..1d67ee4
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9.otf
new file mode 100644
index 0000000..31fc761
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf
new file mode 100644
index 0000000..2fd89a4
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf
new file mode 100644
index 0000000..e737ed1
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf
new file mode 100644
index 0000000..685c2c9
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf
new file mode 100644
index 0000000..fc1f61b
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53F1.otf
new file mode 100644
index 0000000..367edeb
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf
new file mode 100644
index 0000000..c55b233
--- /dev/null
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/fonts/gsub_alternate_substitution.otf b/test/subset/data/fonts/gsub_alternate_substitution.otf
new file mode 100644
index 0000000..188b8e8
--- /dev/null
+++ b/test/subset/data/fonts/gsub_alternate_substitution.otf
Binary files differ
diff --git a/test/subset/data/tests/layout.gsub3.tests b/test/subset/data/tests/layout.gsub3.tests
new file mode 100644
index 0000000..45b85f5
--- /dev/null
+++ b/test/subset/data/tests/layout.gsub3.tests
@@ -0,0 +1,12 @@
+FONTS:
+gsub_alternate_substitution.otf
+
+PROFILES:
+keep-layout.txt
+keep-layout-retain-gids.txt
+
+SUBSETS:
+厩
+叱
+厩叱
+*