tree 6d8922c7596b7dbf283a9383f6838e0d67dd5aaf
parent e4a421a01ad1fcc4315e530e79272604f3683051
author Ian Lance Taylor <iant@golang.org> 1540595369 -0700
committer Ian Lance Taylor <iant@golang.org> 1540840960 +0000

compiler: pass a single flags argument to Backend::function

This requires this patch to go-gcc.cc:

    Index: go-gcc.cc
    ===================================================================
    --- go-gcc.cc	(revision 264872)
    +++ go-gcc.cc	(working copy)
    @@ -482,9 +482,7 @@ class Gcc_backend : public Backend

       Bfunction*
       function(Btype* fntype, const std::string& name, const std::string& asm_name,
    -           bool is_visible, bool is_declaration, bool is_inlinable,
    -           bool disable_split_stack, bool does_not_return,
    -	   bool in_unique_section, Location);
    +	   unsigned int flags, Location);

       Bstatement*
       function_defer_statement(Bfunction* function, Bexpression* undefer,
    @@ -3047,10 +3045,8 @@ Gcc_backend::label_address(Blabel* label

     Bfunction*
     Gcc_backend::function(Btype* fntype, const std::string& name,
    -                      const std::string& asm_name, bool is_visible,
    -                      bool is_declaration, bool is_inlinable,
    -                      bool disable_split_stack, bool does_not_return,
    -		      bool in_unique_section, Location location)
    +                      const std::string& asm_name, unsigned int flags,
    +		      Location location)
     {
       tree functype = fntype->get_tree();
       if (functype != error_mark_node)
    @@ -3065,9 +3061,9 @@ Gcc_backend::function(Btype* fntype, con
       tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
       if (! asm_name.empty())
	 SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
    -  if (is_visible)
    +  if ((flags & function_is_visible) != 0)
	 TREE_PUBLIC(decl) = 1;
    -  if (is_declaration)
    +  if ((flags & function_is_declaration) != 0)
	 DECL_EXTERNAL(decl) = 1;
       else
	 {
    @@ -3079,16 +3075,16 @@ Gcc_backend::function(Btype* fntype, con
	   DECL_CONTEXT(resdecl) = decl;
	   DECL_RESULT(decl) = resdecl;
	 }
    -  if (!is_inlinable)
    +  if ((flags & function_is_inlinable) == 0)
	 DECL_UNINLINABLE(decl) = 1;
    -  if (disable_split_stack)
    +  if ((flags & function_no_split_stack) != 0)
	 {
	   tree attr = get_identifier ("no_split_stack");
	   DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
	 }
    -  if (does_not_return)
    +  if ((flags & function_does_not_return) != 0)
	 TREE_THIS_VOLATILE(decl) = 1;
    -  if (in_unique_section)
    +  if ((flags & function_in_unique_section) != 0)
	 resolve_unique_section(decl, 0, 1);

       go_preserve_from_gc(decl);

Change-Id: I55359ba1d096fa49c9d8c3587480b3fc27d2f40a
Reviewed-on: https://go-review.googlesource.com/c/145319
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
