From d7ddbe241a953a4ba9adae1f3a38ade24f9121f0 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 18 Feb 2003 18:07:06 -0800 Subject: [PATCH] c-common.c (handle_used_attribute): Accept static data too. * c-common.c (handle_used_attribute): Accept static data too. * gcc.dg/attr-invalid.c: Allow __used__ on static data. * gcc.dg/attr-used-2.c: New. From-SVN: r63082 --- gcc/ChangeLog | 6 +++++- gcc/c-common.c | 13 ++++++++----- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/attr-invalid.c | 4 ++-- gcc/testsuite/gcc.dg/attr-used-2.c | 11 +++++++++++ 5 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/attr-used-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc6839a6fcf..04b7f814bd4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,8 @@ -003-02-18 Nick Clifton +2003-02-18 Richard Henderson + + * c-common.c (handle_used_attribute): Accept static data too. + +2003-02-18 Nick Clifton Aldy Hernandez * testsuite/gcc.dg/20030218-1.c: New. diff --git a/gcc/c-common.c b/gcc/c-common.c index c78692fd959..b49dc25f43d 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -5415,16 +5415,19 @@ handle_always_inline_attribute (node, name, args, flags, no_add_attrs) struct attribute_spec.handler. */ static tree -handle_used_attribute (node, name, args, flags, no_add_attrs) - tree *node; +handle_used_attribute (pnode, name, args, flags, no_add_attrs) + tree *pnode; tree name; tree args ATTRIBUTE_UNUSED; int flags ATTRIBUTE_UNUSED; bool *no_add_attrs; { - if (TREE_CODE (*node) == FUNCTION_DECL) - TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (*node)) - = TREE_USED (*node) = 1; + tree node = *pnode; + + if (TREE_CODE (node) == FUNCTION_DECL + || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node))) + TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (node)) + = TREE_USED (node) = 1; else { warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 220c69643e4..4c7b8b38e1c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-02-18 Richard Henderson + + * gcc.dg/attr-invalid.c: Allow __used__ on static data. + * gcc.dg/attr-used-2.c: New. + 2003-02-18 Mark Mitchell PR c++/9704 diff --git a/gcc/testsuite/gcc.dg/attr-invalid.c b/gcc/testsuite/gcc.dg/attr-invalid.c index a999c267c3a..9cb64541548 100644 --- a/gcc/testsuite/gcc.dg/attr-invalid.c +++ b/gcc/testsuite/gcc.dg/attr-invalid.c @@ -43,7 +43,7 @@ struct ATSYM(struct) { char dummy ATTR; /* { dg-warning "attribute ignored" "" } */ } ATTR; /* { dg-warning "does not apply to types" "" } */ -int ATSYM(var) ATTR; /* { dg-warning "attribute ignored" "" } */ +int ATSYM(var) ATTR; int ATSYM(fn_knrarg) (arg) int arg ATTR; /* { dg-warning "attribute ignored" "" } */ @@ -52,7 +52,7 @@ int ATSYM(fn_knrarg) (arg) int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */ int ATSYM(fn_vars) (void) { - static int svar ATTR; /* { dg-warning "attribute ignored" "" } */ + static int svar ATTR; auto int lvar ATTR; /* { dg-warning "attribute ignored" "" } */ return 0; } diff --git a/gcc/testsuite/gcc.dg/attr-used-2.c b/gcc/testsuite/gcc.dg/attr-used-2.c new file mode 100644 index 00000000000..f78b94b53a9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-used-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-Wall -O2" } */ + +static int xyzzy __attribute__((__used__)) = 1; + +void foo() +{ + int x __attribute__((__used__)); /* { dg-warning "attribute ignored|unused variable" } */ +} + +/* { dg-final { scan-assembler "xyzzy" } } */ -- 2.30.2