This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C PATCH to use is_global_var


On 06/25/2015 06:44 AM, Marek Polacek wrote:
On Wed, Jun 24, 2015 at 05:16:33PM +0000, Joseph Myers wrote:
On Wed, 24 Jun 2015, Marek Polacek wrote:

diff --git gcc/c/c-decl.c gcc/c/c-decl.c
index fc1fdf9..ab54db9 100644
--- gcc/c/c-decl.c
+++ gcc/c/c-decl.c
@@ -2650,9 +2650,8 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
  		  tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
  	  olddecl->decl_with_vis.symtab_node = snode;

-	  if ((DECL_EXTERNAL (olddecl)
-	       || TREE_PUBLIC (olddecl)
-	       || TREE_STATIC (olddecl))
+	  if ((is_global_var (olddecl)
+	       || TREE_PUBLIC (olddecl))
  	      && DECL_SECTION_NAME (newdecl) != NULL)
  	    set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));


At least this case covers both FUNCTION_DECL and VAR_DECL.  If
is_global_var is appropriate for functions as well as variables, I think
it should be renamed (and have its comment updated to explain what it
means for functions).

You raise a good point.  After fair amount of investigating, I don't think
is_global_var is appropriate for functions.  (DECL_EXTERNAL || TREE_STATIC)
for a function is only false for weird cases such as an inline function
definition followed by redeclaring this function with noinline attribute, i.e.:

inline void a (void) {}
void a (void) __attribute__ ((noinline));

void
b ()
{
   a ();
}

is_global_var with a FUNCTION_DECL is only called in tree-ssa-structalias.c
and it seems like a mistake.

So I propose to commit the following patch, which uses is_global_var only
at places where we're dealing with a variable.

Ok for trunk?

2015-06-25  Marek Polacek  <polacek@redhat.com>

	* cilk.c (extract_free_variables): Use is_global_var.

	* c-decl.c: Use is_global_var throughout.
	* c-parser.c: Likewise.
	* c-typeck.c: Likewise.
OK.

jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]