This fixes PR53790 - with MEM_REF you can get base decls of incomplete type. Deal with that.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied everywhere. Richard. 2012-06-28 Richard Guenther <rguent...@suse.de> PR middle-end/53790 * expr.c (expand_expr_real_1): Verify if the type is complete before inspecting its size. * gcc.dg/torture/pr53790.c: New testcase. Index: gcc/expr.c =================================================================== *** gcc/expr.c (revision 189041) --- gcc/expr.c (working copy) *************** expand_expr_real_1 (tree exp, rtx target *** 9832,9837 **** --- 9832,9838 ---- orig_op0 = op0 = expand_expr (tem, (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE + && COMPLETE_TYPE_P (TREE_TYPE (tem)) && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) != INTEGER_CST) && modifier != EXPAND_STACK_PARM Index: gcc/testsuite/gcc.dg/torture/pr53790.c =================================================================== *** gcc/testsuite/gcc.dg/torture/pr53790.c (revision 0) --- gcc/testsuite/gcc.dg/torture/pr53790.c (working copy) *************** *** 0 **** --- 1,17 ---- + /* { dg-do compile } */ + + typedef struct s { + int value; + } s_t; + + static inline int + read(s_t const *var) + { + return var->value; + } + + int main() + { + extern union u extern_var; + return read((s_t *)&extern_var); + }