From cef7d378b68c7328d212e17b6fd3dc74b5d08086 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Fri, 10 Jun 2016 20:21:15 +0000 Subject: [-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. llvm-svn: 272425 --- clang/lib/Parse/ParseCXXInlineMethods.cpp | 2 +- .../test/SemaTemplate/ms-function-specialization-class-scope.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/lib/Parse/ParseCXXInlineMethods.cpp b/clang/lib/Parse/ParseCXXInlineMethods.cpp index 3db75c7ee79..3c5134268e8 100644 --- a/clang/lib/Parse/ParseCXXInlineMethods.cpp +++ b/clang/lib/Parse/ParseCXXInlineMethods.cpp @@ -381,7 +381,7 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) { assert (!OldParam->hasUnparsedDefaultArg()); if (OldParam->hasUninstantiatedDefaultArg()) Param->setUninstantiatedDefaultArg( - Param->getUninstantiatedDefaultArg()); + OldParam->getUninstantiatedDefaultArg()); else Param->setDefaultArg(OldParam->getInit()); } diff --git a/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp b/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp index 5da00837cc0..3c7111d0583 100644 --- a/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp +++ b/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp @@ -75,3 +75,12 @@ namespace Duplicates { // here. template struct A; } + +namespace PR28082 { +struct S { + template + int f(int = 0); + template <> + int f<0>(int); // expected-warning {{Microsoft extension}} +}; +} -- cgit v1.2.3