Commit 3dac68b9 by Ian Lance Taylor Committed by Ian Lance Taylor

Move clearing of flag_strict_aliasing to gcc interface.

From-SVN: r168774
parent 632469d0
2011-01-13 Ian Lance Taylor <iant@google.com>
* go-backend.c: Include "rtl.h" and "target.h".
(go_imported_unsafe): New function.
* go-c.h (go_imported_unsafe): Declare.
* Make-lang.in (go/go-backend.o): Depend on $(RTL_H).
(go/gogo-tree.o): Remove dependency on $(RTL_H).
(go/unsafe.o): Depend on $(GO_C_H).
2010-12-31 Joern Rennecke <amylaar@spamcop.net>
PR go/47113
......
# Make-lang.in -- Top level -*- makefile -*- fragment for gcc Go frontend.
# Copyright (C) 2009, 2010 Free Software Foundation, Inc.
# Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
# This file is part of GCC.
......@@ -221,7 +221,7 @@ GO_EXPRESSIONS_H = go/gofrontend/expressions.h go/gofrontend/operator.h
GO_IMPORT_H = go/gofrontend/import.h go/gofrontend/export.h
go/go-backend.o: go/go-backend.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TREE_H) $(TM_H) $(TM_P_H)
$(TM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(TARGET_H)
go/go-lang.o: go/go-lang.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(OPTS_H) \
$(TREE_H) $(GIMPLE_H) $(GGC_H) $(TOPLEV_H) debug.h options.h \
......@@ -254,7 +254,7 @@ go/go-dump.o: go/gofrontend/go-dump.cc $(GO_SYSTEM_H) $(GO_C_H) \
go/gofrontend/go-dump.h
go/gogo-tree.o: go/gofrontend/gogo-tree.cc $(GO_SYSTEM_H) $(TOPLEV_H) \
$(TREE_H) $(GIMPLE_H) tree-iterator.h $(CGRAPH_H) langhooks.h \
convert.h output.h $(DIAGNOSTIC_H) $(RTL_H) $(GO_TYPES_H) \
convert.h output.h $(DIAGNOSTIC_H) $(GO_TYPES_H) \
$(GO_EXPRESSIONS_H) $(GO_STATEMENTS_H) $(GO_GOGO_H)
go/gogo.o: go/gofrontend/gogo.cc $(GO_SYSTEM_H) $(GO_C_H) \
go/gofrontend/go-dump.h $(GO_LEX_H) $(GO_TYPES_H) $(GO_STATEMENTS_H) \
......@@ -277,4 +277,5 @@ go/types.o: go/gofrontend/types.cc $(GO_SYSTEM_H) $(TOPLEV_H) intl.h $(TREE_H) \
$(GIMPLE_H) $(REAL_H) convert.h $(GO_C_H) $(GO_GOGO_H) \
go/gofrontend/operator.h $(GO_EXPRESSIONS_H) $(GO_STATEMENTS_H) \
go/gofrontend/export.h $(GO_IMPORT_H) $(GO_TYPES_H)
go/unsafe.o: go/gofrontend/unsafe.cc $(GO_SYSTEM_H) $(GO_TYPES_H) $(GO_GOGO_H)
go/unsafe.o: go/gofrontend/unsafe.cc $(GO_SYSTEM_H) $(GO_C_H) $(GO_TYPES_H) \
$(GO_GOGO_H)
/* go-backend.c -- Go frontend interface to gcc backend.
Copyright (C) 2010 Free Software Foundation, Inc.
Copyright (C) 2010, 2011 Free Software Foundation, Inc.
This file is part of GCC.
......@@ -20,9 +20,11 @@ along with GCC; see the file COPYING3. If not see
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tree.h"
#include "tm.h"
#include "rtl.h"
#include "tree.h"
#include "tm_p.h"
#include "target.h"
#include "go-c.h"
......@@ -70,3 +72,22 @@ go_trampoline_info (unsigned int *size, unsigned int *alignment)
*size = TRAMPOLINE_SIZE;
*alignment = TRAMPOLINE_ALIGNMENT;
}
/* This is called by the Go frontend proper if the unsafe package was
imported. When that happens we can not do type-based alias
analysis. */
void
go_imported_unsafe (void)
{
flag_strict_aliasing = false;
/* This is a real hack. init_varasm_once has already grabbed an
alias set, which we don't want when we aren't doing strict
aliasing. We reinitialize to make it do it again. This should
be OK in practice since we haven't really done anything yet. */
init_varasm_once ();
/* Let the backend know that the options have changed. */
targetm.override_options_after_change ();
}
/* go-c.h -- Header file for go frontend gcc C interface.
Copyright (C) 2009, 2010 Free Software Foundation, Inc.
Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
This file is part of GCC.
......@@ -65,6 +65,8 @@ extern unsigned int go_field_alignment (tree);
extern void go_trampoline_info (unsigned int *size, unsigned int *alignment);
extern void go_imported_unsafe (void);
#if defined(__cplusplus) && !defined(ENABLE_BUILD_WITH_CXX)
} /* End extern "C". */
#endif
......
......@@ -22,7 +22,6 @@ extern "C"
#include "convert.h"
#include "output.h"
#include "diagnostic.h"
#include "rtl.h"
#ifndef ENABLE_BUILD_WITH_CXX
}
......@@ -810,17 +809,6 @@ Gogo::write_globals()
// Pass everything back to the middle-end.
if (this->imported_unsafe_)
{
// Importing the "unsafe" package automatically disables TBAA.
flag_strict_aliasing = false;
// This is a real hack. init_varasm_once has already grabbed an
// alias set, which we don't want when we aren't going strict
// aliasing. We reinitialize to make it do it again. FIXME.
init_varasm_once();
}
wrapup_global_declarations(vec, count);
cgraph_finalize_compilation_unit();
......
......@@ -6,6 +6,7 @@
#include "go-system.h"
#include "go-c.h"
#include "types.h"
#include "gogo.h"
......@@ -130,5 +131,9 @@ Gogo::import_unsafe(const std::string& local_name, bool is_local_name_exported,
if (add_to_globals)
this->add_named_object(no);
this->imported_unsafe_ = true;
if (!this->imported_unsafe_)
{
go_imported_unsafe();
this->imported_unsafe_ = true;
}
}
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