Index: clang/lib/Parse/ParseDeclCXX.cpp =================================================================== --- clang/lib/Parse/ParseDeclCXX.cpp +++ clang/lib/Parse/ParseDeclCXX.cpp @@ -2180,8 +2180,10 @@ LateMethod->TemplateScope = getCurScope()->isTemplateParamScope(); // Stash the exception-specification tokens in the late-pased method. - LateMethod->ExceptionSpecTokens = FTI.ExceptionSpecTokens; - FTI.ExceptionSpecTokens = nullptr; + if (FTI.getExceptionSpecType() == EST_Unparsed) { + LateMethod->ExceptionSpecTokens = FTI.ExceptionSpecTokens; + FTI.ExceptionSpecTokens = nullptr; + } // Push tokens for each parameter. Those that do not have // defaults will be NULL. Index: clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp =================================================================== --- clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp +++ clang/test/SemaCXX/libstdcxx_pair_swap_hack.cpp @@ -9,6 +9,7 @@ // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=array // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=array -DPR28423 +// RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=array -DDEFAULT_ARG // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=pair // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=priority_queue // RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -verify -fexceptions -fcxx-exceptions -DCLASS=stack @@ -48,7 +49,11 @@ #endif A member; #ifndef MSVC +#ifndef DEFAULT_ARG void swap(CLASS &other) noexcept(noexcept(swap(member, other.member))); +#else + void swap(CLASS &other, int = 0) noexcept(noexcept(swap(member, other.member))); +#endif #endif };