1. 05 Jan, 2015 1 commit
  2. 03 Nov, 2014 1 commit
  3. 21 Oct, 2014 1 commit
    • State cleanups from jit branch · 3edf64aa
      gcc/ChangeLog:
      	* cgraph.c (cgraph_c_finalize): New function.
      	* cgraph.h (cgraph_c_finalize): New prototype.
      	(cgraphunit_c_finalize): New prototype.
      	* cgraphunit.c (first_analyzed): Move from analyze_functions
      	to file-scope.
      	(first_analyzed_var): Likewise.
      	(analyze_functions): Move static variables into file-scope.
      	(cgraphunit_c_finalize): New function.
      	* diagnostic.c (diagnostic_finish): Free the memory for
      	context->classify_diagnostic and context->printer, running the
      	destructor for the latter.
      	(bt_stop): Use toplev::main.
      	* dwarf2out.c (dwarf2out_finalize): New function.
      	* dwarf2out.h (dwarf2out_c_finalize): New prototype.
      	* gcse.c (gcse_c_finalize): New function.
      	* gcse.h (gcse_c_finalize): New prototype.
      	* ggc-page.c (init_ggc): Make idempotent.
      	* input.c (input_location): Initialize to UNKNOWN_LOCATION.
      	* ipa-cp.c (ipa_cp_c_finalize): New function.
      	* ipa-prop.h (ipa_cp_c_finalize): New prototype.
      	* ipa-pure-const.c (function_insertion_hook_holder): Move to be
      	a field of class pass_ipa_pure_const.
      	(node_duplication_hook_holder): Likewise.
      	(node_removal_hook_holder): Likewise.
      	(register_hooks): Convert to method...
      	(pass_ipa_pure_const::register_hooks): ...here, converting
      	static variable init_p into...
      	(pass_ipa_pure_const::init_p): ...new field.
      	(pure_const_generate_summary): Update invocation of
      	register_hooks to invoke as a method of current_pass.
      	(pure_const_read_summary): Likewise.
      	(propagate): Convert to...
      	(pass_ipa_pure_const::execute): ...method.
      	* ipa-reference.c (ipa_init): Move static bool init_p from here
      	to...
      	(ipa_init_p): New file-scope variable, so that it can be reset
      	when repeatedly invoking the compiler within one process by...
      	(ipa_reference_c_finalize): New function.
      	* ipa-reference.h (ipa_reference_c_finalize): New.
      	* main.c (main): Replace invocation of toplev_main with
      	construction of a toplev instance, and call its "main" method.
      	* params.c (global_init_params): Add an assert that
      	params_finished is false.
      	(params_c_finalize): New.
      	* params.h (params_c_finalize): New.
      	* passes.c (execute_ipa_summary_passes): Set "current_pass" before
      	invoking generate_summary, for the benefit of pass_ipa_pure_const.
      	(ipa_write_summaries_2): Assign "pass" to "current_pass" global
      	before calling write_summary hook.
      	(ipa_write_optimization_summaries_1): Likewise when calling
      	write_optimization_summary hook.
      	(ipa_read_summaries_1): Likewise for read_summary hook.
      	(ipa_read_optimization_summaries_1): Likewise for
      	read_optimization_summary hook.
      	(execute_ipa_stmt_fixups): Likewise.
      	* stringpool.c (init_stringpool): Clean up if we're called more
      	than once.
      	* timevar.c (timevar_init): Ignore repeated calls.
      	* toplev.c: Include "dwarf2out.h", "ipa-reference.h", "gcse.h",
      	"ipa-prop.h".
      	(general_init): Reset "input_location" to UNKNOWN_LOCATION.
      	(initialize_rtl): Move static local "initialized_once"
      	into file scope, and rename to...
      	(rtl_initialized): New variable.
      	(do_compile): Move timevar initialization from here to
      	toplev::start_timevars.
      	(toplev::toplev, toplev::~toplev, toplev::start_timevars,
      	toplev::finalize): New functions.
      	(toplev_main): Rename to...
      	(toplev::main): ...this.
      	* toplev.h (class toplev): New class.
      
      From-SVN: r216522
      David Malcolm committed
  4. 15 Aug, 2014 1 commit
  5. 16 Jul, 2014 1 commit
    • Support location tracking for built-in macro tokens · c468587a
      When a built-in macro is expanded, the location of the token in the
      epansion list is the location of the expansion point of the built-in
      macro.
      
      This patch creates a virtual location for that token instead,
      effectively tracking locations of tokens resulting from built-in macro
      tokens.
      
      libcpp/
      	* include/line-map.h (line_maps::builtin_location): New data
      	member.
      	(line_map_init): Add a new parameter to initialize the new
      	line_maps::builtin_location data member.
      	* line-map.c (linemap_init): Initialize the
      	line_maps::builtin_location data member.
      	* macro.c (builtin_macro): Create a macro map and track the token
      	resulting from the expansion of a built-in macro.
      gcc/
      	* input.h (is_location_from_builtin_token): New function
      	declaration.
      	* input.c (is_location_from_builtin_token): New function
      	definition.
      	* toplev.c (general_init): Tell libcpp what the pre-defined
      	spelling location for built-in tokens is.
      
      Signed-off-by: Dodji Seketeli <dodji@redhat.com>
      
      From-SVN: r212637
      Dodji Seketeli committed
  6. 28 Jan, 2014 1 commit
  7. 24 Jan, 2014 1 commit
  8. 23 Jan, 2014 1 commit
    • PR preprocessor/58580 - preprocessor goes OOM with warning for zero literals · 7ecc3eb9
      In this problem report, the compiler is fed a (bogus) translation unit
      in which some literals contain bytes whose value is zero.  The
      preprocessor detects that and proceeds to emit diagnostics for that
      king of bogus literals.  But then when the diagnostics machinery
      re-reads the input file again to display the bogus literals with a
      caret, it attempts to calculate the length of each of the lines it got
      using fgets.  The line length calculation is done using strlen.  But
      that doesn't work well when the content of the line can have several
      zero bytes.  The result is that the read_line never sees the end of
      the line because strlen repeatedly reports that the line ends before
      the end-of-line character; so read_line thinks its buffer for reading
      the line is too small; it thus increases the buffer, leading to a huge
      memory consumption and disaster.
      
      Here is what this patch does.
      
      location_get_source_line is modified to return the length of a source
      line that can now contain bytes with zero value.
      diagnostic_show_locus() is then modified to consider that a line can
      have characters of value zero, and so just shows a white space when
      instructed to display one of these characters.
      
      Additionally location_get_source_line is modified to avoid re-reading
      each and every line from the beginning of the file until it reaches
      the line number N that it is instructed to get; this was leading to
      annoying quadratic behaviour when reading adjacent lines near the end
      of (big) files.  So a cache is now associated to the file opened in
      text mode.  When the content of the file is read, that content is
      stashed in the file cache.  That file cache is searched for line
      delimiters.  A number of line positions are saved in the cache and a
      number of file caches are kept in memory.  That way when
      location_get_source_line is asked to read line N + 1, it just has to
      start reading from line N that it has already read.
      
      libcpp/ChangeLog:
      
      	* include/line-map.h (linemap_get_file_highest_location): Declare
      	new function.
      	* line-map.c (linemap_get_file_highest_location): Define it.
      
      gcc/ChangeLog:
      
      	* input.h (location_get_source_line): Take an additional line_size
      	parameter.
      	(void diagnostics_file_cache_fini): Declare new function.
      	* input.c (struct fcache): New type.
      	(fcache_tab_size, fcache_buffer_size, fcache_line_record_size):
      	New static constants.
      	(diagnostic_file_cache_init, total_lines_num)
      	(lookup_file_in_cache_tab, evicted_cache_tab_entry)
      	(add_file_to_cache_tab, lookup_or_add_file_to_cache_tab)
      	(needs_read, needs_grow, maybe_grow, read_data, maybe_read_data)
      	(get_next_line, read_next_line, goto_next_line, read_line_num):
      	New static function definitions.
      	(diagnostic_file_cache_fini): New function.
      	(location_get_source_line): Take an additional output line_len
      	parameter.  Re-write using lookup_or_add_file_to_cache_tab and
      	read_line_num.
      	* diagnostic.c (diagnostic_finish): Call
      	diagnostic_file_cache_fini.
      	(adjust_line): Take an additional input parameter for the length
      	of the line, rather than calculating it with strlen.
      	(diagnostic_show_locus): Adjust the use of
      	location_get_source_line and adjust_line with respect to their new
      	signature.  While displaying a line now, do not stop at the first
      	null byte.  Rather, display the zero byte as a space and keep
      	going until we reach the size of the line.
      	* Makefile.in: Add vec.o to OBJS-libcommon
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/cpp/warning-zero-in-literals-1.c: New test file.
      
      Signed-off-by: Dodji Seketeli <dodji@seketeli.org>
      
      From-SVN: r206957
      Dodji Seketeli committed
  9. 02 Jan, 2014 1 commit
  10. 06 Nov, 2013 2 commits
    • Revert "preprocessor/58580 - preprocessor goes OOM with warning for zero literals" · 7f4d640c
      This reverts commit fc3eff8854861fcd70d33d26095b17fe456fae31.
      
      From-SVN: r204490
      Dodji Seketeli committed
    • preprocessor/58580 - preprocessor goes OOM with warning for zero literals · 9789a912
      In this problem report, the compiler is fed a (bogus) translation unit
      in which some literals contain bytes whose value is zero.  The
      preprocessor detects that and proceeds to emit diagnostics for that
      king of bogus literals.  But then when the diagnostics machinery
      re-reads the input file again to display the bogus literals with a
      caret, it attempts to calculate the length of each of the lines it got
      using fgets.  The line length calculation is done using strlen.  But
      that doesn't work well when the content of the line can have several
      zero bytes.  The result is that the read_line never sees the end of
      the line because strlen repeatedly reports that the line ends before
      the end-of-line character; so read_line thinks its buffer for reading
      the line is too small; it thus increases the buffer, leading to a huge
      memory consumption, pain and disaster.
      
      The patch below introduces a new get_line function that returns the
      next line of a file and return the length of that line even if the
      line contains zero bytes.  That get_line function has been adapted
      from the getline function from the GNU C Library because getline being
      a GNU extension it is not necessarily supported on all platforms.
      read_line is then modified to return the length of the line along with
      the line itself, as the line can now contain zero bytes.  Callers of
      read_line are adjusted consequently.
      
      diagnostic_show_locus() is modified to consider that a line can have
      characters of value zero, and so just shows a white space when
      instructed to display one of these characters.
      
      gcc/ChangeLog:
      
      	* input.h (location_get_source_line): Take an additional line_size
      	parameter.
      	* input.c (get_line): New static function definition.
      	(read_line): Take an additional line_length output parameter to be
      	set to the size of the line.  Use the new get_line function do the
      	actual line reading.
      	(location_get_source_line): Take an additional output line_len
      	parameter.  Update the use of read_line to pass it the line_len
      	parameter.
      	* diagnostic.c (adjust_line): Take an additional input parameter
      	for the length of the line, rather than calculating it with
      	strlen.
      	(diagnostic_show_locus): Adjust the use of
      	location_get_source_line and adjust_line with respect to their new
      	signature.  While displaying a line now, do not stop at the first
      	null byte.  Rather, display the zero byte as a space and keep
      	going until we reach the size of the line.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/cpp/warning-zero-in-literals-1.c: New test file.
      
      From-SVN: r204453
      Dodji Seketeli committed
  11. 10 Jan, 2013 1 commit
  12. 19 Sep, 2012 1 commit
    • Integrate lexical block into source_location. · 5368224f
      gcc:
      	2012-09-19  Dehao Chen  <dehao@google.com>
      
      	* toplev.c (general_init): Init block_locations.
      	* tree.c (tree_set_block): New.
      	(tree_block): Change to use LOCATION_BLOCK.
      	* tree.h (TREE_SET_BLOCK): New.
      	* final.c (reemit_insn_block_notes): Change to use LOCATION_BLOCK.
      	(final_start_function): Likewise.
      	* input.c (expand_location_1): Likewise.
      	* input.h (LOCATION_LOCUS): New.
      	(LOCATION_BLOCK): New.
      	(IS_UNKNOWN_LOCATION): New.
      	* fold-const.c (expr_location_or): Change to use new location.
      	* reorg.c (emit_delay_sequence): Likewise.
      	(try_merge_delay_insns): Likewise.
      	* modulo-sched.c (dump_insn_location): Likewise.
      	* lto-streamer-out.c (lto_output_location_bitpack): Likewise.
      	* lto-cgraph.c (output_node_opt_summary): Likewise.
      	* jump.c (rtx_renumbered_equal_p): Likewise.
      	* ifcvt.c (noce_try_move): Likewise.
      	(noce_try_store_flag): Likewise.
      	(noce_try_store_flag_constants): Likewise.
      	(noce_try_addcc): Likewise.
      	(noce_try_store_flag_mask): Likewise.
      	(noce_try_cmove): Likewise.
      	(noce_try_cmove_arith): Likewise.
      	(noce_try_minmax): Likewise.
      	(noce_try_abs): Likewise.
      	(noce_try_sign_mask): Likewise.
      	(noce_try_bitop): Likewise.
      	(noce_process_if_block): Likewise.
      	(cond_move_process_if_block): Likewise.
      	(find_cond_trap): Likewise.
      	* ipa-prop.c (ipa_set_jf_constant): Likewise.
      	(ipa_write_jump_function): Likewise.
      	* dwarf2out.c (add_src_coords_attributes): Likewise.
      	* expr.c (expand_expr_real): Likewise.
      	* tree-parloops.c (create_loop_fn): Likewise.
      	* recog.c (peep2_attempt): Likewise.
      	* function.c (free_after_compilation): Likewise.
      	(expand_function_end): Likewise.
      	(set_insn_locations): Likewise.
      	(thread_prologue_and_epilogue_insns): Likewise.
      	* print-rtl.c (print_rtx): Likewise.
      	* profile.c (branch_prob): Likewise.
      	* trans-mem.c (ipa_tm_scan_irr_block): Likewise.
      	* gimplify.c (gimplify_call_expr): Likewise.
      	* except.c (duplicate_eh_regions_1): Likewise.
      	* emit-rtl.c (try_split): Likewise.
      	(make_insn_raw): Likewise.
      	(make_debug_insn_raw): Likewise.
      	(make_jump_insn_raw): Likewise.
      	(make_call_insn_raw): Likewise.
      	(emit_pattern_after_setloc): Likewise.
      	(emit_pattern_after): Likewise.
      	(emit_debug_insn_after): Likewise.
      	(emit_pattern_before): Likewise.
      	(emit_insn_before_setloc): Likewise.
      	(emit_jump_insn_before): Likewise.
      	(emit_call_insn_before_setloc): Likewise.
      	(emit_call_insn_before): Likeise.
      	(emit_debug_insn_before_setloc): Likewise.
      	(emit_copy_of_insn_after): Likewise.
      	(insn_locators_alloc): Remove.
      	(insn_locators_finalize): Remove.
      	(insn_locators_free): Remove.
      	(set_curr_insn_source_location): Remove.
      	(get_curr_insn_source_location): Remove.
      	(set_curr_insn_block): Remove.
      	(get_curr_insn_block): Remove.
      	(locator_scope): Remove.
      	(insn_scope): Change to use new location.
      	(locator_location): Remove.
      	(insn_line): Change to use new location.
      	(locator_file): Remove.
      	(insn_file): Change to use new location.
      	(locator_eq): Remove.
      	(insn_locations_init): New.
      	(insn_locations_finalize): New.
      	(set_curr_insn_location): New.
      	(curr_insn_location): New.
      	* cfgexpand.c (gimple_assign_rhs_to_tree): Change to use new location.
      	(expand_gimple_cond): Likewise.
      	(expand_call_stmt): Likewise.
      	(expand_gimple_stmt_1): Likewise.
      	(expand_gimple_basic_block): Likewise.
      	(construct_exit_block): Likewise.
      	(gimple_expand_cfg): Likewise.
      	* cfgcleanup.c (try_forward_edges): Likewise.
      	* tree-ssa-live.c (remove_unused_scope_block_p): Likewise.
      	(dump_scope_block): Likewise.
      	(remove_unused_locals): Likewise.
      	* rtl.c (rtx_equal_p_cb): Likewise.
      	(rtx_equal_p): Likewise.
      	* rtl.h (XUINT): New.
      	(INSN_LOCATOR): Remove.
      	(CURR_INSN_LOCATION): Remove.
      	(INSN_LOCATION): New.
      	(INSN_HAS_LOCATION): New.
      	* tree-inline.c (remap_gimple_op_r): Change to use new location.
      	(copy_tree_body_r): Likewise.
      	(copy_phis_for_bb): Likewise.
      	(expand_call_inline): Likewise.
      	* tree-streamer-in.c (lto_input_ts_exp_tree_pointers): Likewise.
      	* tree-streamer-out.c (write_ts_decl_minimal_tree_pointers): Likewise.
      	* gimple-streamer-out.c (output_gimple_stmt): Likewise.
      	* combine.c (try_combine): Likewise.
      	* tree-outof-ssa.c (set_location_for_edge): Likewise.
      	(insert_partition_copy_on_edge): Likewise.
      	(insert_value_copy_on_edge): Likewise.
      	(insert_rtx_to_part_on_edge): Likewise.
      	(insert_part_to_rtx_on_edge): Likewise.
      	* basic-block.h (edge_def): Remove field.
      	* gimple.h (gimple_statement_base): Remove field.
      	(gimple_bb): Change to use new location.
      	(gimple_set_block): Likewise.
      	(gimple_has_location): Likewise.
      	* tree-cfg.c (make_cond_expr_edges): Likewise.
      	(make_goto_expr_edges): Likewise.
      	(gimple_can_merge_blocks_p): Likewise.
      	(move_stmt_op): Likewise.
      	(move_block_to_fn): Likewise.
      	* config/alpha/alpha.c (alpha_output_mi_thunk_osf): Likewise.
      	* config/sparc/sparc.c (sparc_output_mi_thunk): Likewise.
      	* config/i386/i386.c (x86_output_mi_thunk): Likewise.
      	* config/tilegx/tilegx.c (tilegx_output_mi_thunk): Likewise.
      	* config/sh/sh.c (sh_output_mi_thunk): Likewise.
      	* config/ia64/ia64.c (ia64_output_mi_thunk): Likewise.
      	* config/rs6000/rs6000.c (rs6000_output_mi_thunk): Likewise.
      	* config/score/score.c (score_output_mi_thunk): Likewise.
      	* config/tilepro/tilepro.c (tilepro_asm_output_mi_thunk): Likewise.
      	* config/mips/mips.c (mips_output_mi_thunk): Likewise.
      	* cfgrtl.c (unique_locus_on_edge_between_p): Likewise.
      	(unique_locus_on_edge_between_p): Likewise.
      	(emit_nop_for_unique_locus_between): Likewise.
      	(force_nonfallthru_and_redirect): Likewise.
      	(fixup_reorder_chain): Likewise.
      	(cfg_layout_merge_blocks): Likewise.
      	* stmt.c (emit_case_nodes): Likewise.
      
      gcc/lto:
      	2012-09-19  Dehao Chen  <dehao@google.com>
      
      	* lto/lto.c (lto_fixup_prevailing_decls): Remove tree.exp.block field.
      
      libcpp:
      	2012-09-19  Dehao Chen  <dehao@google.com>
      
      	* include/line-map.h (MAX_SOURCE_LOCATION): New value.
      	(location_adhoc_data_fini): New.
      	(get_combined_adhoc_loc): New.
      	(get_data_from_adhoc_loc): New.
      	(get_location_from_adhoc_loc): New.
      	(location_adhoc_data_map): New.
      	(COMBINE_LOCATION_DATA): New.
      	(IS_ADHOC_LOC): New.
      	(expanded_location): New field.
      	(line_maps): New field.
      	* line-map.c (location_adhoc_data): New.
      	(location_adhoc_data_hash): New.
      	(location_adhoc_data_eq): New.
      	(location_adhoc_data_update): New.
      	(get_combined_adhoc_loc): New.
      	(get_data_from_adhoc_loc): New.
      	(get_location_from_adhoc_loc): New.
      	(location_adhoc_data_init): New.
      	(location_adhoc_data_fini): New.
      	(linemap_init): Initialize location_adhoc_data.
      	(linemap_lookup): Change to use new location.
      	(linemap_ordinary_map_lookup): Likewise.
      	(linemap_macro_map_lookup): Likewise.
      	(linemap_macro_map_loc_to_def_point): Likewise.
      	(linemap_macro_map_loc_unwind_toward_spel): Likewise.
      	(linemap_get_expansion_line): Likewise.
      	(linemap_get_expansion_filename): Likewise.
      	(linemap_location_in_system_header_p): Likewise.
      	(linemap_location_from_macro_expansion_p): Likewise.
      	(linemap_macro_loc_to_spelling_point): Likewise.
      	(linemap_macro_loc_to_def_point): Likewise.
      	(linemap_macro_loc_to_exp_point): Likewise.
      	(linemap_resolve_location): Likewise.
      	(linemap_unwind_toward_expansion): Likewise.
      	(linemap_unwind_to_first_non_reserved_loc): Likewise.
      	(linemap_expand_location): Likewise.
      	(linemap_dump_location): Likewise.
      	(linemap_line_start): Likewise.
      
      From-SVN: r191494
      Dehao Chen committed
  13. 29 May, 2012 3 commits
    • integrate.c: Remove. · 6399c0ab
      	* integrate.c: Remove.
      	* integrate.h: Remove.
      	* Makefile.in: Remove make rules for integrate.c and INTEGRATE_H.
      	* config/arm/t-arm: Remove INTEGRATE_H dependency for target files.
      	* config/rs6000/t-rs6000: Likewise
      	* config/spu/t-spu-elf: Likewise.
      	* function.h (get_hard_reg_initial_val, has_hard_reg_initial_val,
      	get_hard_reg_initial_reg, emit_initial_value_sets): Move prototypes
      	from integrate.h to here.
      	(initial_value_entry): New prototype.
      	* reload.h (allocate_initial_values): Remove prototype.
      	* tree.h (set_decl_abstract_flags, set_decl_origin_self): Likewise.
      	* cse.c (fixed_base_plus_p): Don't handle virtual registers for
      	integrate.c.
      	* dwarf2out.c (set_decl_origin_self, set_block_origin_self,
      	set_decl_abstract_flags, set_block_abstract_flags): Move from
      	integrate.c to here, the only user.
      	* expmed.c (extract_fixed_bit_field): Remove outdated comment
      	about integrate.c.
      	* function.c: Don't include integrate.h.
      	(struct initial_value_pair, struct initial_value_struct,
      	get_hard_reg_initial_val, has_hard_reg_initial_val,
      	get_hard_reg_initial_reg, emit_initial_value_sets): Move from
      	integrate.c to here.
      	(initial_value_entry): New function.
      	* genemit.c (main): Don't print integrate.h include line.
      	* ira.c: Don't include integrate.h.
      	(allocate_initial_values): Move from integrate.c to here.
      	(ira): Update allocate_initial_values call.
      	* tree-inline.c: Don't include integrate.h.
      	(function_attribute_inlinable_p): Moved from integrate.c to here.
      	* cfgexpand.c: Don't include integrate.h.
      	* except.c: Likewise.
      	* langhooks.c: Likewise.
      	* passes.c: Likewise.
      	* toplev.c: Likewise.
      	* config/frv/frv.c: Likewise.
      	* config/pa/pa.c: Likewise.
      	* config/spu/spu.c: Likewise.
      	* config/epiphany/epiphany.c: Likewise.
      	* config/mep/mep.c: Likewise.
      	* config/score/score.c: Likewise.
      	* config/picochip/picochip.c: Likewise.
      	* config/sh/sh.c: Likewise.
      	* config/alpha/alpha.c: Likewise.
      	* config/microblaze/microblaze.c: Likewise.
      	* config/mips/mips.c: Likewise.
      	* config/v850/v850.c: Likewise.
      	* config/mmix/mmix.c: Likewise.
      	* config/bfin/bfin.c: Likewise.
      	* config/arm/arm.c: Likewise.
      	* config/s390/s390.c: Likewise.
      	* config/m32r/m32r.c: Likewise.
      	* config/rs6000/rs6000.c: Likewise.
      	* config/c6x/c6x.c: Include function.h instead of integrate.h.
      	* config/tilegx/tilegx.c: Likewise.
      	* config/tilepro/tilepro.c: Likewise.
      
      From-SVN: r187969
      Steven Bosscher committed
    • LANGUAGES: Fix typos. · 073a8998
      	* LANGUAGES: Fix typos.
      	* Makefile.in: Fix typos.
      	* alias.c: Fix typos.
      	* auto-inc-dec.c: Fix typos.
      	* bb-reorder.c: Fix typos.
      	* cfgcleanup.c: Fix typos.
      	* cgraph.c: Fix typos.
      	* cgraph.h: Fix typos.
      	* cgraphunit.c: Fix typos.
      	* collect2-aix.h: Fix typos.
      	* collect2.c: Fix typos.
      	* compare-elim.c: Fix typos.
      	* config/alpha/vms.h: Fix typos.
      	* config/arm/README-interworking: Fix typos.
      	* config/arm/arm.c: Fix typos.
      	* config/arm/iterators.md: Fix typos.
      	* config/arm/vxworks.h: Fix typos.
      	* config/avr/avr.c: Fix typos.
      	* config/avr/avr.h: Fix typos.
      	* config/avr/avr.md: Fix typos.
      	* config/avr/builtins.def: Fix typos.
      	* config/c6x/c6x.c: Fix typos.
      	* config/cr16/cr16.c: Fix typos.
      	* config/cr16/cr16.md: Fix typos.
      	* config/cris/cris.md: Fix typos.
      	* config/darwin.c: Fix typos.
      	* config/darwin.opt: Fix typos.
      	* config/i386/i386-c.c: Fix typos.
      	* config/i386/i386.c: Fix typos.
      	* config/ia64/ia64.c: Fix typos.
      	* config/m68k/cf.md: Fix typos.
      	* config/mep/mep.c: Fix typos.
      	* config/microblaze/microblaze.c: Fix typos.
      	* config/microblaze/microblaze.h: Fix typos.
      	* config/mn10300/mn10300.c: Fix typos.
      	* config/mn10300/mn10300.md: Fix typos.
      	* config/pa/pa.c: Fix typos.
      	* config/picochip/picochip.h: Fix typos.
      	* config/rs6000/a2.md: Fix typos.
      	* config/rs6000/rs6000.c: Fix typos.
      	* config/rs6000/vector.md: Fix typos.
      	* config/rx/rx.md: Fix typos.
      	* config/rx/rx.opt: Fix typos.
      	* config/s390/2097.md: Fix typos.
      	* config/s390/s390.c: Fix typos.
      	* config/s390/s390.h: Fix typos.
      	* config/sh/sh.c: Fix typos.
      	* config/sh/sh.md: Fix typos.
      	* config/sparc/sync.md: Fix typos.
      	* config/spu/spu.c: Fix typos.
      	* config/spu/spu.md: Fix typos.
      	* config/vms/vms.c: Fix typos.
      	* config/vxworks-dummy.h: Fix typos.
      	* config/vxworks.h: Fix typos.
      	* cselib.c: Fix typos.
      	* df-scan.c: Fix typos.
      	* df.h: Fix typos.
      	* doc/extend.texi: Fix typos.
      	* doc/install.texi: Fix typos.
      	* doc/invoke.texi: Fix typos.
      	* doc/md.texi: Fix typos.
      	* doc/plugins.texi: Fix typos.
      	* doc/rtl.texi: Fix typos.
      	* dse.c: Fix typos.
      	* dwarf2asm.c: Fix typos.
      	* dwarf2out.c: Fix typos.
      	* except.h: Fix typos.
      	* expr.c: Fix typos.
      	* fold-const.c: Fix typos.
      	* gcc.c: Fix typos.
      	* gcse.c: Fix typos.
      	* genautomata.c: Fix typos.
      	* gengtype-state.c: Fix typos.
      	* gengtype.c: Fix typos.
      	* genhooks.c: Fix typos.
      	* gimple-fold.c: Fix typos.
      	* gimple-pretty-print.c: Fix typos.
      	* gimple.c: Fix typos.
      	* gimple.h: Fix typos.
      	* gimplify.c: Fix typos.
      	* graphite-interchange.c: Fix typos.
      	* graphite-sese-to-poly.c: Fix typos.
      	* ifcvt.c: Fix typos.
      	* input.c: Fix typos.
      	* ipa-cp.c: Fix typos.
      	* ipa-inline-analysis.c: Fix typos.
      	* ipa-inline-transform.c: Fix typos.
      	* ipa-inline.c: Fix typos.
      	* ipa-pure-const.c: Fix typos.
      	* ipa-ref.h: Fix typos.
      	* ipa-reference.c: Fix typos.
      	* ipa-utils.c: Fix typos.
      	* ipa.c: Fix typos.
      	* ira-emit.c: Fix typos.
      	* ira-lives.c: Fix typos.
      	* lto-streamer.c: Fix typos.
      	* lto-streamer.h: Fix typos.
      	* lto-wrapper.c: Fix typos.
      	* mcf.c: Fix typos.
      	* mode-switching.c: Fix typos.
      	* modulo-sched.c: Fix typos.
      	* plugin.c: Fix typos.
      	* postreload.c: Fix typos.
      	* sched-deps.c: Fix typos.
      	* sel-sched-ir.c: Fix typos.
      	* sel-sched-ir.h: Fix typos.
      	* sel-sched.c: Fix typos.
      	* sese.c: Fix typos.
      	* stor-layout.c: Fix typos.
      	* target-hooks-macros.h: Fix typos.
      	* target.def: Fix typos.
      	* trans-mem.c: Fix typos.
      	* tree-eh.c: Fix typos.
      	* tree-predcom.c: Fix typos.
      	* tree-sra.c: Fix typos.
      	* tree-ssa-address.c: Fix typos.
      	* tree-ssa-loop-ivopts.c: Fix typos.
      	* tree-ssa-loop-niter.c: Fix typos.
      	* tree-ssa-math-opts.c: Fix typos.
      	* tree-ssa-pre.c: Fix typos.
      	* tree-ssa-propagate.c: Fix typos.
      	* tree-ssa-reassoc.c: Fix typos.
      	* tree-ssa-sccvn.c: Fix typos.
      	* tree-ssa-ter.c: Fix typos.
      	* tree-ssa-uninit.c: Fix typos.
      	* tree-ssanames.c: Fix typos.
      	* tree-vect-generic.c: Fix typos.
      	* tree-vect-slp.c: Fix typos.
      	* tree.c: Fix typos.
      	* tree.h: Fix typos.
      	* varasm.c: Fix typos.
      	* varpool.c: Fix typos.
      
      From-SVN: r187959
      Joseph Myers committed
    • re PR middle-end/53510 (OOM while compile some code) · 92b05e72
      	PR middle-end/53510
      	* input.c (read_line): Use XRESIZEVEC instead of XNEWVEC
      	to avoid leaking memory.  No need to handle memory allocation
      	failure.  Double string_len on each reallocation instead of
      	adding 2.
      	* gcov.c (read_line): Likewise.
      
      From-SVN: r187952
      Jakub Jelinek committed
  14. 30 Apr, 2012 3 commits
    • Make conversion warnings work on NULL with -ftrack-macro-expansion · 70dc395a
      There are various conversion related warnings that trigger on
      potentially dangerous uses of NULL (or __null).  NULL is defined as a
      macro in a system header, so calling warning or warning_at on a
      virtual location of NULL yields no diagnostic.  So the test
      accompanying this patch (as well as others), was failling when run
      with -ftrack-macro-expansion.
      
      I think it's necessary to use the location of NULL that is in the main
      source code (instead of, e.g, the spelling location that is in the
      system header where the macro is defined) in those cases.  Note that
      for __null, we don't have the issue.
      
      I have augmented the test of this patch to check that we don't regress
      when handling __null.
      
      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/
      	* input.h (expansion_point_location_if_in_system_header): Declare
      	new function.
      	* input.c (expansion_point_location_if_in_system_header): Define it.
      gcc/cp/
      
      	* call.c (conversion_null_warnings): Use the new
      	expansion_point_location_if_in_system_header.
      	* cvt.c (build_expr_type_conversion): Likewise.
      	* typeck.c (cp_build_binary_op): Likewise.
      
      gcc/testsuite/
      
      	* g++.dg/warn/Wconversion-null-2.C: Add testing for __null,
      	alongside the previous testing for NULL.
      
      From-SVN: r186972
      Dodji Seketeli committed
    • Strip "<built-in>" loc from displayed expansion context · c4ca1a09
      Now that diagnostics for tokens coming from macro expansions point to
      the spelling location of the relevant token (and then displays the
      context of the expansion), some ugly (not so seldom) corner cases can
      happen.
      
      When the relevant token is a built-in token (which means the location
      of that token is BUILTINS_LOCATION) the location prefix displayed to
      the user in the diagnostic line is the "<built-in>:0:0" string.  For
      instance:
      
          <built-in>:0:0: warning: conversion to 'float' alters 'int' constant value
      
      For the user, I think this is surprising and useless.
      
      A more user-friendly approach would be to refer to the first location
      that (in the reported macro expansion context) is for a location in
      real source code, like what is shown in the new test case
      gcc/testsuite/g++.dg/warn/Wconversion-real-integer2.C accompanying
      this patch.
      
      To do this, I am making the line-map module provide a new
      linemap_unwind_to_first_non_reserved_loc function that resolves a
      virtual location to the first spelling location that is in real source
      code.
      
      I am then using that facility in the diagnostics printing module and
      in the macro unwinder to avoid printing diagnostics lines that refer
      to the locations for built-ins or more generally for reserved
      locations.  Note that when I start the dance of skipping a built-in
      location I also skip locations that are in system headers, because it
      turned out that a lot of those built-ins are actually used in system
      headers (e.g, "#define INT_MAX __INT_MAX__" where __INT_MAX__ is a
      built-in).
      
      Besides the user-friendliness gain, this patch allows a number of
      regression tests to PASS unchanged with and without
      -ftrack-macro-expansion.
      
      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/
      
      	* include/line-map.h (linemap_unwind_toward_expansion): Fix typo
      	in comment.
      	(linemap_unwind_to_first_non_reserved_loc): Declare new function.
      	* line-map.c (linemap_unwind_to_first_non_reserved_loc): Define
      	new function.
      
      gcc/
      
      	* input.c (expand_location_1): When expanding to spelling location
      	in a context of a macro expansion, skip reserved system header
      	locations.  Update comments.  * tree-diagnostic.c
      	(maybe_unwind_expanded_macro_loc): Likewise.
      
      gcc/testsuite/
      
      	* g++.dg/warn/Wconversion-real-integer2.C: New test.
      	* g++.dg/warn/Wconversion-real-integer-3.C: Likewise.
      	* g++.dg/warn/conversion-real-integer-3.h: New header used by the
      	new test above.
      
      From-SVN: r186970
      Dodji Seketeli committed
    • Make expand_location resolve to locus in main source file · 7eb918cc
      Apparently, quite some places in the compiler (like the C/C++
      preprocessor, the debug info machinery) expect expand_location to
      resolve to locations that are in the main source file, even if the
      token at stake comes from a macro that was defined in a header
      somewhere.  Turning on -ftrack-macro-expansion by default was
      triggering a lot of failures (not necessarily related to diagnostics)
      because expand_location resolves to spelling locations instead.
      
      So I have changed expand_location to honour the initial expectation.
      
      In addition, I came up with the new expand_location_to_spelling_point
      used in diagnostic_build_prefix because the diagnostic system, on the
      other hand, wants to point to the location of the token where it was
      spelled, and then display the error context involving all the macro
      whose expansion led to that spelling point - if we are in the context
      of a macro expansion there.
      
      This seems to me like a reasonable balance.
      
      Tested and bootstrapped on x86_64-unknown-linux-gnu against trunk and
      whitnessed that a lot more tests were PASSing.
      
      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/
      
      	* input.c (expand_location_1): New.  Takes a parameter to choose
      	whether to resolve the location to spelling or expansion point.
      	Was factorized from ...
      	(expand_location): ... here.
      	(expand_location_to_spelling_point): New.  Implemented in terms of
      	expand_location_1.
      	* diagnostic.c (diagnostic_build_prefix): Use the new
      	expand_location_to_spelling_point instead of expand_location.
      
      From-SVN: r186969
      Dodji Seketeli committed
  15. 11 Apr, 2012 1 commit
    • re PR c++/24985 (caret diagnostics) · 9fec0042
      2012-04-11  Manuel López-Ibáñez  <manu@gcc.gnu.org>
      
      	PR 24985
      gcc/
              * diagnostic.h (show_caret): Declare.
      	(caret_max_width): Declare.
      	(diagnostic_show_locus): Declare.
              * diagnostic.c (diagnostic_initialize): Initialize to false.
              (diagnostic_show_locus): New.
              (diagnostic_report_diagnostic): Call it.
      	(getenv_columns): New.
      	(adjust_line): New.
      	(diagnostic_set_caret_max_width): New.
              * input.c (read_line): New.
      	(location_get_source_line): New.
              * input.h (location_get_source_line): Declare.
              * toplev.c (general_init): Initialize show_caret from options.
              * dwarf2out.c (gen_producer_string): Handle fdiagnostics-show-caret.
              * opts.c (common_handle_option): Likewise.
      	* pretty-print.h (pp_get_prefix): New.
      	(pp_base_get_prefix): New.
              * common.opt (fdiagnostics-show-caret): New option.
      	* doc/invoke.texi (fdiagnostics-show-caret): Document it.
      testsuite/
              * lib/prune.exp: Add -fno-diagnostics-show-caret.
      libstdc++-v3/
      	* testsuite/lib/prune.exp: Handle caret.
      libmudflap/
      	* testsuite/lib/libmudflap.exp: Handle caret.
      
      From-SVN: r186305
      Manuel López-Ibáñez committed
  16. 25 Oct, 2011 1 commit
    • Support expansion of reserved locations wrapped in virtual locations · 84756fd4
      libcpp/
      
      	* include/line-map.h (linemap_expand_location): Take a line table
      	parameter.  Update comment.
      	(linemap_resolve_location): Update comment.
      	(linemap_expand_location_full): Remove.
      	* line-map.c (linemap_resolve_location):  Handle reserved
      	locations; return a NULL map in those cases.
      	(linemap_expand_location): If location is reserved, return a
      	zeroed expanded location.  Update comment.  Take a line table to
      	assert that the function takes non-virtual locations only.
      	(linemap_expand_location_full): remove.
      	(linemap_dump_location): Handle the fact that
      	linemap_resolve_location can return NULL line maps when the
      	location resolves to a reserved location.
      
      gcc/
      	* input.c (expand_location): Rewrite using
      	linemap_resolve_location and linemap_expand_location.  Add a
      	comment.
      
      From-SVN: r180426
      Dodji Seketeli committed
  17. 18 Oct, 2011 1 commit
    • Fix bootstrap on !NO_IMPLICIT_EXTERN_C and ia32 targets · d17687f6
      libcpp/
      
      	* include/line-map.h (struct linemap_stats): Change the type of
      	the members from size_t to long.
      	* macro.c (macro_arg_token_iter_init): Unconditionally initialize
      	iter->location_ptr.
      
      gcc/c-family/
      
      	* c-lex.c (fe_file_change): Use LINEMAP_SYSP when
      	!NO_IMPLICIT_EXTERN_C.
      
      gcc/
      	* input.c (dump_line_table_statistics): Use long, not size_t.
      
      From-SVN: r180124
      Dodji Seketeli committed
  18. 17 Oct, 2011 3 commits
    • Add line map statistics to -fmem-report output · 64a1a422
      This patch adds statistics about line maps' memory consumption and
      macro expansion to the output of -fmem-report.  It has been useful in
      trying to reduce the memory consumption of the macro maps support.
      
      Co-Authored-By: Dodji Seketeli <dodji@redhat.com>
      
      From-SVN: r180085
      Tom Tromey committed
    • Generate virtual locations for tokens · 92582b75
      This second instalment uses the infrastructure of the previous patch
      to allocate a macro map for each macro expansion and assign a virtual
      location to each token resulting from the expansion.
      
      To date when cpp_get_token comes across a token that happens to be a
      macro, the macro expander kicks in, expands the macro, pushes the
      resulting tokens onto a "token context" and returns a dummy padding
      token. The next call to cpp_get_token goes look into the token context
      for the next token [which is going to result from the previous macro
      expansion] and returns it.  If the token is a macro, the macro expander
      kicks in and you know the story.
      
      This patch piggy-backs on that macro expansion process, so to speak.
      First it modifies the macro expander to make it create a macro map for
      each macro expansion. It then allocates a virtual location for each
      resulting token.  Virtual locations of tokens resulting from macro
      expansions are then stored on a special kind of context called an
      "expanded tokens context".  In other words, in an expanded tokens
      context, there are tokens resulting from macro expansion and their
      associated virtual locations.  cpp_get_token_with_location is modified
      to return the virtual location of tokens resulting from macro
      expansion.  Note that once all tokens from an expanded token context have
      been consumed and the context and is freed, the memory used to store the
      virtual locations of the tokens held in that context is freed as well.
      This helps reducing the overall peak memory consumption.
      
      The client code that was getting macro expansion point location from
      cpp_get_token_with_location now gets virtual location from it. Those
      virtual locations can in turn be resolved into the different
      interesting physical locations thanks to the linemap API exposed by
      the previous patch.
      
      Expensive progress. Possibly. So this whole virtual location
      allocation business is switched off by default. So by default no
      extended token is created. No extended token context is created
      either. One has to use -ftrack-macro-expansion to switch this on. This
      complicates the code but I believe it can be useful as some of our
      friends found out at http://llvm.org/bugs/show_bug.cgi?id=5610
      
      The patch tries to reduce the memory consumption by freeing some token
      context memory that was being reused before. I didn't notice any
      compilation slow down due to this immediate freeing on my GNU/Linux
      system.
      
      As no client code tries to resolve virtual locations to anything but
      what was being done before, no new test case has been added.
      
      Co-Authored-By: Dodji Seketeli <dodji@redhat.com>
      
      From-SVN: r180082
      Tom Tromey committed
    • Linemap infrastructure for virtual locations · 46427374
      This is the first instalment of a set which goal is to track locations
      of tokens across macro expansions.  Tom Tromey did the original work
      and attached the patch to PR preprocessor/7263.  This opus is a
      derivative of that original work.
      
      This patch modifies the linemap module of libcpp to add virtual
      locations support.
      
      A virtual location is a mapped location that can resolve to several
      different physical locations.  It can always resolve to the spelling
      location of a token.  For tokens resulting from macro expansion it can
      resolve to:
        - either the location of the expansion point of the macro.
        - or the location of the token in the definition of the
        macro
        - or, if the token is an argument of a function-like macro,
        the location of the use of the matching macro parameter in
        the definition of the macro
      
      The patch creates a new type of line map called a macro map.  For every
      single macro expansion, there is a macro map that generates a virtual
      location for every single resulting token of the expansion.
      
      The good old type of line map we all know is now called an ordinary
      map.  That one still encodes spelling locations as it has always had.
      
      As a result linemap_lookup as been extended to return a macro map when
      given a virtual location resulting from a macro expansion.  The layout
      of structs line_map has changed to support this new type of map.  So
      did the layout of struct line_maps.  Accessor macros have been
      introduced to avoid messing with the implementation details of these
      datastructures directly.  This helped already as we have been testing
      different ways of arranging these datastructure.  Having to constantly
      adjust client code that is too tied with the internals of line_map and
      line_maps would have been even more painful.
      
      Of course, many new public functions have been added to the linemap
      module to handle the resolution of virtual locations.
      
      This patch introduces the infrastructure but no part of the compiler
      uses virtual locations yet.
      
      However the client code of the linemap data structures has been
      adjusted as per the changes.  E.g, it's not anymore reliable for a
      client code to manipulate struct line_map directly if it just wants to
      deal with spelling locations, because struct line_map can now
      represent a macro map as well.  In that case, it's better to use the
      convenient API to resolve the initial (possibly virtual) location to a
      spelling location (or to an ordinary map) and use that.
      
      This is the reason why the patch adjusts the Java, Ada and Fortran
      front ends.
      
      Also, note that virtual locations are not supposed to be ordered for
      relations '<' and '>' anymore.  To test if a virtual location appears
      "before" another one, one has to use a new operator exposed by the
      line map interface.  The patch updates the only spot (in the
      diagnostics module) I have found that was making the assumption that
      locations were ordered for these relations.  This is the only change
      that introduces a use of the new line map API in this patch, so I am
      adding a regression test for it only.
      
      From-SVN: r180081
      Tom Tromey committed
  19. 27 May, 2010 1 commit
    • input.c: New file. · 447924ef
      	* input.c: New file.
      	* input.h (main_input_filename): Move declaration to toplev.h.
      	* toplev.c (input_location, line_table): Move to input.c
      	* toplev.h (main_input_filename): Move declaration from input.h.
      	* tree.c (expand_location): Move to input.c.
      	* Makefile.in (OBJS-common): Add input.o.
      	(input.o): Add dependencies.
      
      From-SVN: r159914
      Joseph Myers committed