]> granicus.if.org Git - clang/commit
[Sema] Error out early for tags defined inside an enumeration.
authorVolodymyr Sapsai <vsapsai@apple.com>
Fri, 15 Sep 2017 19:51:42 +0000 (19:51 +0000)
committerVolodymyr Sapsai <vsapsai@apple.com>
Fri, 15 Sep 2017 19:51:42 +0000 (19:51 +0000)
commiteae7634a7793e0900b2aec61ced419578e69b258
treee5a20bcf0e24269b7c94c2336fe69411c23ffae8
parent860b42686dc984e43fe8eefa25aec53266eb4b7a
[Sema] Error out early for tags defined inside an enumeration.

This fixes PR28903 by avoiding access check for inner enum constant. We
are performing access check because one enum constant references another
and because enum is defined in CXXRecordDecl. But access check doesn't
work because FindDeclaringClass doesn't expect more than one EnumDecl
and because inner enum has access AS_none due to not being an immediate
child of a record.

The change detects an enum is defined in wrong place and allows to skip
parsing its body. Access check is skipped together with body parsing.
There was no crash in C, added test case to cover the new error.

rdar://problem/28530809

Reviewers: rnk, doug.gregor, rsmith

Reviewed By: doug.gregor

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D37089

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@313386 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDecl.cpp
test/Sema/enum.c
test/SemaCXX/enum.cpp