aboutsummaryrefslogtreecommitdiff
path: root/include/clang
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-06-18 21:44:06 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-06-18 21:44:06 +0000
commit521f12d3dfdbb0e93d1bcb503d074e67acdc489c (patch)
treedbf9c597eb8e4d5ead31fd162f5296ed356e0bb0 /include/clang
parent8e19890c329279c5ac35ab71a35423d429d80165 (diff)
Implements Sema part of init_priority(priority) attribute
(radar 8076356) - wip. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106322 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang')
-rw-r--r--include/clang/AST/Attr.h17
-rw-r--r--include/clang/Basic/Attr.td5
-rw-r--r--include/clang/Basic/DiagnosticSemaKinds.td3
-rw-r--r--include/clang/Parse/AttributeList.h1
4 files changed, 26 insertions, 0 deletions
diff --git a/include/clang/AST/Attr.h b/include/clang/AST/Attr.h
index 531c74c700..b67b53b10e 100644
--- a/include/clang/AST/Attr.h
+++ b/include/clang/AST/Attr.h
@@ -515,6 +515,23 @@ public:
static bool classof(const ReqdWorkGroupSizeAttr *A) { return true; }
};
+class InitPriorityAttr : public Attr {
+ unsigned Priority;
+public:
+ InitPriorityAttr(unsigned priority)
+ : Attr(attr::InitPriority), Priority(priority) {}
+
+ virtual void Destroy(ASTContext &C) { Attr::Destroy(C); }
+
+ unsigned getPriority() const { return Priority; }
+
+ virtual Attr *clone(ASTContext &C) const;
+
+ static bool classof(const Attr *A)
+ { return A->getKind() == attr::InitPriority; }
+ static bool classof(const InitPriorityAttr *A) { return true; }
+};
+
// Checker-specific attributes.
DEF_SIMPLE_ATTR(CFReturnsNotRetained);
DEF_SIMPLE_ATTR(CFReturnsRetained);
diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td
index c4f02a0c1b..4b85bb20db 100644
--- a/include/clang/Basic/Attr.td
+++ b/include/clang/Basic/Attr.td
@@ -311,6 +311,11 @@ def ReqdWorkGroupSize : Attr {
UnsignedIntArgument<"ZDim">];
}
+def InitPriority : Attr {
+ let Spellings = ["init_priority"];
+ let Args = [UnsignedIntArgument<"Priority">];
+}
+
def Section : Attr {
let Spellings = ["section"];
let Args = [StringArgument<"Name">];
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td
index 8f9a8f9974..f736ab55fd 100644
--- a/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/include/clang/Basic/DiagnosticSemaKinds.td
@@ -815,6 +815,9 @@ def err_attribute_missing_parameter_name : Error<
def err_attribute_invalid_vector_type : Error<"invalid vector type %0">;
def err_attribute_argument_not_int : Error<
"'%0' attribute requires integer constant">;
+def err_attribute_argument_outof_range : Error<
+ "init_priority attribute requires integer constant between "
+ "101 and 65535 inclusive">;
def err_attribute_argument_n_not_int : Error<
"'%0' attribute requires parameter %1 to be an integer constant">;
def err_attribute_argument_n_not_string : Error<
diff --git a/include/clang/Parse/AttributeList.h b/include/clang/Parse/AttributeList.h
index 1e6d3ab976..b60a94025e 100644
--- a/include/clang/Parse/AttributeList.h
+++ b/include/clang/Parse/AttributeList.h
@@ -115,6 +115,7 @@ public:
AT_weakref,
AT_weak_import,
AT_reqd_wg_size,
+ AT_init_priority,
IgnoredAttribute,
UnknownAttribute
};