From 1659c3758b4b2dbd618aed9ff8d1863f11b1bd9b Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Sat, 10 Mar 2012 07:47:07 +0000 Subject: [PATCH] Slightly tweak this condition. "isTransparentContext()" was checking whether an enum is scoped or not, which is not relevant here. Instead, phrase the loop in the same terms that the standard uses, instead of this awkward set of conditions that is *nearly* equal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152489 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 3 +-- test/SemaCXX/enum-scoped.cpp | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 532767b64c..e3527a8289 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -8092,8 +8092,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, // Find the context where we'll be declaring the tag. // FIXME: We would like to maintain the current DeclContext as the // lexical context, - while (SearchDC->isRecord() || SearchDC->isTransparentContext() || - SearchDC->isObjCContainer()) + while (!SearchDC->isFileContext() && !SearchDC->isFunctionOrMethod()) SearchDC = SearchDC->getParent(); // Find the scope where we'll be declaring the tag. diff --git a/test/SemaCXX/enum-scoped.cpp b/test/SemaCXX/enum-scoped.cpp index 94cccb28fd..31190bebaa 100644 --- a/test/SemaCXX/enum-scoped.cpp +++ b/test/SemaCXX/enum-scoped.cpp @@ -184,3 +184,8 @@ namespace PR12106 { enum eCOLORS { Last }; Enum e; } + +namespace test7 { + enum class E { e = (struct S*)0 == (struct S*)0 }; + S *p; +} -- 2.40.0