On 08/06/2011 06:57 AM, Dodji Seketeli wrote:
@@ -4340,6 +4340,8 @@ c_sizeof_or_alignof_type (location_t loc,
value = fold_convert_loc (loc, size_type_node, value);
gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
+ maybe_record_local_typedef_use (type);
Why is this still needed?
+/* Return TRUE if DECL is declared in the current function. */
+
+bool
+local_decl_p (tree decl)
I don't think we need to work so hard to compare contexts to
current_function_decl; just checking that the decl is in some function
should be enough, i.e. decl_function_context is non-null.
+ static int unused_local_typedefs_warn_count;
This could use a comment.
+/* If T is a typedef variant type or a TYPE_DECL declared locally,
+ mark it as used. */
+
+void
+maybe_record_local_typedef_use (tree t)
Does this still need to handle types? And the meaning of TREE_USED
shouldn't change depending on a warning flag or whether a decl is local
or not; let's just mark all TYPE_DECLs as used.
Seems like we don't need local_decl_p at all; at the definition point,
if we're in a function, a new declaration must be local enough for our
purposes.
+void
+cp_maybe_record_local_typedef_use (tree t)
+{
+ /* If the current function is being instantiated, bail out. */
As above, I think we shouldn't put so many conditions on setting TREE_USED.
@@ -19572,6 +19572,9 @@ cp_parser_lookup_name (cp_parser *parser, tree name,
if (DECL_P (decl))
check_accessibility_of_qualified_id (decl, object_type, parser->scope);
+ cp_maybe_record_local_typedef_use (decl);
+ cp_maybe_record_local_typedef_use (parser->scope);
Why do we need to handle parser->scope? Wasn't it previously looked up?