Index: GCC/gcc/cp/xml.c
===================================================================
RCS file: /cvsroot/GCC_XML/gccxml/GCC/gcc/cp/xml.c,v
retrieving revision 1.132
diff -u -p -r1.132 xml.c
--- GCC/gcc/cp/xml.c	26 Jan 2010 18:45:42 -0000	1.132
+++ GCC/gcc/cp/xml.c	23 Apr 2010 15:10:47 -0000
@@ -3071,6 +3071,7 @@ xml_find_template_parm (tree t)
     case CONST_DECL: return 1;
     case VAR_DECL: return 1;
     case FUNCTION_DECL: return 1;
+    case OVERLOAD: return 1;
     case FIELD_DECL: return 1;
 
     /* A template deferred scoped lookup.  */
@@ -3112,6 +3113,7 @@ xml_find_template_parm (tree t)
       }
     case REFERENCE_TYPE: return xml_find_template_parm (TREE_TYPE (t));
     case INDIRECT_REF: return xml_find_template_parm (TREE_TYPE (t));
+    case COMPONENT_REF: return xml_find_template_parm (TREE_TYPE (t));
     case POINTER_TYPE: return xml_find_template_parm (TREE_TYPE (t));
     case ARRAY_TYPE: return xml_find_template_parm (TREE_TYPE (t));
     case OFFSET_TYPE:
@@ -3194,6 +3196,48 @@ xml_find_template_parm (tree t)
     /* Other types that have no nested types.  */
     case INTEGER_CST: return 0;
     case STATIC_CAST_EXPR: return 0;
+    case CALL_EXPR:
+    {
+      tree func_expr = TREE_OPERAND (t, 0);
+      gcc_assert(func_expr);
+      if (xml_find_template_parm(func_expr))
+      {
+        return 1;
+      }
+      tree arg_expr = TREE_OPERAND (t, 1);
+      while (arg_expr)
+      {
+        if (xml_find_template_parm(arg_expr))
+        {
+          return 1;
+        }
+        arg_expr = TREE_CHAIN (arg_expr);
+      }
+      return 0;
+    }
+    case TEMPLATE_ID_EXPR:
+    {
+      tree template_expr = TREE_OPERAND (t, 0);
+      gcc_assert(template_expr);
+      if (xml_find_template_parm(template_expr))
+      {
+        return 1;
+      }
+      tree argument_vec = TREE_OPERAND (t, 1);
+      if (argument_vec)
+      {
+        int i;
+        for (i = 0; i < TREE_VEC_LENGTH(argument_vec); ++i)
+        {
+          tree argument_expr = TREE_VEC_ELT(argument_vec, i);
+          if (xml_find_template_parm(argument_expr))
+          {
+            return 1;
+          }
+        }
+      }
+      return 0;
+    }
     default:
       fprintf(stderr, "xml_find_template_parm encountered unsupported type %s\n",
               tree_code_name[TREE_CODE (t)]);
