- 30 Apr, 2012 9 commits
-
-
When -ftrack-macro-expansion is activated, the PCH generation machinery can crash in gt_pch_save when it's about to relocate the pointer for the line_maps::info_macro::maps[i]::d.macro.macro_locations member. The call that crashes (in ggc-common.c) is: state.ptrs[i]->note_ptr_fn (state.ptrs[i]->obj, state.ptrs[i]->note_ptr_cookie, relocate_ptrs, &state); The ->note_ptr_fn called in this case is the gengtype-generated gt_pch_p_9line_maps function. It crashes because the second argument passed to it is a pointer to struct line_map, instead of being a pointer to struct line_maps (extra 's') like what the function expects. You can see the crash for the test case: runtest --tool g++ --tool_opts="-ftrack-macro-expansion" pch.exp=system-1.C I believe it's because a part of the code of gt_pch_nx_line_maps (generated as part of gtype-desc.c by gengtype) is not correct. Note that this gt_pch_nx_line_maps function is called from gt_pch_save in the snippet: for (rt = gt_ggc_rtab; *rt; rt++) for (rti = *rt; rti->base != NULL; rti++) for (i = 0; i < rti->nelt; i++) (*rti->pchw)(*(void **)((char *)rti->base + rti->stride * i)); So, in that gt_pch_nx_line_maps, in the branch that starts with the code: if ((*x).info_macro.maps != NULL) { size_t i3; for (i3 = 0; i3 != (size_t)(((*x).info_macro).used); i3++) { switch (((*x).info_macro.maps[i3]).reason == LC_ENTER_MACRO) we have the code: gt_pch_note_object ((*x).info_macro.maps[i3].d.macro.macro_locations, (*x).info_macro.maps, gt_pch_p_9line_maps, gt_types_enum_last); This last snippet registers gt_pch_p_9line_maps to be called on the object pointed by (*x).info_macro.maps[i3].d.macro.macro_locations (as a first argument), with (*x).info_macro.maps as its second argument. Note that (*x).info_macro.maps is of type struct line_map*, while 'x' is of type struct line_maps* - beware, there is an 's' at the end of the latter. The problem is that gt_pch_p_9line_maps requires that its second argument be an instance of _struct line_maps_, not struct line_map. So later when gt_pch_p_9line_maps is called, it just crashes. More generally, these gt_pch_p_xxx functions seem to require that their second argument be an instance of the xxx in question. And that invariant is violated by the snippet of code above. The invariant seems to be violated only for the case where a GTYed structure (possibly embedded in another GTYed structure) contains a pointer to a scalar (that is not a string) which memory is ggc/GTY managed, like the line_map_macro::macro_locations field. And this only happens for PCH generation. Looking at gengtype.c, it seems like write_types_process_field can be fooled in that case. It expects that the expression d->prev_val[3] contains the name of the second argument of the gt_pch_p_xxx (which is generically referenced by wtd->subfield_marker_routine there). That expression can resolve to either "x", as we would like it to be, but can also resolve to another arbitrary name for e.g, the case of a pointer-to-struct used as a root). This patch simply forces the second argument of gt_pch_p_xxx to be 'x' even in the case of a member that is a pointer to a scalar. As a result, here is the the diff the new generated gtype-desc.c file: @@ -5234,7 +5234,7 @@ gt_pch_nx_line_maps (void *x_p) size_t i2; for (i2 = 0; i2 != (size_t)(2 * ((*x).info_ordinary.maps[i0].d.macro).n_tokens); i2++) { } - gt_pch_note_object ((*x).info_ordinary.maps[i0].d.macro.macro_locations, (*x).info_ordinary.maps, gt_pch_p_9line_maps, gt_types_enum_last); + gt_pch_note_object ((*x).info_ordinary.maps[i0].d.macro.macro_locations, x, gt_pch_p_9line_maps, gt_types_enum_last); } break; default: @@ -5261,7 +5261,7 @@ gt_pch_nx_line_maps (void *x_p) size_t i5; for (i5 = 0; i5 != (size_t)(2 * ((*x).info_macro.maps[i3].d.macro).n_tokens); i5++) { } - gt_pch_note_object ((*x).info_macro.maps[i3].d.macro.macro_locations, (*x).info_macro.maps, gt_pch_p_9line_maps, gt_types_enum_last); + gt_pch_note_object ((*x).info_macro.maps[i3].d.macro.macro_locations, x, gt_pch_p_9line_maps, gt_types_enum_last); } break; default: @@ -9366,7 +9366,7 @@ gt_pch_na_regno_reg_rtx (ATTRIBUTE_UNUSED void *x_p) for (i1 = 0; i1 != (size_t)(crtl->emit.x_reg_rtx_no); i1++) { gt_pch_n_7rtx_def (regno_reg_rtx[i1]); } - gt_pch_note_object (regno_reg_rtx, ®no_reg_rtx, gt_pch_pa_regno_reg_rtx, gt_types_enum_last); + gt_pch_note_object (regno_reg_rtx, x, gt_pch_pa_regno_reg_rtx, gt_types_enum_last); } } I think it's pretty much what I was willing to have. Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk. Note that the bootstrap with -ftrack-macro-expansion exhibits other separate issues that are addressed in subsequent patches. This patch just fixes one class of problems. The patch does pass bootstrap with -ftrack-macro-expansion turned off, though. gcc/ * gengtype.c (write_types_process_field): Force second argument of the call to the PCH object hierarchy walker to be 'x'. From-SVN: r186967
Dodji Seketeli committed -
This patch makes token pasting work with -ftrack-macro-expansion turned on. It improves some pasting related tests of the gcc.dg/cpp subdirectory. Tested and bootstrapped on x86_64-unknown-linux-gnu against trunk. Note that the bootstrap with -ftrack-macro-expansion exhibits other separate issues that are addressed in subsequent patches. This patch just fixes one class of problems. The patch does pass bootstrap with -ftrack-macro-expansion turned off, though. libcpp/ * macro.c (paste_all_tokens): Put the token resulting from pasting into an extended token context with -ftrack-macro-location is in effect. gcc/testsuite/ * gcc.dg/cpp/paste17.c: New test case for -ftrack-macro-expansion=2 mode only. * gcc.dg/cpp/macro-exp-tracking-5.c: Likewise. From-SVN: r186966
Dodji Seketeli committed -
cpp_sys_macro_p crashes when -ftrack-macro-expansion is on. The issue can be reproduced by running the tests: runtest --tool gcc --tool_opts="-ftrack-macro-expansion" cpp.exp=sysmac1.c runtest --tool gcc --tool_opts="-ftrack-macro-expansion" cpp.exp=sysmac2.c This is because it just doesn't support that mode. Fixed thus. Tested and bootstrapped on x86_64-unknown-linux-gnu against trunk. Note that the bootstrap with -ftrack-macro-expansion turned on exhibits other separate issues that are addressed in subsequent patches. This patch just fixes one class of problems. The patch does pass bootstrap with -ftrack-macro-expansion turned off, though. libcpp/ * macro.c (cpp_sys_macro_p): Support -ftrack-macro-expansion. From-SVN: r186965
Dodji Seketeli committed -
* gcc-interface/decl.c (gnat_to_gnu_entity): In type annotation mode, do not adjust the size of a tagged type if there is a representation clause on it. Otherwise, round the adjustment up to the alignment of the first field and use the appropriate helper routine. (maybe_pad_type): Do not warn in type annotation mode on a tagged type. (gnat_to_gnu_field): Do not error out under the same circumstances. (annotate_rep): In type annotation mode, do not adjust the offset of components of a tagged type with representation clause. Otherwise, round the adjustment up to the alignment of the first field. From-SVN: r186961
Eric Botcazou committed -
* config/i386/i386.c (ix86_handle_struct_attribute): Use the proper predicate to discriminate types. ada/ * gcc-interface/utils.c (finish_record_type): Force the traditional GCC layout for bitfields on the type if it is packed or has a representation clause and an alternate layout is available. From-SVN: r186958
Eric Botcazou committed -
c-common.c (check_function_arguments): Replace Wmissing-format-attribute with Wsuggest-attribute=format. 2012-04-30 Manuel López-Ibáñez <manu@gcc.gnu.org> * c-common.c (check_function_arguments): Replace Wmissing-format-attribute with Wsuggest-attribute=format. From-SVN: r186957
Manuel López-Ibáñez committed -
* gcc-interface/gigi.h (mark_out_of_scope): Delete. (destroy_gnat_to_gnu): Declare. (destroy_dummy_type): Likewise. * gcc-interface/decl.c (mark_out_of_scope): Delete. * gcc-interface/utils.c (destroy_gnat_to_gnu): New function. (destroy_dummy_type): Likewise. * gcc-interface/trans.c (gnat_validate_uc_list): New variable. (gigi): Call validate_unchecked_conversion on gnat_validate_uc_list after the translation is completed. Call destroy_gnat_to_gnu and destroy_dummy_type at the end. (Subprogram_Body_to_gnu): Do not call mark_out_of_scope. (gnat_to_gnu) <N_Block_Statement>: Likewise. <N_Validate_Unchecked_Conversion>: Do not process the node, only push it onto gnat_validate_uc_list. (validate_unchecked_conversion): New function. From-SVN: r186956
Eric Botcazou committed -
2012-04-30 Manuel López-Ibáñez <manu@gcc.gnu.org> gcc/ * doc/invoke.texi (Wmissing-format-attribute): Document as an alias of Wsuggest-attribute=format. c-family/ * c.opt (Wsuggest-attribute=format): New. Alias of Wmissing-format-attribute. * c-format.c (decode_format_type): Replace Wmissing-format-attribute with Wsuggest-attribute=format. (check_function_format): Likewise. cp/ * typeck.c (convert_for_assignment): Replace Wmissing-format-attribute with Wsuggest-attribute=format. * call.c (convert_for_arg_passing): Likewise. gcc/ * c-typeck.c (convert_for_assignment): Replace Wmissing-format-attribute with Wsuggest-attribute=format. (digest_init): Likewise. From-SVN: r186955
Manuel López-Ibáñez committed -
From-SVN: r186952
GCC Administrator committed
-
- 29 Apr, 2012 10 commits
-
-
2012-04-29 Marc Glisse <marc.glisse@inria.fr> Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/51795 * include/bits/stl_algobase.h (__lg<>(_Size)): Remove. (__lg(int), __lg(unsigned), __lg(long), __lg(unsigned long), __lg(long long), __lg(unsigned long long)): Define constexpr. * include/bits/random.h (_Mod<>): Overcome Schrage's algorithm limitations. (__mod): Adjust. (linear_congruential): Remove FIXME static_assert. * include/bits/random.tcc (_Mod<>): Adjust. * testsuite/26_numerics/random/linear_congruential_engine/operators/ 51795.cc: New. Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com> From-SVN: r186948
Marc Glisse committed -
* include/std/functional (function::function(F)): LWG 2132: Disable constructor if argument isn't callable. * testsuite/20_util/function/cons/callable.cc: New. From-SVN: r186947
Jonathan Wakely committed -
I noticed that the file lex.c had C++ style comments, which I believe is against the coding standards of the project. Fixed, tested and applied to master as per the obvious rule. libcpp/ * lex.c (lex_raw_string): Change C++ style comments into C style comments. (lex_string): Likewise. From-SVN: r186946
Dodji Seketeli committed -
2012-04-29 Manuel López-Ibáñez <manu@gcc.gnu.org> PR 53149 * gcc.dg/20011021-1.c: Adjust testcase. From-SVN: r186945
Manuel López-Ibáñez committed -
2012-04-29 Marc Glisse <marc.glisse@inria.fr> PR libstdc++/22200 * include/std/limits (numeric_limits<>::is_modulo): False for signed types. From-SVN: r186944
Marc Glisse committed -
2012-04-29 Manuel López-Ibáñez <manu@gcc.gnu.org> * opts.c (finish_options): Do not handle -Wmissing-noreturn here. * common.opt (Wmissing-noreturn): Alias of -Wsuggest-attribute=noreturn. From-SVN: r186943
Manuel López-Ibáñez committed -
re PR fortran/53148 (Incorrect intrinsic function parsing on labeled statements when compiled w/ -ffrontend-optimize) 2012-04-29 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/53148 * frontend-passes.c (create_var): If the statement has a label, put the label around the block. 2012-04-29 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/53148 * gfortran.dg/function_optimize_12.f90: New test. From-SVN: r186942
Thomas Koenig committed -
PR target/53156 * gcc.target/cris/peep2-andu2.c: Tweak expected assembly code to match current output and cover new peephole2 pattern. From-SVN: r186941
Hans-Peter Nilsson committed -
PR target/53156 * config/cris/cris.md (andqu): New peephole2. (andu): Tweak head comment. From-SVN: r186940
Hans-Peter Nilsson committed -
From-SVN: r186938
GCC Administrator committed
-
- 28 Apr, 2012 6 commits
-
-
From-SVN: r186934
Doug Evans committed -
libgcc/ 2012-04-28 Aurelien Jarno <aurelien@aurel32.net> * config.host (mips64*-*-linux*, mipsisa64*-*-linux*): Remove. (mips*-*-linux*): Include mips/t-tpbit when long double is 16 bytes long. From-SVN: r186931
Aurelien Jarno committed -
Fixes issue 7. From-SVN: r186929
Ian Lance Taylor committed -
PR tree-optimization/38785 * common.opt (ftree-partial-pre): New option. * doc/invoke.texi: Document it. * opts.c (default_options_table): Initialize flag_tree_partial_pre. * tree-ssa-pre.c (do_partial_partial_insertion): Insert only if it will benefit speed path. (execute_pre): Use flag_tree_partial_pre. Co-Authored-By: Maxim Kuvyrkov <maxim@codesourcery.com> Co-Authored-By: Steven Bosscher <steven@gcc.gnu.org> From-SVN: r186928
Joern Rennecke committed -
Fixes issue 8 in gofrontend issues list. From-SVN: r186926
Ian Lance Taylor committed -
From-SVN: r186925
GCC Administrator committed
-
- 27 Apr, 2012 15 commits
-
-
PR target/52999 * config/pa/pa.c (pa_legitimate_constant_p): Don't put function labels in constant pool. From-SVN: r186919
John David Anglin committed -
From-SVN: r186918
Tom Tromey committed -
PR go/52358 configure, runtime: Provide i386 long double math functions if needed. From-SVN: r186915
Ian Lance Taylor committed -
PR go/52358 math: Work around bug in Solaris 9 implementation of ldexp. The bug is that ldexp(-1, -1075) should return -0, but the Solaris 9 implementation returns +0. From-SVN: r186913
Ian Lance Taylor committed -
From-SVN: r186911
Ian Lance Taylor committed -
This option, which is enabled by default, causes the preprocessor to warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore. According to [lex.ext]p10, this is ill-formed. Also modifies the preprocessor to treat such ill-formed suffixes as separate preprocessing tokens. This is consistent with the Clang front end (see http://llvm.org/viewvc/llvm-project?view=rev&revision=152287), and enables backwards compatibility with code that uses formatting macros from <inttypes.h>, as in the following code block: int main() { int64_t i64 = 123; printf("My int64: %"PRId64"\n", i64); } Google ref b/6377711. 2012-04-27 Ollie Wild <aaw@google.com> PR c++/52538 * gcc/c-family/c-common.c: Add CPP_W_LITERAL_SUFFIX mapping. * gcc/c-family/c-opts.c (c_common_handle_option): Handle OPT_Wliteral_suffix. * gcc/c-family/c.opt: Add Wliteral-suffix. * gcc/doc/invoke.texi (Wliteral-suffix): Document new option. * gcc/testsuite/g++.dg/cpp0x/Wliteral-suffix.c: New test. * libcpp/include/cpplib.h (struct cpp_options): Add new field, warn_literal_suffix. (CPP_W_LITERAL_SUFFIX): New enum. * libcpp/init.c (cpp_create_reader): Default initialization of warn_literal_suffix. * libcpp/lex.c (lex_raw_string): Treat user-defined literals which don't begin with '_' as separate tokens and produce a warning. (lex_string): Ditto. From-SVN: r186909
Ollie Wild committed -
gcc * dwarf2out.c (dwarf_stack_op_name): Use get_DW_OP_name. (dwarf_tag_name): Use get_DW_TAG_name. (dwarf_attr_name): Use get_DW_AT_name. (dwarf_form_name): Use get_DW_FORM_name. * dwarf2cfi.c (dwarf_cfi_name): Use get_DW_CFA_name. include * dwarf2.h (enum dwarf_tag, enum dwarf_form, enum dwarf_attribute) (enum dwarf_location_atom, enum dwarf_type, enum dwarf_call_frame_info): Remove. (DW_TAG, DW_TAG_DUP, DW_FORM, DW_AT, DW_AT_DUP, DW_OP) (DW_OP_DUP, DW_ATE, DW_ATE_DUP, DW_CFA): New macros. Include dwarf2.def. (get_DW_TAG_name, get_DW_AT_name, get_DW_FORM_name) (get_DW_OP_name, get_DW_ATE_name): Declare. * dwarf2.def: New file, from dwarf2.h. libiberty * dwarfnames.c: New file. * Makefile.in (CFILES): Add dwarfnames. (REQUIRED_OFILES): Add dwarfnames. (./dwarfnames.$(objext)): New target. From-SVN: r186908
Tom Tromey committed -
2012-04-27 Paolo Bonzini <bonzini@gnu.org> * tree-ssa-phiopt.c (conditional_replacement): Replace PHIs whose arguments are -1 and 0, by negating the result of the conditional. testsuite: 2012-04-27 Paolo Bonzini <bonzini@gnu.org> * gcc.c-torture/execute/20120427-2.c: New testcase. * gcc.dg/tree-ssa/phi-opt-10.c: New testcase. * gcc.dg/tree-ssa/ssa-pre-28.c: Bypass new optimization. * gcc.dg/tree-ssa/ssa-ifcombine-7.c: Look into ifcombine dump. From-SVN: r186905
Paolo Bonzini committed -
2012-04-27 Paolo Bonzini <bonzini@gnu.org> PR target/53138 * config/i386/i386.md (x86_mov<mode>cc_0_m1_neg): Add clobber. testsuite: 2012-04-27 Paolo Bonzini <bonzini@gnu.org> PR target/53138 * gcc.c-torture/execute/20120427-1.c: New testcase. From-SVN: r186904
Paolo Bonzini committed -
2012-04-27 Richard Guenther <rguenther@suse.de> * tree-flow.h (is_hidden_global_store): Remove. * tree-ssa-sink.c (is_hidden_global_store): Likewise. * tree-ssa-alias.h (ref_may_alias_global_p): Declare. (stmt_may_clobber_global_p): Likewise. * tree-ssa-alias.c (ref_may_alias_global_p): New function. (stmt_may_clobber_global_p): Likewise. * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Call stmt_may_clobber_global_p. * tree-ssa-dse.c (dse_possible_dead_store_p): Likewise. From-SVN: r186903
Richard Guenther committed -
* cfg.c (disconnect_src): Do df_mark_solutions_dirty in the right place. From-SVN: r186902
Steven Bosscher committed -
tree-switch-conversion.c (struct switch_conv_info): Add range_max, reorganize some fields and update comments. gcc/ * tree-switch-conversion.c (struct switch_conv_info): Add range_max, reorganize some fields and update comments. Rename bit_test_uniq and bit_test_count to uniq resp. count. Remove bit_test_bb. (collect_switch_conv_info): New function, collects info about a GIMPLE_SWITCH into a struct switch_conv_info. (check_range): Simplify to use pre-recorded info. Fix think-o in range-branch ratio check. (check_process_case): Remove function. (check_all_empty_except_final): New function, verifies that all non-final basic blocks are empty. (process_switch): Simplify to use pre-recorded info. Call collect_switch_conv_info to do that. Assert that degenerate switch statements have been cleaned up. From-SVN: r186901
Steven Bosscher committed -
2012-04-27 Marc Glisse <marc.glisse@inria.fr> PR middle-end/27139 * tree-ssa-forwprop.c (combine_conversions): Handle INT->FP->INT. * gcc.dg/tree-ssa/forwprop-18.c: New test. From-SVN: r186898
Marc Glisse committed -
2012-04-25 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/53130 * c-typeck.c (pop_init_level): Use %qD instead of %qT. From-SVN: r186896
Manuel López-Ibáñez committed -
2012-04-27 Tom de Vries <tom@codesourcery.com> PR tree-optimization/51879 * gcc.dg/pr51879.c: New test. * gcc.dg/pr51879-2.c: Same. * gcc.dg/pr51879-3.c: Same. * gcc.dg/pr51879-4.c: Same. * gcc.dg/pr51879-6.c: Same. From-SVN: r186895
Tom de Vries committed
-