Author: majnemer
Date: Fri Jun 10 15:21:15 2016
New Revision: 272425

URL: http://llvm.org/viewvc/llvm-project?rev=272425&view=rev
Log:
[-fms-extensions] Don't crash on explicit class-scope specializations & default 
arguments

The code had a typo it was doing:
  Param->setUninstantiatedDefaultArg(Param->getUninstantiatedDefaultArg());

This is a no-op but may assert, we wanted to do:
  Param->setUninstantiatedDefaultArg(OldParam->getUninstantiatedDefaultArg());

This fixes PR28082.

Modified:
    cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
    cfe/trunk/test/SemaTemplate/ms-function-specialization-class-scope.cpp

Modified: cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp?rev=272425&r1=272424&r2=272425&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp (original)
+++ cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp Fri Jun 10 15:21:15 2016
@@ -381,7 +381,7 @@ void Parser::ParseLexedMethodDeclaration
       assert (!OldParam->hasUnparsedDefaultArg());
       if (OldParam->hasUninstantiatedDefaultArg())
         Param->setUninstantiatedDefaultArg(
-                                      Param->getUninstantiatedDefaultArg());
+            OldParam->getUninstantiatedDefaultArg());
       else
         Param->setDefaultArg(OldParam->getInit());
     }

Modified: cfe/trunk/test/SemaTemplate/ms-function-specialization-class-scope.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/ms-function-specialization-class-scope.cpp?rev=272425&r1=272424&r2=272425&view=diff
==============================================================================
--- cfe/trunk/test/SemaTemplate/ms-function-specialization-class-scope.cpp 
(original)
+++ cfe/trunk/test/SemaTemplate/ms-function-specialization-class-scope.cpp Fri 
Jun 10 15:21:15 2016
@@ -75,3 +75,12 @@ namespace Duplicates {
   // here.
   template struct A<int>;
 }
+
+namespace PR28082 {
+struct S {
+  template <int>
+  int f(int = 0);
+  template <>
+  int f<0>(int); // expected-warning {{Microsoft extension}}
+};
+}


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to