On Tue, Nov 28, 2017 at 01:27:54PM -0500, Nathan Sidwell wrote: > --- tree.c (revision 255202) > +++ tree.c (working copy) > - /* We need to create a name, since complex is a fundamental type. */ > - if (!TYPE_NAME (t) && named) > + /* We need to create a name, since complex is a fundamental type. */ > + if (named) > + { > + const char *name = NULL; > + > + if (TREE_TYPE (t) == char_type_node) > + name = "complex char"; > + else if (TREE_TYPE (t) == signed_char_type_node) > + name = "complex signed char"; > + else if (TREE_TYPE (t) == unsigned_char_type_node) > + name = "complex unsigned char"; > + else if (TREE_TYPE (t) == short_integer_type_node) > + name = "complex short int"; > + else if (TREE_TYPE (t) == short_unsigned_type_node) > + name = "complex short unsigned int"; > + else if (TREE_TYPE (t) == integer_type_node) > + name = "complex int"; > + else if (TREE_TYPE (t) == unsigned_type_node) > + name = "complex unsigned int"; > + else if (TREE_TYPE (t) == long_integer_type_node) > + name = "complex long int"; > + else if (TREE_TYPE (t) == long_unsigned_type_node) > + name = "complex long unsigned int"; > + else if (TREE_TYPE (t) == long_long_integer_type_node) > + name = "complex long long int"; > + else if (TREE_TYPE (t) == long_long_unsigned_type_node) > + name = "complex long long unsigned int"; > + > + if (name != NULL) > + TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL, > + get_identifier (name), t); > + }
Are you sure nothing can build_complex_type before build_common_tree_nodes is called and builds those? If that would happen, we'd fail to add names with your patch, while we'd add them before. The addition of TYPE_NAME looks orthogonal to the TYPE_CANONICAL handling and type hashing. I must also say I'm surprised that the recursive build_complex_type call passes in named too, but as it does type comparison by pointers, perhaps that's ok. Otherwise LGTM. Jakub