diff options
author | Alex Lorenz <arphaman@gmail.com> | 2017-04-18 10:46:41 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2017-04-18 10:46:41 +0000 |
commit | 7844d0af188cb376ec177cb1fb4bcb24272dc32b (patch) | |
tree | c6c244c42a2d72b62f4085cb2d7e1bc5ddcb48d4 /include/clang | |
parent | df381a38cfc0018e459897639364fcfe7adf7d11 (diff) |
Revert r300539 - Add #pragma clang attribute
Some tests fail on the Windows buildbots. I will have to investigate more.
This commit reverts r300539, r300540 and r300542.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@300543 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang')
-rw-r--r-- | include/clang/Basic/Attr.td | 109 | ||||
-rw-r--r-- | include/clang/Basic/AttrSubjectMatchRules.h | 46 | ||||
-rw-r--r-- | include/clang/Basic/CMakeLists.txt | 5 | ||||
-rw-r--r-- | include/clang/Basic/DiagnosticGroups.td | 4 | ||||
-rw-r--r-- | include/clang/Basic/DiagnosticParseKinds.td | 37 | ||||
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 19 | ||||
-rw-r--r-- | include/clang/Basic/TokenKinds.def | 3 | ||||
-rw-r--r-- | include/clang/Parse/CMakeLists.txt | 6 | ||||
-rw-r--r-- | include/clang/Parse/Parser.h | 7 | ||||
-rw-r--r-- | include/clang/Sema/AttributeList.h | 8 | ||||
-rw-r--r-- | include/clang/Sema/Sema.h | 32 |
11 files changed, 1 insertions, 275 deletions
diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index bf62408db2..c5d2c7fc61 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -248,8 +248,6 @@ def COnly : LangOpt<"CPlusPlus", 1>; def CPlusPlus : LangOpt<"CPlusPlus">; def OpenCL : LangOpt<"OpenCL">; def RenderScript : LangOpt<"RenderScript">; -def ObjC : LangOpt<"ObjC1">; -def BlocksSupported : LangOpt<"Blocks">; // Defines targets for target-specific attributes. The list of strings should // specify architectures for which the target applies, based off the ArchType @@ -272,102 +270,6 @@ def TargetMicrosoftCXXABI : TargetArch<["x86", "x86_64", "arm", "thumb"]> { let CXXABIs = ["Microsoft"]; } -// Attribute subject match rules that are used for #pragma clang attribute. -// -// A instance of AttrSubjectMatcherRule represents an individual match rule. -// An individual match rule can correspond to a number of different attribute -// subjects, e.g. "record" matching rule corresponds to the Record and -// CXXRecord attribute subjects. -// -// Match rules are used in the subject list of the #pragma clang attribute. -// Match rules can have sub-match rules that are instances of -// AttrSubjectMatcherSubRule. A sub-match rule can correspond to a number -// of different attribute subjects, and it can have a negated spelling as well. -// For example, "variable(unless(is_parameter))" matching rule corresponds to -// the NonParmVar attribute subject. -class AttrSubjectMatcherSubRule<string name, list<AttrSubject> subjects, - bit negated = 0> { - string Name = name; - list<AttrSubject> Subjects = subjects; - bit Negated = negated; - // Lists language options, one of which is required to be true for the - // attribute to be applicable. If empty, the language options are taken - // from the parent matcher rule. - list<LangOpt> LangOpts = []; -} -class AttrSubjectMatcherRule<string name, list<AttrSubject> subjects, - list<AttrSubjectMatcherSubRule> subrules = []> { - string Name = name; - list<AttrSubject> Subjects = subjects; - list<AttrSubjectMatcherSubRule> Constraints = subrules; - // Lists language options, one of which is required to be true for the - // attribute to be applicable. If empty, no language options are required. - list<LangOpt> LangOpts = []; -} - -// function(is_member) -def SubRuleForCXXMethod : AttrSubjectMatcherSubRule<"is_member", [CXXMethod]> { - let LangOpts = [CPlusPlus]; -} -def SubjectMatcherForFunction : AttrSubjectMatcherRule<"function", [Function], [ - SubRuleForCXXMethod -]>; -// hasType is abstract, it should be used with one of the sub-rules. -def SubjectMatcherForType : AttrSubjectMatcherRule<"hasType", [], [ - AttrSubjectMatcherSubRule<"functionType", [FunctionLike]> - - // FIXME: There's a matcher ambiguity with objc methods and blocks since - // functionType excludes them but functionProtoType includes them. - // AttrSubjectMatcherSubRule<"functionProtoType", [HasFunctionProto]> -]>; -def SubjectMatcherForTypedef : AttrSubjectMatcherRule<"type_alias", - [TypedefName]>; -def SubjectMatcherForRecord : AttrSubjectMatcherRule<"record", [Record, - CXXRecord], [ - // unless(is_union) - AttrSubjectMatcherSubRule<"is_union", [Struct], 1> -]>; -def SubjectMatcherForEnum : AttrSubjectMatcherRule<"enum", [Enum]>; -def SubjectMatcherForEnumConstant : AttrSubjectMatcherRule<"enum_constant", - [EnumConstant]>; -def SubjectMatcherForVar : AttrSubjectMatcherRule<"variable", [Var], [ - AttrSubjectMatcherSubRule<"is_thread_local", [TLSVar]>, - AttrSubjectMatcherSubRule<"is_global", [GlobalVar]>, - AttrSubjectMatcherSubRule<"is_parameter", [ParmVar]>, - // unless(is_parameter) - AttrSubjectMatcherSubRule<"is_parameter", [NonParmVar], 1> -]>; -def SubjectMatcherForField : AttrSubjectMatcherRule<"field", [Field]>; -def SubjectMatcherForNamespace : AttrSubjectMatcherRule<"namespace", - [Namespace]> { - let LangOpts = [CPlusPlus]; -} -def SubjectMatcherForObjCInterface : AttrSubjectMatcherRule<"objc_interface", - [ObjCInterface]> { - let LangOpts = [ObjC]; -} -def SubjectMatcherForObjCProtocol : AttrSubjectMatcherRule<"objc_protocol", - [ObjCProtocol]> { - let LangOpts = [ObjC]; -} -def SubjectMatcherForObjCCategory : AttrSubjectMatcherRule<"objc_category", - [ObjCCategory]> { - let LangOpts = [ObjC]; -} -def SubjectMatcherForObjCMethod : AttrSubjectMatcherRule<"objc_method", - [ObjCMethod], [ - AttrSubjectMatcherSubRule<"is_instance", [ObjCInstanceMethod]> -]> { - let LangOpts = [ObjC]; -} -def SubjectMatcherForObjCProperty : AttrSubjectMatcherRule<"objc_property", - [ObjCProperty]> { - let LangOpts = [ObjC]; -} -def SubjectMatcherForBlock : AttrSubjectMatcherRule<"block", [Block]> { - let LangOpts = [BlocksSupported]; -} - class Attr { // The various ways in which an attribute can be spelled in source list<Spelling> Spellings; @@ -403,14 +305,6 @@ class Attr { // Set to true if this attribute meaningful when applied to or inherited // in a class template definition. bit MeaningfulToClassTemplateDefinition = 0; - // Set to true if this attribute can be used with '#pragma clang attribute'. - // By default, when this value is false, an attribute is supported by the - // '#pragma clang attribute' only when: - // - It has documentation. - // - It has a subject list whose subjects can be represented using subject - // match rules. - // - It has GNU/CXX11 spelling and doesn't require delayed parsing. - bit ForcePragmaAttributeSupport = 0; // Lists language options, one of which is required to be true for the // attribute to be applicable. If empty, no language options are required. list<LangOpt> LangOpts = []; @@ -584,9 +478,6 @@ def AnalyzerNoReturn : InheritableAttr { def Annotate : InheritableParamAttr { let Spellings = [GNU<"annotate">]; let Args = [StringArgument<"Annotation">]; - // Ensure that the annotate attribute can be used with - // '#pragma clang attribute' even though it has no subject list. - let ForcePragmaAttributeSupport = 1; let Documentation = [Undocumented]; } diff --git a/include/clang/Basic/AttrSubjectMatchRules.h b/include/clang/Basic/AttrSubjectMatchRules.h deleted file mode 100644 index 955f495ad6..0000000000 --- a/include/clang/Basic/AttrSubjectMatchRules.h +++ /dev/null @@ -1,46 +0,0 @@ -//===-- AttrSubjectMatchRules.h - Attribute subject match rules -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_BASIC_ATTR_SUBJECT_MATCH_RULES_H -#define LLVM_CLANG_BASIC_ATTR_SUBJECT_MATCH_RULES_H - -#include "clang/Basic/SourceLocation.h" -#include "llvm/ADT/DenseMap.h" - -namespace clang { -namespace attr { - -/// \brief A list of all the recognized kinds of attributes. -enum SubjectMatchRule { -#define ATTR_MATCH_RULE(X, Spelling, IsAbstract) X, -#include "clang/Basic/AttrSubMatchRulesList.inc" -}; - -const char *getSubjectMatchRuleSpelling(SubjectMatchRule Rule); - -using ParsedSubjectMatchRuleSet = llvm::DenseMap<SubjectMatchRule, SourceRange>; - -} // end namespace attr -} // end namespace clang - -namespace llvm { - -template <> -struct DenseMapInfo<clang::attr::SubjectMatchRule> : DenseMapInfo<int> { - static inline clang::attr::SubjectMatchRule getEmptyKey() { - return (clang::attr::SubjectMatchRule)DenseMapInfo<int>::getEmptyKey(); - } - static inline clang::attr::SubjectMatchRule getTombstoneKey() { - return (clang::attr::SubjectMatchRule)DenseMapInfo<int>::getTombstoneKey(); - } -}; - -} // end namespace llvm - -#endif diff --git a/include/clang/Basic/CMakeLists.txt b/include/clang/Basic/CMakeLists.txt index 3e0fb8728c..e4929b5b52 100644 --- a/include/clang/Basic/CMakeLists.txt +++ b/include/clang/Basic/CMakeLists.txt @@ -28,11 +28,6 @@ clang_tablegen(AttrList.inc -gen-clang-attr-list SOURCE Attr.td TARGET ClangAttrList) -clang_tablegen(AttrSubMatchRulesList.inc -gen-clang-attr-subject-match-rule-list - -I ${CMAKE_CURRENT_SOURCE_DIR}/../../ - SOURCE Attr.td - TARGET ClangAttrSubjectMatchRuleList) - clang_tablegen(AttrHasAttributeImpl.inc -gen-clang-attr-has-attribute-impl -I ${CMAKE_CURRENT_SOURCE_DIR}/../../ SOURCE Attr.td diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td index 4cde1c81fd..4bcf3be0a8 100644 --- a/include/clang/Basic/DiagnosticGroups.td +++ b/include/clang/Basic/DiagnosticGroups.td @@ -461,9 +461,7 @@ def Uninitialized : DiagGroup<"uninitialized", [UninitializedSometimes, def IgnoredPragmaIntrinsic : DiagGroup<"ignored-pragma-intrinsic">; def UnknownPragmas : DiagGroup<"unknown-pragmas">; def IgnoredPragmas : DiagGroup<"ignored-pragmas", [IgnoredPragmaIntrinsic]>; -def PragmaClangAttribute : DiagGroup<"pragma-clang-attribute">; -def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas, - PragmaClangAttribute]>; +def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas]>; def UnknownWarningOption : DiagGroup<"unknown-warning-option">; def NSobjectAttribute : DiagGroup<"NSObject-attribute">; def IndependentClassAttribute : DiagGroup<"IndependentClass-attribute">; diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index d95e43c10c..aebf8a9f35 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -979,43 +979,6 @@ def err_pragma_optimize_invalid_argument : Error< "expected 'on' or 'off'">; def err_pragma_optimize_extra_argument : Error< "unexpected extra argument '%0' to '#pragma clang optimize'">; -// - #pragma clang attribute -def err_pragma_attribute_expected_push_pop : Error< - "expected 'push' or 'pop' after '#pragma clang attribute'">; -def err_pragma_attribute_invalid_argument : Error< - "unexpected argument '%0' to '#pragma clang attribute'; " - "expected 'push' or 'pop'">; -def err_pragma_attribute_expected_attribute : Error< - "expected an attribute after '('">; -def err_pragma_attribute_expected_attribute_name : Error< - "expected identifier that represents an attribute name">; -def err_pragma_attribute_extra_tokens_after_attribute : Error< - "extra tokens after attribute in a '#pragma clang attribute push'">; -def err_pragma_attribute_unsupported_attribute : Error< - "attribute %0 is not supported by '#pragma clang attribute'">; -def err_pragma_attribute_multiple_attributes : Error< - "more than one attribute specified in '#pragma clang attribute push'">; -def err_pragma_attribute_expected_attribute_syntax : Error< - "expected an attribute that is specified using the GNU, C++11 or '__declspec'" - " syntax">; -def note_pragma_attribute_use_attribute_kw : Note<"use the GNU '__attribute__' " - "syntax">; -def err_pragma_attribute_invalid_subject_set_specifier : Error< - "expected attribute subject set specifier 'apply_to'">; -def err_pragma_attribute_expected_subject_identifier : Error< - "expected an identifier that corresponds to an attribute subject rule">; -def err_pragma_attribute_unknown_subject_rule : Error< - "unknown attribute subject rule '%0'">; -def err_pragma_attribute_expected_subject_sub_identifier : Error< - "expected an identifier that corresponds to an attribute subject matcher " - "sub-rule; '%0' matcher %select{does not support sub-rules|supports the " - "following sub-rules: %2|}1">; -def err_pragma_attribute_unknown_subject_sub_rule : Error< - "%select{invalid use of|unknown}2 attribute subject matcher sub-rule '%0'; " - "'%1' matcher %select{does not support sub-rules|supports the following " - "sub-rules: %3}2">; -def err_pragma_attribute_duplicate_subject : Error< - "duplicate attribute subject matcher '%0'">; def err_opencl_unroll_hint_on_non_loop : Error< "OpenCL only supports 'opencl_unroll_hint' attribute on for, while, and do statements">; diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 3912a85491..8afe61645a 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -750,25 +750,6 @@ def err_pragma_loop_compatibility : Error< def err_pragma_loop_precedes_nonloop : Error< "expected a for, while, or do-while loop to follow '%0'">; -def err_pragma_attribute_matcher_subrule_contradicts_rule : Error< - "redundant attribute subject matcher sub-rule '%0'; '%1' already matches " - "those declarations">; -def err_pragma_attribute_matcher_negated_subrule_contradicts_subrule : Error< - "negated attribute subject matcher sub-rule '%0' contradicts sub-rule '%1'">; -def err_pragma_attribute_invalid_matchers : Error< - "attribute %0 can't be applied to %1">; -def err_pragma_attribute_stack_mismatch : Error< - "'#pragma clang attribute pop' with no matching '#pragma clang attribute push'">; -def warn_pragma_attribute_unused : Warning< - "unused attribute %0 in '#pragma clang attribute push' region">, - InGroup<PragmaClangAttribute>; -def note_pragma_attribute_region_ends_here : Note< - "'#pragma clang attribute push' regions ends here">; -def err_pragma_attribute_no_pop_eof : Error<"unterminated " - "'#pragma clang attribute push' at end of file">; -def note_pragma_attribute_applied_decl_here : Note< - "when applied to this declaration">; - /// Objective-C parser diagnostics def err_duplicate_class_def : Error< "duplicate interface definition for class %0">; diff --git a/include/clang/Basic/TokenKinds.def b/include/clang/Basic/TokenKinds.def index 968b203a38..48e0c33f0e 100644 --- a/include/clang/Basic/TokenKinds.def +++ b/include/clang/Basic/TokenKinds.def @@ -790,9 +790,6 @@ ANNOTATION(pragma_loop_hint) ANNOTATION(pragma_fp) -// Annotation for the attribute pragma directives - #pragma clang attribute ... -ANNOTATION(pragma_attribute) - // Annotations for module import translated from #include etc. ANNOTATION(module_include) ANNOTATION(module_begin) diff --git a/include/clang/Parse/CMakeLists.txt b/include/clang/Parse/CMakeLists.txt index 2cc7e54b3b..ec75f7b96b 100644 --- a/include/clang/Parse/CMakeLists.txt +++ b/include/clang/Parse/CMakeLists.txt @@ -2,9 +2,3 @@ clang_tablegen(AttrParserStringSwitches.inc -gen-clang-attr-parser-string-switch -I ${CMAKE_CURRENT_SOURCE_DIR}/../../ SOURCE ../Basic/Attr.td TARGET ClangAttrParserStringSwitches) - -clang_tablegen(AttrSubMatchRulesParserStringSwitches.inc - -gen-clang-attr-subject-match-rules-parser-string-switches - -I ${CMAKE_CURRENT_SOURCE_DIR}/../../ - SOURCE ../Basic/Attr.td - TARGET ClangAttrSubMatchRulesParserStringSwitches) diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index 8d0935dec1..5f4e5fb4b2 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -184,7 +184,6 @@ class Parser : public CodeCompletionHandler { std::unique_ptr<PragmaHandler> UnrollHintHandler; std::unique_ptr<PragmaHandler> NoUnrollHintHandler; std::unique_ptr<PragmaHandler> FPHandler; - std::unique_ptr<PragmaHandler> AttributePragmaHandler; std::unique_ptr<CommentHandler> CommentSemaHandler; @@ -566,12 +565,6 @@ private: /// #pragma clang loop and #pragma unroll. bool HandlePragmaLoopHint(LoopHint &Hint); - bool ParsePragmaAttributeSubjectMatchRuleSet( - attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, - SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc); - - void HandlePragmaAttribute(); - /// GetLookAheadToken - This peeks ahead N tokens and returns that token /// without consuming any tokens. LookAhead(0) returns 'Tok', LookAhead(1) /// returns the token after Tok, etc. diff --git a/include/clang/Sema/AttributeList.h b/include/clang/Sema/AttributeList.h index f3b042c9ce..7c1678086c 100644 --- a/include/clang/Sema/AttributeList.h +++ b/include/clang/Sema/AttributeList.h @@ -15,7 +15,6 @@ #ifndef LLVM_CLANG_SEMA_ATTRIBUTELIST_H #define LLVM_CLANG_SEMA_ATTRIBUTELIST_H -#include "clang/Basic/AttrSubjectMatchRules.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/TargetInfo.h" #include "clang/Basic/VersionTuple.h" @@ -510,14 +509,9 @@ public: unsigned getMaxArgs() const; bool hasVariadicArg() const; bool diagnoseAppertainsTo(class Sema &S, const Decl *D) const; - bool appliesToDecl(const Decl *D, attr::SubjectMatchRule MatchRule) const; - void getMatchRules(const LangOptions &LangOpts, - SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> - &MatchRules) const; bool diagnoseLangOpts(class Sema &S) const; bool existsInTarget(const TargetInfo &Target) const; bool isKnownToGCC() const; - bool isSupportedByPragmaAttribute() const; /// \brief If the parsed attribute has a semantic equivalent, and it would /// have a semantic Spelling enumeration (due to having semantically-distinct @@ -780,8 +774,6 @@ public: void clear() { list = nullptr; pool.clear(); } AttributeList *getList() const { return list; } - void clearListOnly() { list = nullptr; } - /// Returns a reference to the attribute list. Try not to introduce /// dependencies on this method, it may not be long-lived. AttributeList *&getListRef() { return list; } diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index bd68842c9f..5a3cdfb77c 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -437,20 +437,6 @@ public: /// VisContext - Manages the stack for \#pragma GCC visibility. void *VisContext; // Really a "PragmaVisStack*" - /// \brief This represents the stack of attributes that were pushed by - /// \#pragma clang attribute. - struct PragmaAttributeEntry { - SourceLocation Loc; - AttributeList *Attribute; - SmallVector<attr::SubjectMatchRule, 4> MatchRules; - bool IsUsed; - }; - SmallVector<PragmaAttributeEntry, 2> PragmaAttributeStack; - - /// \brief The declaration that is currently receiving an attribute from the - /// #pragma attribute stack. - const Decl *PragmaAttributeCurrentTargetDecl; - /// \brief This represents the last location of a "#pragma clang optimize off" /// directive if such a directive has not been closed by an "on" yet. If /// optimizations are currently "on", this is set to an invalid location. @@ -7220,13 +7206,9 @@ public: PrintInstantiationStack(); LastEmittedCodeSynthesisContextDepth = CodeSynthesisContexts.size(); } - if (PragmaAttributeCurrentTargetDecl) - PrintPragmaAttributeInstantiationPoint(); } void PrintInstantiationStack(); - void PrintPragmaAttributeInstantiationPoint(); - /// \brief Determines whether we are currently in a context where /// template argument substitution failures are not considered /// errors. @@ -8170,20 +8152,6 @@ public: /// the appropriate attribute. void AddCFAuditedAttribute(Decl *D); - /// \brief Called on well-formed '\#pragma clang attribute push'. - void ActOnPragmaAttributePush(AttributeList &Attribute, - SourceLocation PragmaLoc, - attr::ParsedSubjectMatchRuleSet Rules); - - /// \brief Called on well-formed '\#pragma clang attribute pop'. - void ActOnPragmaAttributePop(SourceLocation PragmaLoc); - - /// \brief Adds the attributes that have been specified using the - /// '\#pragma clang attribute push' directives to the given declaration. - void AddPragmaAttributes(Scope *S, Decl *D); - - void DiagnoseUnterminatedPragmaAttribute(); - /// \brief Called on well formed \#pragma clang optimize. void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc); |