+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.
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 \
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) \
$(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.
#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"
*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.
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
#include "convert.h"
#include "output.h"
#include "diagnostic.h"
-#include "rtl.h"
#ifndef ENABLE_BUILD_WITH_CXX
}
// 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();
#include "go-system.h"
+#include "go-c.h"
#include "types.h"
#include "gogo.h"
if (add_to_globals)
this->add_named_object(no);
- this->imported_unsafe_ = true;
+ if (!this->imported_unsafe_)
+ {
+ go_imported_unsafe();
+ this->imported_unsafe_ = true;
+ }
}