C++ has a much more predictable semantics for inline functions, so we no longer need to define them (especially in header files) with the 'static' specifier. The upshot is that when the compiler fails to inline a call in a given translation unit, it keeps only one copy in the entire program, instead of multiple copies (as the 'static' specifier would have implied.)
With this patch, there is 2K reduction in size for cc1plus. Applying to trunk. Tested on an x86_64-suse-linux. -- Gaby 2013-03-28 Gabriel Dos Reis <g...@integrable-solutions.net> * cp-tree.h (next_aggr_init_expr_arg): Remove static specifier. (first_aggr_init_expr): Likewise. (more_aggr_init_expr_args_p): Likewise. (type_of_this_parm): Likewise. (class_of_this_parm): Likewise. * name-lookup.h (get_global_value_if_present): Likewise. (is_typename_at_global_scope): Likewise. Index: cp-tree.h =================================================================== --- cp-tree.h (revision 197194) +++ cp-tree.h (working copy) @@ -3026,7 +3026,7 @@ /* Initialize the abstract argument list iterator object ITER with the arguments from AGGR_INIT_EXPR node EXP. */ -static inline void +inline void init_aggr_init_expr_arg_iterator (tree exp, aggr_init_expr_arg_iterator *iter) { @@ -3037,7 +3037,7 @@ /* Return the next argument from abstract argument list iterator object ITER, and advance its state. Return NULL_TREE if there are no more arguments. */ -static inline tree +inline tree next_aggr_init_expr_arg (aggr_init_expr_arg_iterator *iter) { tree result; @@ -3052,7 +3052,7 @@ past and return the first argument. Useful in for expressions, e.g. for (arg = first_aggr_init_expr_arg (exp, &iter); arg; arg = next_aggr_init_expr_arg (&iter)) */ -static inline tree +inline tree first_aggr_init_expr_arg (tree exp, aggr_init_expr_arg_iterator *iter) { init_aggr_init_expr_arg_iterator (exp, iter); @@ -3061,7 +3061,7 @@ /* Test whether there are more arguments in abstract argument list iterator ITER, without changing its state. */ -static inline bool +inline bool more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter) { return (iter->i < iter->n); @@ -4905,7 +4905,7 @@ /* Return the type of the `this' parameter of FNTYPE. */ -static inline tree +inline tree type_of_this_parm (const_tree fntype) { function_args_iterator iter; @@ -4916,7 +4916,7 @@ /* Return the class of the `this' parameter of FNTYPE. */ -static inline tree +inline tree class_of_this_parm (const_tree fntype) { return TREE_TYPE (type_of_this_parm (fntype)); Index: name-lookup.h =================================================================== --- name-lookup.h (revision 197194) +++ name-lookup.h (working copy) @@ -347,7 +347,7 @@ /* Set *DECL to the (non-hidden) declaration for ID at global scope, if present and return true; otherwise return false. */ -static inline bool +inline bool get_global_value_if_present (tree id, tree *decl) { tree global_value = namespace_binding (id, global_namespace); @@ -358,7 +358,7 @@ /* True is the binding of IDENTIFIER at global scope names a type. */ -static inline bool +inline bool is_typename_at_global_scope (tree id) { tree global_value = namespace_binding (id, global_namespace);