[subset] remove WE_HAVE_INSTRUCTIONS from composites when dropping hints
diff --git a/src/hb-subset-glyf.cc b/src/hb-subset-glyf.cc
index 696a74d..0367666 100644
--- a/src/hb-subset-glyf.cc
+++ b/src/hb-subset-glyf.cc
@@ -180,7 +180,17 @@
       memcpy (glyf_prime_data_next + instruction_start - start_offset, glyf_data + instruction_end, end_offset - instruction_end);
       /* if the instructions end at the end this was a composite glyph */
       if (instruction_end == end_offset)
-        ; // TODO(rsheeter) remove WE_HAVE_INSTRUCTIONS from last flags
+      {
+        /* remove WE_HAVE_INSTRUCTIONS from flags in dest */
+        OT::glyf::CompositeGlyphHeader::Iterator composite_it;
+        if (unlikely (!OT::glyf::CompositeGlyphHeader::get_iterator (glyf_prime_data_next, length, &composite_it))) return false;
+        const OT::glyf::CompositeGlyphHeader *glyph;
+        do {
+          glyph = composite_it.current;
+          OT::HBUINT16 *flags = const_cast<OT::HBUINT16 *> (&glyph->flags);
+          flags->set ( (uint16_t) *flags & ~OT::glyf::CompositeGlyphHeader::WE_HAVE_INSTRUCTIONS);
+        } while (composite_it.move_to_next());
+      }
       else
         /* zero instruction length, which is just before instruction_start */
         memset (glyf_prime_data_next + instruction_start - start_offset - 2, 0, 2);