mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 05:50:28 +08:00
Move clearing of flag_strict_aliasing to gcc interface.
From-SVN: r168774
This commit is contained in:
parent
632469d01e
commit
3dac68b99e
@ -1,3 +1,12 @@
|
||||
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
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 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)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* 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 ();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user