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?

Reply via email to