summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-08-04 17:48:20 +0300
committerAndrei Karas <akaras@inbox.ru>2015-08-04 17:48:20 +0300
commit5ed02db7e12dd4f373aeb07baf535c08a5f99fcf (patch)
tree08b4e0ef78afd1756ae9e7f4431ef944dbf51d5d /src
parent3d8def9ea0586228321241cc7b2a04ee3ee792b1 (diff)
downloadparanucker-5ed02db7e12dd4f373aeb07baf535c08a5f99fcf.tar.gz
paranucker-5ed02db7e12dd4f373aeb07baf535c08a5f99fcf.tar.bz2
paranucker-5ed02db7e12dd4f373aeb07baf535c08a5f99fcf.tar.xz
paranucker-5ed02db7e12dd4f373aeb07baf535c08a5f99fcf.zip
Add plugin attribute 'nonnullpointer' for marking variables what should be not checked for null.
Diffstat (limited to 'src')
-rw-r--r--src/plugin.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/plugin.cpp b/src/plugin.cpp
index cf611f5..a4f7b66 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -40,6 +40,9 @@ Command command = Command::DetectNullPointers;
std::map<tree, Node*> foundNodesMap;
std::map<Node*, Node*> updateNodesMap;
+// copy/paste from plugin.h look like again guard header issue.
+extern void register_attribute (const struct attribute_spec *attr);
+
Command operator |(const Command &cmd1, const Command &cmd2)
{
return static_cast<Command>(static_cast<int>(cmd1)
@@ -60,6 +63,26 @@ static void pre_generic(void *gcc_data,
Generic::cleanAllNodes(node);
}
+static tree handle_nonnull_attribute(tree *node A_UNUSED,
+ tree name A_UNUSED,
+ tree args A_UNUSED,
+ int flags A_UNUSED,
+ bool *no_add_attrs A_UNUSED)
+{
+ return NULL_TREE;
+}
+
+static struct attribute_spec nonnull_attr =
+{
+ "nonnullpointer", 0, 0, true, false, false, handle_nonnull_attribute, false
+};
+
+static void register_attributes(void *event_data A_UNUSED,
+ void *data A_UNUSED)
+{
+ register_attribute (&nonnull_attr);
+}
+
int plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version)
{
@@ -123,5 +146,10 @@ int plugin_init (struct plugin_name_args *plugin_info,
&pre_generic,
0);
+ register_callback(plugin_info->base_name,
+ PLUGIN_ATTRIBUTES,
+ &register_attributes,
+ 0);
+
return 0;
}