This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix incomplete initialization of declspecs
- From: Bernd Schmidt <bschmidt at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Joseph Myers <joseph at codesourcery dot com>
- Date: Wed, 10 Feb 2016 21:01:19 +0100
- Subject: Fix incomplete initialization of declspecs
- Authentication-results: sourceware.org; auth=none
- References: <56BB9471 dot 8070901 at t-online dot de>
I've noticed that build_null_declspecs fails to clear out all location
information since it's missing a multiplication with the type size. The
simplest fix seems to be to just clear the entire structure.
Bootstrapping & testing now on x86_64-linux, ok if that succeeds?
Depending on what we do for 69733, this might be a prerequisite patch.
Bernd
* c-decl.c (build_null_declspecs): Zero the entire struct.
Index: gcc/c/c-decl.c
===================================================================
--- gcc/c/c-decl.c (revision 233217)
+++ gcc/c/c-decl.c (working copy)
@@ -9460,38 +9486,12 @@ struct c_declspecs *
build_null_declspecs (void)
{
struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
- memset (&ret->locations, 0, cdw_number_of_elements);
- ret->type = 0;
- ret->expr = 0;
- ret->decl_attr = 0;
- ret->attrs = 0;
+ memset (ret, 0, sizeof *ret);
ret->align_log = -1;
ret->typespec_word = cts_none;
ret->storage_class = csc_none;
ret->expr_const_operands = true;
- ret->declspecs_seen_p = false;
ret->typespec_kind = ctsk_none;
- ret->non_sc_seen_p = false;
- ret->typedef_p = false;
- ret->explicit_signed_p = false;
- ret->deprecated_p = false;
- ret->default_int_p = false;
- ret->long_p = false;
- ret->long_long_p = false;
- ret->short_p = false;
- ret->signed_p = false;
- ret->unsigned_p = false;
- ret->complex_p = false;
- ret->inline_p = false;
- ret->noreturn_p = false;
- ret->thread_p = false;
- ret->thread_gnu_p = false;
- ret->const_p = false;
- ret->volatile_p = false;
- ret->atomic_p = false;
- ret->restrict_p = false;
- ret->saturating_p = false;
- ret->alignas_p = false;
ret->address_space = ADDR_SPACE_GENERIC;
return ret;
}