aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-family
diff options
context:
space:
mode:
authorLubos Lunak <l.lunak@suse.cz>2013-07-14 01:16:18 +0200
committerJason Merrill <jason@gcc.gnu.org>2013-07-13 19:16:18 -0400
commit2a99e5e633fb1faddeb8c8ce7b1429dedebb033b (patch)
tree0170fc55d95b627aec9918256ba3cf861f269fd3 /gcc/c-family
parent286e8fc16fb582ee1cb3869aafb87309542a55ec (diff)
downloadgcc-2a99e5e633fb1faddeb8c8ce7b1429dedebb033b.zip
gcc-2a99e5e633fb1faddeb8c8ce7b1429dedebb033b.tar.gz
gcc-2a99e5e633fb1faddeb8c8ce7b1429dedebb033b.tar.bz2
re PR c++/55203 (No unused warning for variables of non-trivial types)
PR c++/55203 c-family/ * c-common.c (c_common_attribute_table): Add warn_unused. (handle_warn_unused_attribute): New. cp/ * init.c (build_aggr_init): Check for warn_unused attribute. * decl.c (poplevel): Likewise. From-SVN: r200941
Diffstat (limited to 'gcc/c-family')
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-common.c24
2 files changed, 30 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 5aeb338..27b22a1 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2013-07-13 Lubos Lunak <l.lunak@suse.cz>
+
+ PR c++/55203
+ * c-common.c (c_common_attribute_table): Add warn_unused.
+ (handle_warn_unused_attribute): New.
+
2013-07-10 Jakub Jelinek <jakub@redhat.com>
* c-ppoutput.c (scan_translation_unit): Call account_for_newlines
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 61300cd..970f9f2 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -368,6 +368,7 @@ static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
static tree ignore_attribute (tree *, tree, tree, int, bool *);
static tree handle_no_split_stack_attribute (tree *, tree, tree, int, bool *);
static tree handle_fnspec_attribute (tree *, tree, tree, int, bool *);
+static tree handle_warn_unused_attribute (tree *, tree, tree, int, bool *);
static void check_function_nonnull (tree, int, tree *);
static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
@@ -738,6 +739,8 @@ const struct attribute_spec c_common_attribute_table[] =
The name contains space to prevent its usage in source code. */
{ "fn spec", 1, 1, false, true, true,
handle_fnspec_attribute, false },
+ { "warn_unused", 0, 0, false, false, false,
+ handle_warn_unused_attribute, false },
{ NULL, 0, 0, false, false, false, NULL, false }
};
@@ -7950,6 +7953,27 @@ handle_fnspec_attribute (tree *node ATTRIBUTE_UNUSED, tree ARG_UNUSED (name),
return NULL_TREE;
}
+/* Handle a "warn_unused" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_warn_unused_attribute (tree *node, tree name,
+ tree args ATTRIBUTE_UNUSED,
+ int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
+{
+ if (TYPE_P (*node))
+ /* Do nothing else, just set the attribute. We'll get at
+ it later with lookup_attribute. */
+ ;
+ else
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
+
+ return NULL_TREE;
+}
+
/* Handle a "returns_twice" attribute; arguments as in
struct attribute_spec.handler. */