From: Jason Merrill Date: Thu, 6 Jan 2000 23:54:34 +0000 (-0500) Subject: error.c (dump_decl): operator new, not operatornew. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bff3ce71a12e8244111bc9e349de8cd685053c89;p=gcc.git error.c (dump_decl): operator new, not operatornew. * error.c (dump_decl): operator new, not operatornew. * class.c (field_decl_cmp): A nontype is "greater" than a type. * search.c (lookup_field_1): Look for the last field with the desired name. From-SVN: r31262 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 62a5d70c453..c3a9a97c56b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2000-01-06 Jason Merrill + + * error.c (dump_decl): operator new, not operatornew. + + * class.c (field_decl_cmp): A nontype is "greater" than a type. + * search.c (lookup_field_1): Look for the last field with the + desired name. + 2000-01-05 Nathan Sidwell * decl2.c (lookup_arg_dependent): Deal with FNS not being a @@ -323,7 +331,8 @@ (avoid_overlap): Moved here from tree.c. (build_base_fields): Likewise. (check_bases): New function, split out from finish_base_struct. - (check_bases_and_members): New function, split out from finish_struct_1. + (check_bases_and_members): New function, split out from + finish_struct_1. (struct base_info): Remove cant_have_default_ctor, cant_have_const_ctor, cant_have_asn_ref. (finish_base_struct): Split semantic analysis into check_bases. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index c2ff295be0d..89d687703a4 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1946,7 +1946,8 @@ field_decl_cmp (x, y) const tree *x, *y; { if (DECL_NAME (*x) == DECL_NAME (*y)) - return 0; + /* A nontype is "greater" than a type. */ + return DECL_DECLARES_TYPE_P (*y) - DECL_DECLARES_TYPE_P (*x); if (DECL_NAME (*x) == NULL_TREE) return -1; if (DECL_NAME (*y) == NULL_TREE) diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 46ac51b349c..f76b4da772c 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -951,6 +951,8 @@ dump_decl (t, flags) { const char *name_string = operator_name_string (t); OB_PUTS ("operator"); + if (ISALPHA (name_string[0])) + OB_PUTC (' '); OB_PUTCP (name_string); } else @@ -1282,6 +1284,8 @@ dump_function_name (t, flags) { const char *name_string = operator_name_string (name); OB_PUTS ("operator"); + if (ISALPHA (name_string[0])) + OB_PUTC (' '); OB_PUTCP (name_string); } else diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 28ef1a17ac2..c5ec089c1ee 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -611,7 +611,16 @@ lookup_field_1 (type, name) else if (DECL_NAME (fields[i]) < name) lo = i + 1; else - return fields[i]; + { + /* We might have a nested class and a field with the + same name; we sorted them appropriately via + field_decl_cmp, so just look for the last field with + this name. */ + while (i + 1 < hi + && DECL_NAME (fields[i+1]) == name) + ++i; + return fields[i]; + } } return NULL_TREE; }