The following makes sure that the gimplifier properly unshares the type fields in anonymous VLA types by inserting a DECL_EXPR for it instead of just forcing a TYPE_SIZE evaluation.
This avoids turning those fields in to garbage during gimplification. Bootstrapped and tested on x86_64-unknown-linux-gnu. Ok for trunk? This fixes an ICE with c-c++-common/ubsan/pr59667.c when the gimplfier is allowed to introduce SSA names. Richard. 2016-04-29 Richard Biener <rguent...@suse.de> cp/ * decl.c (grokdeclarator): Properly insert a DECL_EXPR for anonymous VLAs. Index: gcc/cp/decl.c =================================================================== *** gcc/cp/decl.c.orig 2016-04-28 14:11:00.044581227 +0200 --- gcc/cp/decl.c 2016-04-28 14:11:08.116671106 +0200 *************** grokdeclarator (const cp_declarator *dec *** 10393,10400 **** && (decl_context == NORMAL || decl_context == FIELD) && at_function_scope_p () && variably_modified_type_p (type, NULL_TREE)) ! /* Force evaluation of the SAVE_EXPR. */ ! finish_expr_stmt (TYPE_SIZE (type)); if (declarator->kind == cdk_reference) { --- 10393,10403 ---- && (decl_context == NORMAL || decl_context == FIELD) && at_function_scope_p () && variably_modified_type_p (type, NULL_TREE)) ! { ! TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL, ! NULL_TREE, type); ! add_decl_expr (TYPE_NAME (type)); ! } if (declarator->kind == cdk_reference) {