go-gcc.cc (Gcc_backend::set_placeholder_struct_type): Use build_distinct_type_copy rather than build_variant_type_copy.
* go-gcc.cc (Gcc_backend::set_placeholder_struct_type): Use build_distinct_type_copy rather than build_variant_type_copy. (Gcc_backend::set_placeholder_array_type): Likewise. (Gcc_backend::named_type): Add special handling for builtin basic types. From-SVN: r182698
This commit is contained in:
parent
dd8d9bff45
commit
11304b7b99
@ -1,10 +1,18 @@
|
|||||||
|
2011-12-27 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
|
* go-gcc.cc (Gcc_backend::set_placeholder_struct_type): Use
|
||||||
|
build_distinct_type_copy rather than build_variant_type_copy.
|
||||||
|
(Gcc_backend::set_placeholder_array_type): Likewise.
|
||||||
|
(Gcc_backend::named_type): Add special handling for builtin
|
||||||
|
basic types.
|
||||||
|
|
||||||
2011-12-22 Ian Lance Taylor <iant@google.com>
|
2011-12-22 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
* go-gcc.cc (set_placeholder_pointer_type): Arrange for the type
|
* go-gcc.cc (Gcc_backend::set_placeholder_pointer_type): Arrange
|
||||||
name to have a DECL_ORIGINAL_TYPE as gcc expects.
|
for the type name to have a DECL_ORIGINAL_TYPE as gcc expects.
|
||||||
(set_placeholder_struct_type): Likewise.
|
(Gcc_backend::set_placeholder_struct_type): Likewise.
|
||||||
(set_placeholder_array_type): Likewise.
|
(Gcc_backend::set_placeholder_array_type): Likewise.
|
||||||
(named_type): Set DECL_ORIGINAL_TYPE.
|
(Gcc_backend::named_type): Set DECL_ORIGINAL_TYPE.
|
||||||
|
|
||||||
2011-12-13 Ian Lance Taylor <iant@google.com>
|
2011-12-13 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
|
@ -663,7 +663,7 @@ Gcc_backend::set_placeholder_struct_type(
|
|||||||
Btype* r = this->fill_in_struct(placeholder, fields);
|
Btype* r = this->fill_in_struct(placeholder, fields);
|
||||||
|
|
||||||
// Build the data structure gcc wants to see for a typedef.
|
// Build the data structure gcc wants to see for a typedef.
|
||||||
tree copy = build_variant_type_copy(t);
|
tree copy = build_distinct_type_copy(t);
|
||||||
TYPE_NAME(copy) = NULL_TREE;
|
TYPE_NAME(copy) = NULL_TREE;
|
||||||
DECL_ORIGINAL_TYPE(TYPE_NAME(t)) = copy;
|
DECL_ORIGINAL_TYPE(TYPE_NAME(t)) = copy;
|
||||||
|
|
||||||
@ -696,7 +696,7 @@ Gcc_backend::set_placeholder_array_type(Btype* placeholder,
|
|||||||
Btype* r = this->fill_in_array(placeholder, element_btype, length);
|
Btype* r = this->fill_in_array(placeholder, element_btype, length);
|
||||||
|
|
||||||
// Build the data structure gcc wants to see for a typedef.
|
// Build the data structure gcc wants to see for a typedef.
|
||||||
tree copy = build_variant_type_copy(t);
|
tree copy = build_distinct_type_copy(t);
|
||||||
TYPE_NAME(copy) = NULL_TREE;
|
TYPE_NAME(copy) = NULL_TREE;
|
||||||
DECL_ORIGINAL_TYPE(TYPE_NAME(t)) = copy;
|
DECL_ORIGINAL_TYPE(TYPE_NAME(t)) = copy;
|
||||||
|
|
||||||
@ -712,6 +712,24 @@ Gcc_backend::named_type(const std::string& name, Btype* btype,
|
|||||||
tree type = btype->get_tree();
|
tree type = btype->get_tree();
|
||||||
if (type == error_mark_node)
|
if (type == error_mark_node)
|
||||||
return this->error_type();
|
return this->error_type();
|
||||||
|
|
||||||
|
// The middle-end expects a basic type to have a name. In Go every
|
||||||
|
// basic type will have a name. The first time we see a basic type,
|
||||||
|
// give it whatever Go name we have at this point.
|
||||||
|
if (TYPE_NAME(type) == NULL_TREE
|
||||||
|
&& location.gcc_location() == BUILTINS_LOCATION
|
||||||
|
&& (TREE_CODE(type) == INTEGER_TYPE
|
||||||
|
|| TREE_CODE(type) == REAL_TYPE
|
||||||
|
|| TREE_CODE(type) == COMPLEX_TYPE
|
||||||
|
|| TREE_CODE(type) == BOOLEAN_TYPE))
|
||||||
|
{
|
||||||
|
tree decl = build_decl(BUILTINS_LOCATION, TYPE_DECL,
|
||||||
|
get_identifier_from_string(name),
|
||||||
|
type);
|
||||||
|
TYPE_NAME(type) = decl;
|
||||||
|
return this->make_type(type);
|
||||||
|
}
|
||||||
|
|
||||||
tree copy = build_variant_type_copy(type);
|
tree copy = build_variant_type_copy(type);
|
||||||
tree decl = build_decl(location.gcc_location(), TYPE_DECL,
|
tree decl = build_decl(location.gcc_location(), TYPE_DECL,
|
||||||
get_identifier_from_string(name),
|
get_identifier_from_string(name),
|
||||||
|
Loading…
Reference in New Issue
Block a user