Commit ce4321c9 by Nikhil Benesch Committed by Ian Lance Taylor

re PR go/89019 (LTO and gccgo cause ICE during free_lang_data)

gcc/go:
        PR go/89019
        * go-gcc.cc (Gcc_backend::placeholder_struct_type): Mark
        placeholder structs as requiring structural equality.
        (Gcc_backend::set_placeholder_pointer_type): Propagate the
	canonical type from the desired pointer type to the placeholder
	pointer type.
gcc/testsuite/:
        * lib/go-torture.exp: Test compiling with -flto.

From-SVN: r268572
parent fbe83e6b
2019-02-05 Nikhil Benesch <nikhil.benesch@gmail.com>
PR go/89019
* go-gcc.cc (Gcc_backend::placeholder_struct_type): Mark
placeholder structs as requiring structural equality.
(Gcc_backend::set_placeholder_pointer_type): Propagate the
canonical type from the desired pointer type to the placeholder
pointer type.
2019-01-09 Ian Lance Taylor <iant@golang.org> 2019-01-09 Ian Lance Taylor <iant@golang.org>
PR go/86343 PR go/86343
......
...@@ -1049,6 +1049,7 @@ Gcc_backend::set_placeholder_pointer_type(Btype* placeholder, ...@@ -1049,6 +1049,7 @@ Gcc_backend::set_placeholder_pointer_type(Btype* placeholder,
} }
gcc_assert(TREE_CODE(tt) == POINTER_TYPE); gcc_assert(TREE_CODE(tt) == POINTER_TYPE);
TREE_TYPE(pt) = TREE_TYPE(tt); TREE_TYPE(pt) = TREE_TYPE(tt);
TYPE_CANONICAL(pt) = TYPE_CANONICAL(tt);
if (TYPE_NAME(pt) != NULL_TREE) if (TYPE_NAME(pt) != NULL_TREE)
{ {
// Build the data structure gcc wants to see for a typedef. // Build the data structure gcc wants to see for a typedef.
...@@ -1080,6 +1081,12 @@ Gcc_backend::placeholder_struct_type(const std::string& name, ...@@ -1080,6 +1081,12 @@ Gcc_backend::placeholder_struct_type(const std::string& name,
get_identifier_from_string(name), get_identifier_from_string(name),
ret); ret);
TYPE_NAME(ret) = decl; TYPE_NAME(ret) = decl;
// The struct type that eventually replaces this placeholder will require
// structural equality. The placeholder must too, so that the requirement
// for structural equality propagates to references that are constructed
// before the replacement occurs.
SET_TYPE_STRUCTURAL_EQUALITY(ret);
} }
return this->make_type(ret); return this->make_type(ret);
} }
......
2019-02-05 Nikhil Benesch <nikhil.benesch@gmail.com>
PR go/89019
* lib/go-torture.exp: Test compiling with -flto.
2019-02-06 Joseph Myers <joseph@codesourcery.com> 2019-02-06 Joseph Myers <joseph@codesourcery.com>
PR c/88584 PR c/88584
......
...@@ -34,7 +34,8 @@ if ![info exists TORTURE_OPTIONS] { ...@@ -34,7 +34,8 @@ if ![info exists TORTURE_OPTIONS] {
{ -O2 -fomit-frame-pointer -finline-functions -funroll-loops } \ { -O2 -fomit-frame-pointer -finline-functions -funroll-loops } \
{ -O2 -fbounds-check } \ { -O2 -fbounds-check } \
{ -O3 -g } \ { -O3 -g } \
{ -Os }] { -Os } \
{ -flto }]
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment