diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index c005fe4..9734df3 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -203,10 +203,11 @@ cp_type_print_method_args (struct type *mtype, char *prefix, char *varstring,
   if (!staticp)
     {
       struct type *domain;
+      struct type *arg0_type = check_typedef (args[0].type);
 
       gdb_assert (nargs > 0);
-      gdb_assert (TYPE_CODE (args[0].type) == TYPE_CODE_PTR);
-      domain = TYPE_TARGET_TYPE (args[0].type);
+      gdb_assert (TYPE_CODE (arg0_type) == TYPE_CODE_PTR);
+      domain = check_typedef (TYPE_TARGET_TYPE (arg0_type));
 
       if (TYPE_CONST (domain))
 	fprintf_filtered (stream, " const");
diff --git a/gdb/p-exp.y b/gdb/p-exp.y
index dff9b97..9b6c0f3 100644
--- a/gdb/p-exp.y
+++ b/gdb/p-exp.y
@@ -285,18 +285,18 @@ exp	:	DECREMENT  '(' exp ')'   %prec UNARY
 	;
 
 exp	:	exp '.' { search_field = 1; } 
-		FIELDNAME 
+		name 
 		/* name */
 			{ write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  write_exp_string ($4); 
 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  search_field = 0; 
-			  if (current_type)
-			    { while (TYPE_CODE (current_type) == TYPE_CODE_PTR)
-				current_type = TYPE_TARGET_TYPE (current_type);
+/*			  if (current_type)
+			    { while (TYPE_CODE (check_typedef (current_type)) == TYPE_CODE_PTR)
+				current_type = check_typedef (TYPE_TARGET_TYPE (current_type));
 			      current_type = lookup_struct_elt_type (
 				current_type, $4.ptr, 0); };
-			 } ; 
+*/			 } ; 
 exp	:	exp '['
 			/* We need to save the current_type value */
 			{ char *arrayname; 
