From patchwork Tue Apr 29 11:08:32 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trevor Saunders X-Patchwork-Id: 343790 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 67D571400B7 for ; Tue, 29 Apr 2014 21:10:00 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references; q=dns; s= default; b=hThC9kKuiJQdb/FNI+LKmmlG3OANTxtnhewbHdgBpP8R0axfvcCJP /IhQ4KPoLsTB4WX0UDJC3bSv3z0Iy8I2Xwb2aDmkMWafl8CqVxK7qBbnPR570M4v foq5FDMNpX+JwFhihMNcVdkPepjcc4OtiZNZI3pT+LhHRzGfIlEH9g= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references; s= default; bh=P/yFO+ceXhAvQI7MSuT68ok+Tn0=; b=WXvqfZRxjnNN/iFehboS MsVtkqGVolL8D60bt2j0hiKR8yaa01I+EsC4rBwGF3NsHMu3Ysm3DNX8BxvcXcJE QjRXE3rOIO33sS8FJgg39HH4Rs7utbU2iLBW+jbrfoRvB2wp65cd8JR40bhSvnO6 9tRJrLUsVt9JC+2WQf0LgQI= Received: (qmail 26224 invoked by alias); 29 Apr 2014 11:09:01 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 26126 invoked by uid 89); 29 Apr 2014 11:08:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: smtp.mozilla.org Received: from mx2.corp.phx1.mozilla.com (HELO smtp.mozilla.org) (63.245.216.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 29 Apr 2014 11:08:52 +0000 Received: from iceball.corp.tor1.mozilla.com (69-165-234-187.cable.teksavvy.com [69.165.234.187]) (Authenticated sender: tsaunders@mozilla.com) by mx2.mail.corp.phx1.mozilla.com (Postfix) with ESMTPSA id 0C860F291E; Tue, 29 Apr 2014 04:08:50 -0700 (PDT) From: tsaunders@mozilla.com To: gcc-patches@gcc.gnu.org Cc: Trevor Saunders Subject: [PATCH 2/6] don't have gengtype autocreate allocation macros for variably sized types Date: Tue, 29 Apr 2014 07:08:32 -0400 Message-Id: <1398769716-8629-3-git-send-email-tsaunders@mozilla.com> In-Reply-To: <1398769716-8629-1-git-send-email-tsaunders@mozilla.com> References: <1398769716-8629-1-git-send-email-tsaunders@mozilla.com> X-IsSubscribed: yes From: Trevor Saunders Hi, the template allocation functions won't work with things that are actually variably sized, so its simpler to stop relying on gengtype for them first. However it turns out most of the usage of variably sized things in gengtype is to deal with gengtype badness instead of actually variably sized things so the next patch will remove a bit of the mess in this one. bootstrapped + regtested on x86_64-unknown-linux-gnu, ok? Trev gcc/ChangeLog: 2014-04-23 Trevor Saunders * gengtype.c (write_typed_alloc_def): Don't write anything if the type is variably sized. * ggc.h: Adjust. * tree-ssa-operands.c (ssa_operand_alloc): Likewise. * tree.c (build_string): Likewise. (build_omp_clause): Likewise. * varasm.c (create_block_symbol): Likewise. gcc/c/ChangeLog: 2014-04-23 Trevor Saunders * c-decl.c (finish_struct): Adjust. (finish_enum): Likewise. gcc/java/ChangeLog: 2014-04-23 Trevor Saunders * class.c (add_method_1): Adjust. * constants.c (set_constant_entry): Likewise. * decl.c (java_dup_lang_specific_decl): Likewise. * java-tree.h (MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC): Likewise. (MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC): Likewise. * jcf-reader.c (jcf_parse_constant_pool): Adjust. gcc/objc/ChangeLog: 2014-04-23 Trevor Saunders * objc-act.h: Adjust. gcc/cp/ChangeLog: 2014-04-23 Trevor Saunders * class.c (sorted_fields_type_new): Adjust. * cp-tree.h (more_aggr_init_expr_args_p): Likewise. * lex.c (retrofit_lang_decl): Likewise. (cxx_dup_lang_specific_decl): Likewise. (copy_lang_type): Likewise. (cxx_make_type): Likewise. gcc/fortran/ChangeLog: 2014-04-23 Trevor Saunders * trans-decl.c (gfc_allocate_lang_decl): Adjust. * trans-types.c (gfc_get_nodesc_array_type): Likewise. (gfc_get_array_type_bounds): Likewise. (gfc_nonrestricted_type): Likewise. --- gcc/c/c-decl.c | 8 +++++--- gcc/cp/class.c | 2 +- gcc/cp/cp-tree.h | 3 ++- gcc/cp/lex.c | 9 +++++---- gcc/fortran/trans-decl.c | 5 +++-- gcc/fortran/trans-types.c | 13 ++++++++----- gcc/gengtype.c | 3 +++ gcc/ggc.h | 2 +- gcc/java/class.c | 3 ++- gcc/java/constants.c | 6 +++--- gcc/java/decl.c | 2 +- gcc/java/java-tree.h | 6 ++++-- gcc/java/jcf-reader.c | 3 ++- gcc/objc/objc-act.h | 3 ++- gcc/tree-ssa-operands.c | 4 ++-- gcc/tree.c | 4 ++-- gcc/varasm.c | 2 +- 17 files changed, 47 insertions(+), 31 deletions(-) diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index e30876c..e8b8166 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -7423,8 +7423,9 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, ensure that this lives as long as the rest of the struct decl. All decls in an inline function need to be saved. */ - space = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); - space2 = ggc_alloc_sorted_fields_type + space = (struct lang_type *) ggc_internal_cleared_alloc + (sizeof (struct lang_type)); + space2 = (sorted_fields_type *) ggc_internal_alloc (sizeof (struct sorted_fields_type) + len * sizeof (tree)); len = 0; @@ -7704,7 +7705,8 @@ finish_enum (tree enumtype, tree values, tree attributes) /* Record the min/max values so that we can warn about bit-field enumerations that are too small for the values. */ - lt = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); + lt = (struct lang_type *) ggc_internal_cleared_alloc + (sizeof (struct lang_type)); lt->enum_min = minnode; lt->enum_max = maxnode; TYPE_LANG_SPECIFIC (enumtype) = lt; diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 334bfd5..86058b5 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -6490,7 +6490,7 @@ static struct sorted_fields_type * sorted_fields_type_new (int n) { struct sorted_fields_type *sft; - sft = ggc_alloc_sorted_fields_type (sizeof (struct sorted_fields_type) + sft = (sorted_fields_type *) ggc_internal_alloc (sizeof (sorted_fields_type) + n * sizeof (tree)); sft->len = n; diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index f459e55..9fbc7f8 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3586,7 +3586,8 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter) do { \ if (TYPE_LANG_SPECIFIC (NODE) == NULL) \ { \ - TYPE_LANG_SPECIFIC (NODE) = ggc_alloc_cleared_lang_type \ + TYPE_LANG_SPECIFIC (NODE) \ + = (struct lang_type *) ggc_internal_cleared_alloc \ (sizeof (struct lang_type_ptrmem)); \ TYPE_LANG_SPECIFIC (NODE)->u.ptrmem.h.is_lang_type_class = 0; \ } \ diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index 3fe275e..46c28ae 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -555,7 +555,7 @@ retrofit_lang_decl (tree t) else gcc_unreachable (); - ld = ggc_alloc_cleared_lang_decl (size); + ld = (struct lang_decl *) ggc_internal_cleared_alloc (size); ld->u.base.selector = sel; @@ -597,7 +597,7 @@ cxx_dup_lang_specific_decl (tree node) else gcc_unreachable (); - ld = ggc_alloc_lang_decl (size); + ld = (struct lang_decl *) ggc_internal_alloc (size); memcpy (ld, DECL_LANG_SPECIFIC (node), size); DECL_LANG_SPECIFIC (node) = ld; @@ -635,7 +635,7 @@ copy_lang_type (tree node) size = sizeof (struct lang_type); else size = sizeof (struct lang_type_ptrmem); - lt = ggc_alloc_lang_type (size); + lt = (struct lang_type *) ggc_internal_alloc (size); memcpy (lt, TYPE_LANG_SPECIFIC (node), size); TYPE_LANG_SPECIFIC (node) = lt; @@ -668,7 +668,8 @@ cxx_make_type (enum tree_code code) || code == BOUND_TEMPLATE_TEMPLATE_PARM) { struct lang_type *pi - = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); + = (struct lang_type *) ggc_internal_cleared_alloc + (sizeof (struct lang_type)); TYPE_LANG_SPECIFIC (t) = pi; pi->u.c.h.is_lang_type_class = 1; diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index cf7b661..beb99a6 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -615,8 +615,9 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym) void gfc_allocate_lang_decl (tree decl) { - DECL_LANG_SPECIFIC (decl) = ggc_alloc_cleared_lang_decl(sizeof - (struct lang_decl)); + DECL_LANG_SPECIFIC (decl) + = (struct lang_decl *) ggc_internal_cleared_alloc (sizeof + (struct lang_decl)); } /* Remember a symbol to generate initialization/cleanup code at function diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 243feb7..84503ce 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -1512,7 +1512,8 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed, GFC_ARRAY_TYPE_P (type) = 1; TYPE_LANG_SPECIFIC (type) - = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); + = (struct lang_type *) ggc_internal_cleared_alloc + (sizeof (struct lang_type)); known_stride = (packed != PACKED_NO); known_offset = 1; @@ -1815,7 +1816,8 @@ gfc_get_array_type_bounds (tree etype, int dimen, int codimen, tree * lbound, GFC_DESCRIPTOR_TYPE_P (fat_type) = 1; TYPE_LANG_SPECIFIC (fat_type) - = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); + = (struct lang_type *) ggc_internal_cleared_alloc + (sizeof (struct lang_type)); GFC_TYPE_ARRAY_RANK (fat_type) = dimen; GFC_TYPE_ARRAY_CORANK (fat_type) = codimen; @@ -1990,7 +1992,8 @@ gfc_nonrestricted_type (tree t) if (!TYPE_LANG_SPECIFIC (t)) TYPE_LANG_SPECIFIC (t) - = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); + = (struct lang_type *) ggc_internal_cleared_alloc + (sizeof (struct lang_type)); /* If we're dealing with this very node already further up the call chain (recursion via pointers and struct members) we haven't yet determined if we really need a new type node. @@ -2042,8 +2045,8 @@ gfc_nonrestricted_type (tree t) if (dataptr_type != GFC_TYPE_ARRAY_DATAPTR_TYPE (t)) { TYPE_LANG_SPECIFIC (ret) - = ggc_alloc_cleared_lang_type (sizeof (struct - lang_type)); + = (struct lang_type *) ggc_internal_cleared_alloc + (sizeof (struct lang_type)); *TYPE_LANG_SPECIFIC (ret) = *TYPE_LANG_SPECIFIC (t); GFC_TYPE_ARRAY_DATAPTR_TYPE (ret) = dataptr_type; } diff --git a/gcc/gengtype.c b/gcc/gengtype.c index e8fcd9f..b3c966c 100644 --- a/gcc/gengtype.c +++ b/gcc/gengtype.c @@ -4967,6 +4967,9 @@ write_typed_alloc_def (outf_p f, enum alloc_quantity quantity) { bool two_args = variable_size && (quantity == vector); + if (variable_size) + return; + gcc_assert (f != NULL); const char *type_name_as_id = filter_type_name (type_name); oprintf (f, "#define ggc_alloc_%s%s", allocator_type, type_name_as_id); diff --git a/gcc/ggc.h b/gcc/ggc.h index 0af69f5..736305d 100644 --- a/gcc/ggc.h +++ b/gcc/ggc.h @@ -230,7 +230,7 @@ extern void stringpool_statistics (void); extern void init_ggc_heuristics (void); #define ggc_alloc_rtvec_sized(NELT) \ - ggc_alloc_rtvec_def (sizeof (struct rtvec_def) \ + (rtvec_def *) ggc_internal_alloc (sizeof (struct rtvec_def) \ + ((NELT) - 1) * sizeof (rtx)) \ /* Memory statistics passing versions of some allocators. Too few of them to diff --git a/gcc/java/class.c b/gcc/java/class.c index bbe7c86..94c2568 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -765,7 +765,8 @@ add_method_1 (tree this_class, int access_flags, tree name, tree function_type) DECL_CONTEXT (fndecl) = this_class; DECL_LANG_SPECIFIC (fndecl) - = ggc_alloc_cleared_lang_decl(sizeof (struct lang_decl)); + = (struct lang_decl *) ggc_internal_cleared_alloc + (sizeof (struct lang_decl)); DECL_LANG_SPECIFIC (fndecl)->desc = LANG_DECL_FUNC; /* Initialize the static initializer test table. */ diff --git a/gcc/java/constants.c b/gcc/java/constants.c index c0295e9..51449ef 100644 --- a/gcc/java/constants.c +++ b/gcc/java/constants.c @@ -48,9 +48,9 @@ set_constant_entry (CPool *cpool, int index, int tag, jword value) cpool->capacity = 100; cpool->tags = (uint8 *) ggc_internal_cleared_alloc (sizeof (uint8) * cpool->capacity); - cpool->data = ggc_alloc_cleared_vec_cpool_entry (sizeof - (union cpool_entry), - cpool->capacity); + cpool->data = (cpool_entry *) ggc_internal_cleared_alloc (sizeof + (union cpool_entry) + * cpool->capacity); cpool->count = 1; } if (index >= cpool->capacity) diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 53d6f89..9f2f0ca 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -1646,7 +1646,7 @@ java_dup_lang_specific_decl (tree node) return; lang_decl_size = sizeof (struct lang_decl); - x = ggc_alloc_lang_decl (lang_decl_size); + x = (struct lang_decl *) ggc_internal_alloc (lang_decl_size); memcpy (x, DECL_LANG_SPECIFIC (node), lang_decl_size); DECL_LANG_SPECIFIC (node) = x; } diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index 806d2d7..43a8258 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -700,7 +700,8 @@ union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), if (DECL_LANG_SPECIFIC (T) == NULL) \ { \ DECL_LANG_SPECIFIC ((T)) \ - = ggc_alloc_cleared_lang_decl (sizeof (struct lang_decl)); \ + = (struct lang_decl *) ggc_internal_cleared_alloc \ + (sizeof (struct lang_decl)); \ DECL_LANG_SPECIFIC (T)->desc = LANG_DECL_VAR; \ } @@ -826,7 +827,8 @@ struct GTY((variable_size)) lang_decl { #define MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC(T) \ if (TYPE_LANG_SPECIFIC ((T)) == NULL) \ TYPE_LANG_SPECIFIC ((T)) \ - = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); + = (struct lang_type *) ggc_internal_cleared_alloc \ +(sizeof (struct lang_type)); \ #define TYPE_DUMMY(T) (TYPE_LANG_SPECIFIC(T)->dummy_class) diff --git a/gcc/java/jcf-reader.c b/gcc/java/jcf-reader.c index 10def13..f25bbab 100644 --- a/gcc/java/jcf-reader.c +++ b/gcc/java/jcf-reader.c @@ -341,7 +341,8 @@ jcf_parse_constant_pool (JCF* jcf) int i, n; JPOOL_SIZE (jcf) = (JCF_FILL (jcf, 2), JCF_readu2 (jcf)); jcf->cpool.tags = (uint8 *) ggc_alloc_atomic (JPOOL_SIZE (jcf)); - jcf->cpool.data = ggc_alloc_cpool_entry (sizeof (jword) * JPOOL_SIZE (jcf)); + jcf->cpool.data = (cpool_entry *) ggc_internal_cleared_alloc + (sizeof (jword) * JPOOL_SIZE (jcf)); jcf->cpool.tags[0] = 0; #ifdef HANDLE_START_CONSTANT_POOL HANDLE_START_CONSTANT_POOL (JPOOL_SIZE (jcf)); diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h index 0c7fa04..a050727 100644 --- a/gcc/objc/objc-act.h +++ b/gcc/objc/objc-act.h @@ -193,7 +193,8 @@ typedef enum objc_property_assign_semantics { #define ALLOC_OBJC_TYPE_LANG_SPECIFIC(NODE) \ do { \ TYPE_LANG_SPECIFIC (NODE) \ - = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); \ + = (struct lang_type *) ggc_internal_cleared_alloc \ + (sizeof (struct lang_type)); \ } while (0) #define TYPE_HAS_OBJC_INFO(TYPE) \ diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 03d3e4d..492eee7 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -276,8 +276,8 @@ ssa_operand_alloc (struct function *fn, unsigned size) } - ptr = ggc_alloc_ssa_operand_memory_d (sizeof (void *) - + gimple_ssa_operands (fn)->ssa_operand_mem_size); + ptr = (ssa_operand_memory_d *) ggc_internal_alloc + (sizeof (void *) + gimple_ssa_operands (fn)->ssa_operand_mem_size); ptr->next = gimple_ssa_operands (fn)->operand_memory; gimple_ssa_operands (fn)->operand_memory = ptr; diff --git a/gcc/tree.c b/gcc/tree.c index aa74fd0..365faf2 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -1656,7 +1656,7 @@ build_string (int len, const char *str) record_node_allocation_statistics (STRING_CST, length); - s = ggc_alloc_tree_node (length); + s = (tree) ggc_internal_alloc (length); memset (s, 0, sizeof (struct tree_typed)); TREE_SET_CODE (s, STRING_CST); @@ -10368,7 +10368,7 @@ build_omp_clause (location_t loc, enum omp_clause_code code) record_node_allocation_statistics (OMP_CLAUSE, size); - t = ggc_alloc_tree_node (size); + t = (tree) ggc_internal_alloc (size); memset (t, 0, size); TREE_SET_CODE (t, OMP_CLAUSE); OMP_CLAUSE_SET_CODE (t, code); diff --git a/gcc/varasm.c b/gcc/varasm.c index 8e8c5f6..3b42faa 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -381,7 +381,7 @@ create_block_symbol (const char *label, struct object_block *block, /* Create the extended SYMBOL_REF. */ size = RTX_HDR_SIZE + sizeof (struct block_symbol); - symbol = ggc_alloc_rtx_def (size); + symbol = (rtx) ggc_internal_alloc (size); /* Initialize the normal SYMBOL_REF fields. */ memset (symbol, 0, size);