diff options
author | Ian Lance Taylor <iant@google.com> | 2010-12-04 01:47:21 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-04 01:47:21 +0000 |
commit | 3dcdeeb24bb56e82edc9c6a136028df504ba1d1e (patch) | |
tree | c171c12e8ffacae44c074e5a825254f5a831b6e5 /gcc/go/go-backend.c | |
parent | 43dcc93137e15a6dd85d73d869764dafcc52fb67 (diff) | |
download | gcc-3dcdeeb24bb56e82edc9c6a136028df504ba1d1e.zip gcc-3dcdeeb24bb56e82edc9c6a136028df504ba1d1e.tar.gz gcc-3dcdeeb24bb56e82edc9c6a136028df504ba1d1e.tar.bz2 |
re PR bootstrap/46776 (gogo-tree.cc uses TRAMPOLINE_ALIGNMENT and TRAMPOLINE_SIZE)
PR bootstrap/46776
* go-backend.c: New file.
* go-c.h (go_type_alignment): Declare.
(go_field_alignment, go_trampoline_info): Declare.
* Make-lang.in (GO_OBJS): Add go/go-backend.o.
(go/go-backend.o): New target.
(go/go-lang.o): Make dependencies match source file.
(go/expressions.o): Don't depend on $(TM_H) $(TM_P_H).
(go/gogo-tree.o): Don't depend on $(TM_H).
Remove #include "tm.h" from gofrontend/*.cc.
From-SVN: r167451
Diffstat (limited to 'gcc/go/go-backend.c')
-rw-r--r-- | gcc/go/go-backend.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/gcc/go/go-backend.c b/gcc/go/go-backend.c new file mode 100644 index 0000000..15986dc --- /dev/null +++ b/gcc/go/go-backend.c @@ -0,0 +1,72 @@ +/* go-backend.c -- Go frontend interface to gcc backend. + Copyright (C) 2010 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "tm.h" +#include "tm_p.h" + +#include "go-c.h" + +/* This file holds all the cases where the Go frontend needs + information from gcc's backend. */ + +/* Return the alignment in bytes of a value of type T. */ + +unsigned int +go_type_alignment (tree t) +{ + return TYPE_ALIGN_UNIT (t); +} + +/* Return the alignment in bytes of a struct field of type T. */ + +unsigned int +go_field_alignment (tree t) +{ + unsigned int v; + + v = TYPE_ALIGN (t); + +#ifdef BIGGEST_FIELD_ALIGNMENT + if (v > BIGGEST_FIELD_ALIGNMENT) + v = BIGGEST_FIELD_ALIGNMENT; +#endif + +#ifdef ADJUST_FIELD_ALIGN + { + tree field; + field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL, t); + v = ADJUST_FIELD_ALIGN (field, v); + } +#endif + + return v / BITS_PER_UNIT; +} + +/* Return the size and alignment of a trampoline. */ + +void +go_trampoline_info (unsigned int *size, unsigned int *alignment) +{ + *size = TRAMPOLINE_SIZE; + *alignment = TRAMPOLINE_ALIGNMENT; +} |