diff options
| -rw-r--r-- | clang/include/clang/Sema/Sema.h | 5 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 39 | ||||
| -rw-r--r-- | clang/test/SemaCXX/MicrosoftExtensions.cpp | 25 | 
3 files changed, 0 insertions, 69 deletions
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 8e14207793f..a3dd687e3a1 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -1084,11 +1084,6 @@ public:                   bool &OwnedDecl, bool &IsDependent, bool ScopedEnum,                   bool ScopedEnumUsesClassTag, TypeResult UnderlyingType); -  void InjectMicrosoftFriendForwardDeclaration(unsigned TagSpec, -                                               SourceLocation KWLoc, -                                               IdentifierInfo *Name, -                                               SourceLocation NameLoc); -    Decl *ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,                                  unsigned TagSpec, SourceLocation TagLoc,                                  CXXScopeSpec &SS, diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 7c8d1cfbf38..5a3f6328cac 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/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); diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp index 6d058f20311..22a06673b95 100644 --- a/clang/test/SemaCXX/MicrosoftExtensions.cpp +++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp @@ -226,29 +226,4 @@ private:    using B::f; // expected-warning {{using declaration refers to inaccessible member 'ms_using_declaration_bug::B::f', which refers to accessible member 'ms_using_declaration_bug::A::f', accepted for Microsoft compatibility}}  }; -} - - - -namespace friend_as_a_forward_decl { - -class A { -  class Nested { -    friend class B; -    B* b; -  }; -  B* b; -}; -B* global_b; - - -void f() -{ -  class Local { -    friend class Z; -    Z* b; -  }; -  Z* b; -} -  }
\ No newline at end of file  | 

