diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 77583dd6bb52de8d35e4e4874e3471490715d546..39232b5e67fd8fb3d792a0b43ed2d84730d27927 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -4010,6 +4010,11 @@ find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
 		    &find_parameter_packs_r, ppd, ppd->visited);
       return NULL_TREE;
 
+    case TEMPLATE_PARM_INDEX:
+      if (parameter_pack_p)
+	WALK_SUBTREE (TREE_TYPE (t));
+      return NULL_TREE;
+
     case DECL_EXPR:
       {
 	tree decl = DECL_EXPR_DECL (t);
diff --git a/gcc/testsuite/g++.dg/cpp1z/variadic-nontype1.C b/gcc/testsuite/g++.dg/cpp1z/variadic-nontype1.C
new file mode 100644
index 0000000000000000000000000000000000000000..ad2af623b1397d19eba3fec2d59fdac9c2264578
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/variadic-nontype1.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++17 } }
+struct Class1
+{
+    void apply_bool(bool){}
+    void apply_char(char){}
+};
+
+template<auto...Fn> struct Class2;
+template<typename...P, void(Class1::*...Fn)(P)> struct Class2<Fn...>
+{
+    void apply(){}
+};
+
+int main()
+{
+    Class2<&Class1::apply_bool, &Class1::apply_char> class2;
+    class2.apply ();
+}