[llvm-branch-commits] [cfe-branch] r322677 - Merging r321779:

Hans Wennborg via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Jan 17 08:15:39 PST 2018


Author: hans
Date: Wed Jan 17 08:15:39 2018
New Revision: 322677

URL: http://llvm.org/viewvc/llvm-project?rev=322677&view=rev
Log:
Merging r321779:
------------------------------------------------------------------------
r321779 | rsmith | 2018-01-03 17:24:17 -0800 (Wed, 03 Jan 2018) | 7 lines

PR35045: Convert injected-class-name to its corresponding simple-template-id
during template argument deduction.

We already did this when the injected-class-name was in P, but missed the case
where it was in A. This (probably) can't happen except in implicit deduction
guides.

------------------------------------------------------------------------

Modified:
    cfe/branches/release_60/   (props changed)
    cfe/branches/release_60/lib/Sema/SemaTemplateDeduction.cpp
    cfe/branches/release_60/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp

Propchange: cfe/branches/release_60/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jan 17 08:15:39 2018
@@ -1,4 +1,4 @@
 /cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:321754,321771,321777,321933,322018,322236,322350,322390,322405,322420,322518,322593
+/cfe/trunk:321754,321771,321777,321779,321933,322018,322236,322350,322390,322405,322420,322518,322593
 /cfe/trunk/test:170344
 /cfe/trunk/test/SemaTemplate:126920

Modified: cfe/branches/release_60/lib/Sema/SemaTemplateDeduction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/lib/Sema/SemaTemplateDeduction.cpp?rev=322677&r1=322676&r2=322677&view=diff
==============================================================================
--- cfe/branches/release_60/lib/Sema/SemaTemplateDeduction.cpp (original)
+++ cfe/branches/release_60/lib/Sema/SemaTemplateDeduction.cpp Wed Jan 17 08:15:39 2018
@@ -502,6 +502,10 @@ DeduceTemplateArguments(Sema &S,
                         SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
   assert(Arg.isCanonical() && "Argument type must be canonical");
 
+  // Treat an injected-class-name as its underlying template-id.
+  if (auto *Injected = dyn_cast<InjectedClassNameType>(Arg))
+    Arg = Injected->getInjectedSpecializationType();
+
   // Check whether the template argument is a dependent template-id.
   if (const TemplateSpecializationType *SpecArg
         = dyn_cast<TemplateSpecializationType>(Arg)) {

Modified: cfe/branches/release_60/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp?rev=322677&r1=322676&r2=322677&view=diff
==============================================================================
--- cfe/branches/release_60/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp (original)
+++ cfe/branches/release_60/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp Wed Jan 17 08:15:39 2018
@@ -309,6 +309,17 @@ namespace dependent {
   template int New(int);
 }
 
+namespace injected_class_name {
+  template<typename T = void> struct A {
+    A();
+    template<typename U> A(A<U>);
+  };
+  A<int> a;
+  A b = a;
+  using T = decltype(a);
+  using T = decltype(b);
+}
+
 #else
 
 // expected-no-diagnostics




More information about the llvm-branch-commits mailing list