[PATCH] D65050: [SemaTemplate] Mark a function type as dependent when its parameter list contains pack expansion

S. B. Tam via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri May 22 02:25:43 PDT 2020


cpplearner updated this revision to Diff 265683.
cpplearner added a comment.

rebase & ping @rsmith


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65050/new/

https://reviews.llvm.org/D65050

Files:
  clang/lib/AST/Type.cpp
  clang/test/SemaTemplate/alias-templates.cpp


Index: clang/test/SemaTemplate/alias-templates.cpp
===================================================================
--- clang/test/SemaTemplate/alias-templates.cpp
+++ clang/test/SemaTemplate/alias-templates.cpp
@@ -265,3 +265,34 @@
     int z = Bar(); // expected-error {{use of template template parameter 'Bar' requires template arguments}}
   }
 }
+
+namespace PR42654 {
+  template<typename> struct function { };
+
+  template<typename...T>
+  struct thing {
+    void f(function<void(T...)>) { }
+  };
+
+  template<typename ...Ts>
+  struct Environment
+  {
+    template<typename T>
+    using Integer = int;
+
+    using Function = function<void(Integer<Ts>...)>;
+    using MyTuple = thing<Integer<Ts>...>;
+
+    void run(Function func)
+    {
+      MyTuple t;
+      t.f(func);
+    }
+  };
+
+  void f()
+  {
+    Environment<int, double> env;
+    env.run({});
+  }
+}
Index: clang/lib/AST/Type.cpp
===================================================================
--- clang/lib/AST/Type.cpp
+++ clang/lib/AST/Type.cpp
@@ -3110,6 +3110,11 @@
   for (unsigned i = 0; i != getNumParams(); ++i) {
     addDependence(params[i]->getDependence() &
                   ~TypeDependence::VariablyModified);
+    // A pack expansion with a non-dependent pattern affects the number of
+    // parameters, thus we mark such function type as dependent, even though
+    // this isn't listed in N4861 [temp.dep.type].
+    if (params[i]->getAs<PackExpansionType>())
+      addDependence(TypeDependence::Dependent);
     argSlot[i] = params[i];
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65050.265683.patch
Type: text/x-patch
Size: 1556 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200522/7b900f5b/attachment-0001.bin>


More information about the cfe-commits mailing list