зеркало из https://github.com/microsoft/clang-1.git
PR12688: ParseCXXClassMemberDeclaration's sometimes-null ThisDecl takes another
victim. Don't crash if we have a delay-parsed exception specification for a class member which is invalid in a way which precludes building a FunctionDecl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155788 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
a2e76f56c6
Коммит
e531001b7e
|
@ -2065,7 +2065,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
DeclsInGroup.push_back(ThisDecl);
|
||||
}
|
||||
|
||||
if (DeclaratorInfo.isFunctionDeclarator() &&
|
||||
if (ThisDecl && DeclaratorInfo.isFunctionDeclarator() &&
|
||||
DeclaratorInfo.getDeclSpec().getStorageClassSpec()
|
||||
!= DeclSpec::SCS_typedef) {
|
||||
HandleMemberFunctionDeclDelays(DeclaratorInfo, ThisDecl);
|
||||
|
|
|
@ -73,3 +73,16 @@ namespace PR12629 {
|
|||
static_assert(!noexcept(S().h()), "");
|
||||
static_assert(noexcept(S::i()), "");
|
||||
}
|
||||
|
||||
namespace PR12688 {
|
||||
struct S {
|
||||
// FIXME: Producing one error saying this can't have the same name
|
||||
// as the class because it's not a constructor, then producing
|
||||
// another error saying this can't have a return type because
|
||||
// it is a constructor, is redundant and inconsistent.
|
||||
nonsense S() throw (more_nonsense); // \
|
||||
// expected-error {{'nonsense'}} \
|
||||
// expected-error {{has the same name as its class}} \
|
||||
// expected-error {{constructor cannot have a return type}}
|
||||
};
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче