aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.h
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-04-16 13:21:30 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-04-16 13:21:30 +0000
commitac9a074c7249d0a042b827696caa3f694befaee5 (patch)
tree067d3bace4ca7e9ad5771e700d5b82b337858715 /gcc/tree.h
parentfba621209f542447474d7e1b5d33ba21df14f04d (diff)
downloadgcc-ac9a074c7249d0a042b827696caa3f694befaee5.zip
gcc-ac9a074c7249d0a042b827696caa3f694befaee5.tar.gz
gcc-ac9a074c7249d0a042b827696caa3f694befaee5.tar.bz2
re PR c/52977 (internal compiler error: Segmentation fault with `-x c-header' or `-x cxx-header' option)
2012-04-16 Richard Guenther <rguenther@suse.de> PR middle-end/52977 * tree.h (VECTOR_CST_NELTS): Adjust. (struct tree_vector): Add explicit length field. (make_vector_stat): Declare. (make_vector): Define. * tree.c (make_vector_stat): New function. (build_vector_stat): Use it. * tree-streamer-in.c (streamer_alloc_tree): Likewise. From-SVN: r186494
Diffstat (limited to 'gcc/tree.h')
-rw-r--r--gcc/tree.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/tree.h b/gcc/tree.h
index 8090176..e8bd858 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1534,13 +1534,14 @@ struct GTY(()) tree_complex {
};
/* In a VECTOR_CST node. */
-#define VECTOR_CST_NELTS(NODE) (TYPE_VECTOR_SUBPARTS (TREE_TYPE (NODE)))
+#define VECTOR_CST_NELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.length)
#define VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elts)
#define VECTOR_CST_ELT(NODE,IDX) (VECTOR_CST_CHECK (NODE)->vector.elts[IDX])
struct GTY(()) tree_vector {
struct tree_typed typed;
- tree GTY ((length ("TYPE_VECTOR_SUBPARTS (TREE_TYPE ((tree)&%h))"))) elts[1];
+ unsigned length;
+ tree GTY ((length ("%h.length"))) elts[1];
};
#include "symtab.h"
@@ -4341,6 +4342,8 @@ build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
extern tree build_int_cst (tree, HOST_WIDE_INT);
extern tree build_int_cst_type (tree, HOST_WIDE_INT);
extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT);
+extern tree make_vector_stat (unsigned MEM_STAT_DECL);
+#define make_vector(n) make_vector_stat (n MEM_STAT_INFO)
extern tree build_vector_stat (tree, tree * MEM_STAT_DECL);
#define build_vector(t,v) build_vector_stat (t, v MEM_STAT_INFO)
extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *);