aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorFrancois Pichet <pichet2000@gmail.com>2011-05-31 22:36:05 +0000
committerFrancois Pichet <pichet2000@gmail.com>2011-05-31 22:36:05 +0000
commit5aecb786a32d321e8d3462cd49e50092e8d55cd3 (patch)
tree0cd7952a8acaf329ebd5506116063b0f8835e85a /lib/Sema/SemaDecl.cpp
parentd127bcbaab6411a6d1a79c1e01abd0320f366cc5 (diff)
Revert 132332 (Microsoft friend as a forward declaration), John McCall pointed out a better/simpler way to do it.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132369 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r--lib/Sema/SemaDecl.cpp39
1 files changed, 0 insertions, 39 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 7c8d1cfbf3..5a3f6328ca 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -6631,42 +6631,6 @@ bool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous,
return false;
}
-/// InjectMicrosoftFriendForwardDeclaration - For compatibility with MSVC,
-/// a friend declaration also act as a forward declaration if the tag name
-/// is not already declared. The tag name is declared in the next outermost
-/// non record scope.
-/// Example:
-///
-/// class A {
-/// friend class B;
-/// B* b;
-/// };
-/// B* global_b;
-
-void Sema::InjectMicrosoftFriendForwardDeclaration(unsigned TagSpec,
- SourceLocation KWLoc,
- IdentifierInfo *Name,
- SourceLocation NameLoc) {
- NamedDecl *N = LookupSingleName(getCurScope(), Name, NameLoc,
- Sema::LookupTagName);
- if (!N) {
- DeclContext *ContextToAdd = CurContext;
- while (ContextToAdd->isRecord())
- ContextToAdd = ContextToAdd->getParent();
-
- TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
- TagDecl *New = CXXRecordDecl::Create(Context, Kind, ContextToAdd, KWLoc,
- NameLoc, Name, 0);
- // Recreate the DeclContext.
- ContextRAII SavedContext(*this, ContextToAdd);
- if (getCurScope()->getFnParent())
- PushOnScopeChains(New, getScopeForContext(ContextToAdd), true);
- else
- ContextToAdd->addDecl(New);
- }
-}
-
-
/// ActOnTag - This is invoked when we see 'struct foo' or 'struct {'. In the
/// former case, Name will be non-null. In the later case, Name will be null.
/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a
@@ -6684,9 +6648,6 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
"Nameless record must be a definition!");
assert(TemplateParameterLists.size() == 0 || TUK != TUK_Reference);
- if (getLangOptions().Microsoft && TUK == Sema::TUK_Friend)
- InjectMicrosoftFriendForwardDeclaration(TagSpec, KWLoc, Name, NameLoc);
-
OwnedDecl = false;
TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);