зеркало из https://github.com/microsoft/clang-1.git
Don't try to delay parsing the exception specification for a data member of a
class; we would never actually parse it and attach it to the type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155426 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
5775351564
Коммит
2b2a0876c9
|
@ -4270,6 +4270,8 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
|
||||||
D.getDeclSpec().getStorageClassSpec()
|
D.getDeclSpec().getStorageClassSpec()
|
||||||
!= DeclSpec::SCS_typedef &&
|
!= DeclSpec::SCS_typedef &&
|
||||||
!D.getDeclSpec().isFriendSpecified());
|
!D.getDeclSpec().isFriendSpecified());
|
||||||
|
for (unsigned i = 0, e = D.getNumTypeObjects(); Delayed && i != e; ++i)
|
||||||
|
Delayed &= D.getTypeObject(i).Kind == DeclaratorChunk::Paren;
|
||||||
ESpecType = tryParseExceptionSpecification(Delayed,
|
ESpecType = tryParseExceptionSpecification(Delayed,
|
||||||
ESpecRange,
|
ESpecRange,
|
||||||
DynamicExceptions,
|
DynamicExceptions,
|
||||||
|
|
|
@ -60,8 +60,16 @@ namespace test3 {
|
||||||
namespace PR12629 {
|
namespace PR12629 {
|
||||||
struct S {
|
struct S {
|
||||||
static int (f)() throw();
|
static int (f)() throw();
|
||||||
static int ((((((g))))() throw(int)));
|
static int ((((((g))))() throw(U)));
|
||||||
|
int (*h)() noexcept(false);
|
||||||
|
static int (&i)() noexcept(true);
|
||||||
|
static int (*j)() throw(U); // expected-error {{type name}} \
|
||||||
|
// expected-error {{expected ')'}} expected-note {{to match}}
|
||||||
|
|
||||||
|
struct U {};
|
||||||
};
|
};
|
||||||
static_assert(noexcept(S::f()), "");
|
static_assert(noexcept(S::f()), "");
|
||||||
static_assert(!noexcept(S::g()), "");
|
static_assert(!noexcept(S::g()), "");
|
||||||
|
static_assert(!noexcept(S().h()), "");
|
||||||
|
static_assert(noexcept(S::i()), "");
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче