diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-06-22 14:26:35 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-06-22 14:26:35 +0000 |
| commit | c9ea2d5a672b9f43850fa424f9bd1065e0834862 (patch) | |
| tree | 9309e941415830686afae53286a4ea76af21829c /clang/lib/Sema/SemaDecl.cpp | |
| parent | 5666ad73813d05af45af85b165965d6da3c792e6 (diff) | |
| download | bcm5719-llvm-c9ea2d5a672b9f43850fa424f9bd1065e0834862.tar.gz bcm5719-llvm-c9ea2d5a672b9f43850fa424f9bd1065e0834862.zip | |
In C++, allow a declaration of an enum to follow a definition of that
enum as a GNU extension.
llvm-svn: 106540
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 4a7c877fd98..ebfb9810d66 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -5401,10 +5401,17 @@ CreateNewDecl: New = EnumDecl::Create(Context, SearchDC, Loc, Name, KWLoc, cast_or_null<EnumDecl>(PrevDecl)); // If this is an undefined enum, warn. - if (TUK != TUK_Definition && !Invalid) { - unsigned DK = getLangOptions().CPlusPlus? diag::err_forward_ref_enum - : diag::ext_forward_ref_enum; - Diag(Loc, DK); + if (TUK != TUK_Definition && !Invalid) { + TagDecl *Def; + if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) { + Diag(Loc, diag::ext_forward_ref_enum_def) + << New; + Diag(Def->getLocation(), diag::note_previous_definition); + } else { + Diag(Loc, + getLangOptions().CPlusPlus? diag::err_forward_ref_enum + : diag::ext_forward_ref_enum); + } } } else { // struct/union/class |

