Why? Is the plan to reimplement this in some other way? On Sun, Jan 23, 2011 at 1:33 PM, Anders Carlsson <[email protected]> wrote: > Author: andersca > Date: Sun Jan 23 15:33:18 2011 > New Revision: 124087 > > URL: http://llvm.org/viewvc/llvm-project?rev=124087&view=rev > Log: > Get rid of [[hiding]], [[override]] and [[base_check]]. > > Removed: > cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.override/ > Modified: > cfe/trunk/include/clang/Basic/Attr.td > cfe/trunk/include/clang/Sema/AttributeList.h > cfe/trunk/lib/Parse/ParseDeclCXX.cpp > cfe/trunk/lib/Sema/AttributeList.cpp > cfe/trunk/lib/Sema/SemaDecl.cpp > cfe/trunk/lib/Sema/SemaDeclAttr.cpp > cfe/trunk/test/SemaCXX/attr-cxx0x.cpp > > Modified: cfe/trunk/include/clang/Basic/Attr.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=124087&r1=124086&r2=124087&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/Attr.td (original) > +++ cfe/trunk/include/clang/Basic/Attr.td Sun Jan 23 15:33:18 2011 > @@ -129,12 +129,6 @@ > let Args = [StringArgument<"Label">]; > } > > -def BaseCheck : InheritableAttr { > - let Spellings = ["base_check"]; > - let Subjects = [CXXRecord]; > - let Namespaces = ["", "std"]; > -} > - > def Blocks : InheritableAttr { > let Spellings = ["blocks"]; > let Args = [EnumArgument<"Type", "BlockType", ["byref"], ["ByRef"]>]; > @@ -238,12 +232,6 @@ > let Spellings = ["gnu_inline"]; > } > > -def Hiding : InheritableAttr { > - let Spellings = ["hiding"]; > - let Subjects = [Field, CXXMethod]; > - let Namespaces = ["", "std"]; > -} > - > def IBAction : InheritableAttr { > let Spellings = ["ibaction"]; > } > @@ -344,12 +332,6 @@ > let Spellings = ["NSOjbect"]; > } > > -def Override : InheritableAttr { > - let Spellings = ["override"]; > - let Subjects = [CXXVirtualMethod]; > - let Namespaces = ["", "std"]; > -} > - > def Overloadable : Attr { > let Spellings = ["overloadable"]; > } > > Modified: cfe/trunk/include/clang/Sema/AttributeList.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/AttributeList.h?rev=124087&r1=124086&r2=124087&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Sema/AttributeList.h (original) > +++ cfe/trunk/include/clang/Sema/AttributeList.h Sun Jan 23 15:33:18 2011 > @@ -108,7 +108,6 @@ > AT_format_arg, > AT_global, > AT_gnu_inline, > - AT_hiding, > AT_host, > AT_launch_bounds, > AT_malloc, > @@ -126,7 +125,6 @@ > AT_nothrow, > AT_nsobject, > AT_objc_exception, > - AT_override, > AT_cf_returns_not_retained, // Clang-specific. > AT_cf_returns_retained, // Clang-specific. > AT_ns_returns_not_retained, // Clang-specific. > > Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=124087&r1=124086&r2=124087&view=diff > ============================================================================== > --- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original) > +++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Sun Jan 23 15:33:18 2011 > @@ -2221,11 +2221,8 @@ > switch(AttributeList::getKind(AttrName)) > { > // No arguments > - case AttributeList::AT_base_check: > case AttributeList::AT_carries_dependency: > - case AttributeList::AT_hiding: > - case AttributeList::AT_noreturn: > - case AttributeList::AT_override: { > + case AttributeList::AT_noreturn: { > if (Tok.is(tok::l_paren)) { > Diag(Tok.getLocation(), diag::err_cxx0x_attribute_forbids_arguments) > << AttrName->getName(); > > Modified: cfe/trunk/lib/Sema/AttributeList.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/AttributeList.cpp?rev=124087&r1=124086&r2=124087&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/AttributeList.cpp (original) > +++ cfe/trunk/lib/Sema/AttributeList.cpp Sun Jan 23 15:33:18 2011 > @@ -56,7 +56,6 @@ > .Case("__const", AT_const) // some GCC headers do contain this spelling > .Case("blocks", AT_blocks) > .Case("format", AT_format) > - .Case("hiding", AT_hiding) > .Case("malloc", AT_malloc) > .Case("packed", AT_packed) > .Case("unused", AT_unused) > @@ -77,7 +76,6 @@ > .Case("iboutletcollection", AT_IBOutletCollection) > .Case("noreturn", AT_noreturn) > .Case("noinline", AT_noinline) > - .Case("override", AT_override) > .Case("sentinel", AT_sentinel) > .Case("NSObject", AT_nsobject) > .Case("dllimport", AT_dllimport) > > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=124087&r1=124086&r2=124087&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Sun Jan 23 15:33:18 2011 > @@ -3372,52 +3372,6 @@ > } > } > > -/// CheckClassMemberNameAttributes - Check for class member name checking > -/// attributes according to [dcl.attr.override] > -static void > -CheckClassMemberNameAttributes(Sema& SemaRef, const FunctionDecl *FD) { > - const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD); > - if (!MD || !MD->isVirtual()) > - return; > - > - bool HasOverrideAttr = MD->hasAttr<OverrideAttr>(); > - bool HasOverriddenMethods = > - MD->begin_overridden_methods() != MD->end_overridden_methods(); > - > - /// C++ [dcl.attr.override]p2: > - /// If a virtual member function f is marked override and does not > override > - /// a member function of a base class the program is ill-formed. > - if (HasOverrideAttr && !HasOverriddenMethods) { > - SemaRef.Diag(MD->getLocation(), > - diag::err_function_marked_override_not_overriding) > - << MD->getDeclName(); > - return; > - } > - > - if (!MD->getParent()->hasAttr<BaseCheckAttr>()) > - return; > - > - /// C++ [dcl.attr.override]p6: > - /// In a class definition marked base_check, if a virtual member function > - /// that is neither implicitly-declared nor a destructor overrides a > - /// member function of a base class and it is not marked override, the > - /// program is ill-formed. > - if (HasOverriddenMethods && !HasOverrideAttr && !MD->isImplicit() && > - !isa<CXXDestructorDecl>(MD)) { > - llvm::SmallVector<const CXXMethodDecl*, 4> > - OverriddenMethods(MD->begin_overridden_methods(), > - MD->end_overridden_methods()); > - > - SemaRef.Diag(MD->getLocation(), > - diag::err_function_overriding_without_override) > - << MD->getDeclName() << (unsigned)OverriddenMethods.size(); > - > - for (unsigned I = 0; I != OverriddenMethods.size(); ++I) > - SemaRef.Diag(OverriddenMethods[I]->getLocation(), > - diag::note_overridden_virtual_function); > - } > -} > - > NamedDecl* > Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, > QualType R, TypeSourceInfo *TInfo, > @@ -4095,7 +4049,6 @@ > FunctionTemplate->setInvalidDecl(); > return FunctionTemplate; > } > - CheckClassMemberNameAttributes(*this, NewFD); > } > > MarkUnusedFileScopedDecl(NewFD); > > Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=124087&r1=124086&r2=124087&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Sun Jan 23 15:33:18 2011 > @@ -2438,82 +2438,6 @@ > } > > //===----------------------------------------------------------------------===// > -// C++0x member checking attributes > -//===----------------------------------------------------------------------===// > - > -static void HandleBaseCheckAttr(Decl *d, const AttributeList &Attr, Sema &S) > { > - if (Attr.getNumArgs() != 0) { > - S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0; > - return; > - } > - > - if (!isa<CXXRecordDecl>(d)) { > - S.Diag(Attr.getLoc(), > - Attr.isCXX0XAttribute() ? diag::err_attribute_wrong_decl_type > - : diag::warn_attribute_wrong_decl_type) > - << Attr.getName() << 9 /*class*/; > - return; > - } > - > - if (d->getAttr<BaseCheckAttr>()) { > - S.Diag(Attr.getLoc(), diag::err_repeat_attribute) << "base_check"; > - return; > - } > - > - d->addAttr(::new (S.Context) BaseCheckAttr(Attr.getLoc(), S.Context)); > -} > - > -static void HandleHidingAttr(Decl *d, const AttributeList &Attr, Sema &S) { > - if (Attr.getNumArgs() != 0) { > - S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0; > - return; > - } > - > - if (!isa<RecordDecl>(d->getDeclContext())) { > - // FIXME: It's not the type that's the problem > - S.Diag(Attr.getLoc(), > - Attr.isCXX0XAttribute() ? diag::err_attribute_wrong_decl_type > - : diag::warn_attribute_wrong_decl_type) > - << Attr.getName() << 11 /*member*/; > - return; > - } > - > - // FIXME: Conform to C++0x redeclaration rules. > - > - if (d->getAttr<HidingAttr>()) { > - S.Diag(Attr.getLoc(), diag::err_repeat_attribute) << "hiding"; > - return; > - } > - > - d->addAttr(::new (S.Context) HidingAttr(Attr.getLoc(), S.Context)); > -} > - > -static void HandleOverrideAttr(Decl *d, const AttributeList &Attr, Sema &S) { > - if (Attr.getNumArgs() != 0) { > - S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0; > - return; > - } > - > - if (!isa<CXXMethodDecl>(d) || !cast<CXXMethodDecl>(d)->isVirtual()) { > - // FIXME: It's not the type that's the problem > - S.Diag(Attr.getLoc(), > - Attr.isCXX0XAttribute() ? diag::err_attribute_wrong_decl_type > - : diag::warn_attribute_wrong_decl_type) > - << Attr.getName() << 10 /*virtual method*/; > - return; > - } > - > - // FIXME: Conform to C++0x redeclaration rules. > - > - if (d->getAttr<OverrideAttr>()) { > - S.Diag(Attr.getLoc(), diag::err_repeat_attribute) << "override"; > - return; > - } > - > - d->addAttr(::new (S.Context) OverrideAttr(Attr.getLoc(), S.Context)); > -} > - > -//===----------------------------------------------------------------------===// > // Checker-specific attribute handlers. > //===----------------------------------------------------------------------===// > > @@ -2672,7 +2596,6 @@ > case AttributeList::AT_analyzer_noreturn: > HandleAnalyzerNoReturnAttr (D, Attr, S); break; > case AttributeList::AT_annotate: HandleAnnotateAttr (D, Attr, S); > break; > - case AttributeList::AT_base_check: HandleBaseCheckAttr (D, Attr, S); > break; > case AttributeList::AT_carries_dependency: > HandleDependencyAttr (D, Attr, S); > break; > case AttributeList::AT_common: HandleCommonAttr (D, Attr, S); > break; > @@ -2687,7 +2610,6 @@ > case AttributeList::AT_format_arg: HandleFormatArgAttr (D, Attr, S); > break; > case AttributeList::AT_global: HandleGlobalAttr (D, Attr, S); > break; > case AttributeList::AT_gnu_inline: HandleGNUInlineAttr (D, Attr, S); > break; > - case AttributeList::AT_hiding: HandleHidingAttr (D, Attr, S); > break; > case AttributeList::AT_launch_bounds: > HandleLaunchBoundsAttr(D, Attr, S); > break; > @@ -2703,7 +2625,6 @@ > case AttributeList::AT_naked: HandleNakedAttr (D, Attr, S); > break; > case AttributeList::AT_noreturn: HandleNoReturnAttr (D, Attr, S); > break; > case AttributeList::AT_nothrow: HandleNothrowAttr (D, Attr, S); > break; > - case AttributeList::AT_override: HandleOverrideAttr (D, Attr, S); > break; > case AttributeList::AT_shared: HandleSharedAttr (D, Attr, S); > break; > case AttributeList::AT_vecreturn: HandleVecReturnAttr (D, Attr, S); > break; > > > Modified: cfe/trunk/test/SemaCXX/attr-cxx0x.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-cxx0x.cpp?rev=124087&r1=124086&r2=124087&view=diff > ============================================================================== > --- cfe/trunk/test/SemaCXX/attr-cxx0x.cpp (original) > +++ cfe/trunk/test/SemaCXX/attr-cxx0x.cpp Sun Jan 23 15:33:18 2011 > @@ -14,15 +14,3 @@ > static_assert(alignof(align_multiple) == 8, "l's alignment is wrong"); > static_assert(alignof(align_member) == 8, "quuux's alignment is wrong"); > static_assert(sizeof(align_member) == 8, "quuux's size is wrong"); > - > -int bc_fail [[base_check]]; // expected-error {{'base_check' attribute only > applies to class types}} > -int hiding_fail [[hiding]]; // expected-error {{'hiding' attribute only > applies to member types}} > -int override_fail [[override]]; // expected-error {{'override' attribute > only applies to virtual method types}} > - > -struct base { > - virtual void function(); > - virtual void other_function(); > -}; > - > -struct [[base_check, base_check]] bc : base { // expected-error > {{'base_check' attribute cannot be repeated}} > -}; > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
