--- gcc/DATESTAMP (revision 144236) +++ gcc/DATESTAMP (revision 144237) @@ -1 +1 @@ -20090216 +20090217 --- gcc/ChangeLog (revision 144236) +++ gcc/ChangeLog (revision 144237) @@ -1,3 +1,36 @@ +2009-02-17 Richard Guenther + + PR tree-optimization/39202 + * tree-ssa-structalias.c (do_structure_copy): Before collapsing + a var make sure to follow existing collapses. + +2009-02-17 Richard Guenther + + PR middle-end/39214 + * langhooks.c (lhd_print_error_function): Check for NULL block. + +2009-02-17 Richard Guenther + + PR tree-optimization/39204 + * tree-ssa-pre.c (phi_translate_1): Lookup the value-number + of the PHI arg. + +2009-02-17 Uros Bizjak + + * config/soft-fp/double.h: Update from glibc CVS. + +2009-02-17 Richard Guenther + + PR tree-optimization/39207 + * tree-ssa-structalias.c (find_what_p_points_to): Do not emit + strict-aliasing warnings for pointers pointing to NULL. + +2009-02-16 Joseph Myers + + PR c/35446 + * c-parser.c (c_parser_braced_init): Call pop_init_level when + skipping until next close brace. + 2009-02-16 H.J. Lu PR target/37049 --- gcc/testsuite/gcc.c-torture/compile/pr39202.c (revision 0) +++ gcc/testsuite/gcc.c-torture/compile/pr39202.c (revision 144237) @@ -0,0 +1,33 @@ +typedef struct +{ + union + { + int * aaa; + } u; +} t_a; + +typedef struct +{ + unsigned bbb : 1; +} t_b; + +typedef struct +{ + int ccc; + t_a ddd; + t_b eee; + int fff; +} t_c; + +typedef struct t_d +{ + t_c f1; + t_c f2; +} t_d; + +void foo (void) +{ + t_d ggg; + ggg.f1 = ggg.f2; +} + --- gcc/testsuite/gcc.dg/torture/pr39204.c (revision 0) +++ gcc/testsuite/gcc.dg/torture/pr39204.c (revision 144237) @@ -0,0 +1,131 @@ +/* { dg-do compile } */ +/* { dg-options "-w" } */ + +typedef unsigned int size_t; +typedef unsigned char __u_char; +typedef unsigned short int __u_short; +typedef unsigned int __u_int; +typedef unsigned long int __u_long; +typedef signed char __int8_t; +typedef unsigned char __uint8_t; +typedef signed short int __int16_t; +typedef unsigned short int __uint16_t; +typedef signed int __int32_t; +typedef unsigned int __uint32_t; +__extension__ typedef signed long long int __int64_t; +__extension__ typedef unsigned long long int __uint64_t; +__extension__ typedef long long int __quad_t; +__extension__ typedef unsigned long long int __u_quad_t; +__extension__ typedef __u_quad_t __dev_t; +__extension__ typedef unsigned int __uid_t; +__extension__ typedef unsigned int __gid_t; +__extension__ typedef unsigned long int __ino_t; +__extension__ typedef __u_quad_t __ino64_t; +__extension__ typedef unsigned int __mode_t; +__extension__ typedef unsigned int __nlink_t; +__extension__ typedef long int __off_t; +__extension__ typedef __quad_t __off64_t; +__extension__ typedef int __pid_t; +__extension__ typedef struct { + int __val[2]; +} __fsid_t; +__extension__ typedef long int __clock_t; +__extension__ typedef unsigned int __id_t; +typedef struct _IO_FILE FILE; +typedef struct _IO_FILE __FILE; +typedef struct { + int __count; + union { + unsigned int __wch; + char __wchb[4]; + } + __value; +} __mbstate_t; +typedef struct { + __off_t __pos; + __mbstate_t __state; +} _G_fpos_t; +typedef struct { + __off64_t __pos; + __mbstate_t __state; +} _G_fpos64_t; +typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__))); +typedef struct _IO_FILE _IO_FILE; +extern struct _IO_FILE_plus _IO_2_1_stderr_; +extern int fputs (__const char *__restrict __s, FILE * __restrict __stream); +extern char *strstr (__const char *__haystack, __const char *__needle) + __attribute__ ((__nonnull__ (1, 2))); + extern char *rindex (__const char *__s, int __c) __attribute__ ((__nonnull__ (1))); +extern size_t strlen (__const char *__s) __attribute__ ((__nothrow__)) + __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); + char *mystrlwr (char *string); + char *m_replace_filename (const char *path, const char *filename); + typedef struct LINE { + char *text; + struct LINE *next; + int flags; + } LINE; +typedef struct TOC { + char *text; + char *alt; + struct TOC *next; + int root; + int texinfoable; + int htmlable; + int otherfile; +} TOC; +static int _empty_count; +extern char *_word_substitution[256]; +static void _output_sorted_nested_toc (TOC ** list, unsigned int num_items); +static char *_do_text_substitution (char *input); +static int _toc_scmp (const void *e1, const void *e2) +{ + TOC *t1 = *((TOC **) e1); + TOC *t2 = *((TOC **) e2); + return mystricmp (t1->text, t2->text); +} +static void _output_buffered_text (void) { if (_empty_count) ; } +void _post_process_filename (char *filename) +{ + int code_scanning = 0; + char *new_filename, *p; + char *line; + FILE *f1 = 0, *f2 = 0; + if (!new_filename || strlen (new_filename) < 2) + new_filename[strlen (filename) - 1] = 'x'; + if (!f1 || !f2) + while ((line = m_fgets (f1))) + { + line = _do_text_substitution (line); + fputs (line, f2); + } + if (remove (filename)) + cancel: + if (f1) + if (f2) + if (new_filename) + ; +} +static void _close_html_file (FILE * file) +{ + int f; + for (f = 0; _word_substitution[f]; f++) + ; +} +static __attribute__((always_inline)) +char * _do_text_substitution (char *input) +{ + int start, end, middle, f; + char *temp, *found, *reader; + for (f = 0; _word_substitution[f]; f++) + { + reader = input; + while ((found = strstr (reader, _word_substitution[f]))) + { + start = found - input; + input = temp; + reader = temp + start + middle; + } + } + return input; +} --- gcc/testsuite/gcc.dg/noncompile/init-5.c (revision 0) +++ gcc/testsuite/gcc.dg/noncompile/init-5.c (revision 144237) @@ -0,0 +1,4 @@ +/* Test for ICE after syntax error in initializer with range + designator: PR 35446. */ + +int a[2][2] = { [0 ... 1] = { ; } }; /* { dg-error "expected expression" } */ --- gcc/testsuite/gcc.dg/init-bad-4.c (revision 144236) +++ gcc/testsuite/gcc.dg/init-bad-4.c (revision 144237) @@ -2,4 +2,4 @@ /* Origin: Richard Guenther */ /* { dg-do compile } */ -struct A { } a = (struct A) {{ (X)0 }}; /* { dg-error "no members|extra brace|near|undeclared|constant|compound" } */ +struct A { } a = (struct A) {{ (X)0 }}; /* { dg-error "no members|extra brace|near|undeclared|constant|compound|excess" } */ --- gcc/testsuite/gcc.dg/vect/vect-outer-5.c (revision 144236) +++ gcc/testsuite/gcc.dg/vect/vect-outer-5.c (revision 144237) @@ -1,4 +1,4 @@ -/* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_float } */ #include #include --- gcc/testsuite/gcc.dg/vect/vect-outer-6.c (revision 144236) +++ gcc/testsuite/gcc.dg/vect/vect-outer-6.c (revision 144237) @@ -1,4 +1,4 @@ -/* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_float } */ #include #include --- gcc/testsuite/ChangeLog (revision 144236) +++ gcc/testsuite/ChangeLog (revision 144237) @@ -1,3 +1,24 @@ +2009-02-17 Richard Guenther + + PR tree-optimization/39202 + * gcc.c-torture/compile/pr39202.c: New testcase. + +2009-02-17 Richard Guenther + + PR tree-optimization/39204 + * gcc.dg/torture/pr39204.c: New testcase. + +2009-02-17 Bingfeng Mei + + * gcc.dg/vect/vect-outer-5.c: Require vect_float support. + * gcc.dg/vect/vect-outer-6.c: Ditto. + +2009-02-16 Joseph Myers + + PR c/35446 + * gcc.dg/noncompile/init-5.c: New test. + * gcc.dg/init-bad-4.c: Adjust expected errors. + 2009-02-16 H.J. Lu PR target/37049 --- gcc/langhooks.c (revision 144236) +++ gcc/langhooks.c (revision 144237) @@ -437,7 +437,7 @@ lhd_print_error_function (diagnostic_con while (block && TREE_CODE (block) == BLOCK) block = BLOCK_SUPERCONTEXT (block); - if (TREE_CODE (block) == FUNCTION_DECL) + if (block && TREE_CODE (block) == FUNCTION_DECL) fndecl = block; abstract_origin = NULL; } --- gcc/tree-ssa-pre.c (revision 144236) +++ gcc/tree-ssa-pre.c (revision 144237) @@ -1707,6 +1707,9 @@ phi_translate_1 (pre_expr expr, bitmap_s tree def = PHI_ARG_DEF (phi, e->dest_idx); pre_expr newexpr; + if (TREE_CODE (def) == SSA_NAME) + def = VN_INFO (def)->valnum; + /* Handle constant. */ if (is_gimple_min_invariant (def)) return get_or_alloc_expr_for_constant (def); --- gcc/tree-ssa-structalias.c (revision 144236) +++ gcc/tree-ssa-structalias.c (revision 144237) @@ -3405,8 +3405,8 @@ do_structure_copy (tree lhsop, tree rhso { if (!do_simple_structure_copy (lhs, rhs, MIN (lhssize, rhssize))) { - lhs.var = collapse_rest_of_var (lhs.var); - rhs.var = collapse_rest_of_var (rhs.var); + lhs.var = collapse_rest_of_var (get_varinfo_fc (lhs.var)->id); + rhs.var = collapse_rest_of_var (get_varinfo_fc (rhs.var)->id); lhs.offset = 0; rhs.offset = 0; lhs.type = SCALAR; @@ -4935,6 +4935,7 @@ find_what_p_points_to (tree p) { pi->pt_vars = NULL; if (pruned > 0 + && !pi->pt_null && pi->is_dereferenced && warn_strict_aliasing > 0 && !SSA_NAME_IS_DEFAULT_DEF (p)) --- gcc/c-parser.c (revision 144236) +++ gcc/c-parser.c (revision 144237) @@ -3036,6 +3036,7 @@ c_parser_braced_init (c_parser *parser, ret.value = error_mark_node; ret.original_code = ERROR_MARK; c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, "expected %<}%>"); + pop_init_level (0); return ret; } c_parser_consume_token (parser); --- gcc/config/soft-fp/double.h (revision 144236) +++ gcc/config/soft-fp/double.h (revision 144237) @@ -1,6 +1,7 @@ /* Software floating-point emulation. Definitions for IEEE Double Precision - Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), Jakub Jelinek (jj@ultra.linux.cz), @@ -203,13 +204,13 @@ union _FP_UNION_D #define FP_UNPACK_SEMIRAW_D(X,val) \ do { \ - _FP_UNPACK_RAW_2(1,X,val); \ + _FP_UNPACK_RAW_1(D,X,val); \ _FP_UNPACK_SEMIRAW(D,1,X); \ } while (0) #define FP_UNPACK_SEMIRAW_DP(X,val) \ do { \ - _FP_UNPACK_RAW_2_P(1,X,val); \ + _FP_UNPACK_RAW_1_P(D,X,val); \ _FP_UNPACK_SEMIRAW(D,1,X); \ } while (0)