1. 23 Oct, 2012 2 commits
    • AArch64 [7/10] · 04ce690f
      2012-10-23  Ian Bolton  <ian.bolton@arm.com>
      	    Jim MacArthur  <jim.macarthur@arm.com>
      	    Marcus Shawcroft  <marcus.shawcroft@arm.com>
      	    Nigel Stephens  <nigel.stephens@arm.com>
      	    Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
      	    Richard Earnshaw  <rearnsha@arm.com>
      	    Sofiane Naci  <sofiane.naci@arm.com>
      	    Stephen Thomas  <stephen.thomas@arm.com>
      	    Tejas Belagod  <tejas.belagod@arm.com>
      	    Yufeng Zhang  <yufeng.zhang@arm.com>
      
      	* configure.ac: Enable AArch64.
      	* configure: Regenerate.
      
      
      Co-Authored-By: Jim MacArthur <jim.macarthur@arm.com>
      Co-Authored-By: Marcus Shawcroft <marcus.shawcroft@arm.com>
      Co-Authored-By: Nigel Stephens <nigel.stephens@arm.com>
      Co-Authored-By: Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
      Co-Authored-By: Richard Earnshaw <rearnsha@arm.com>
      Co-Authored-By: Sofiane Naci <sofiane.naci@arm.com>
      Co-Authored-By: Stephen Thomas <stephen.thomas@arm.com>
      Co-Authored-By: Tejas Belagod <tejas.belagod@arm.com>
      Co-Authored-By: Yufeng Zhang <yufeng.zhang@arm.com>
      
      From-SVN: r192728
      Ian Bolton committed
    • gcc: · 1efcb8c6
      	* config.gcc (*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu |
      	*-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu): Use
      	glibc-c.o in c_target_objs and cxx_target_objs.  Use t-glibc in
      	tmake_file.  Set target_has_targetcm.
      	(tilegx-*-linux*, tilepro-*-linux*): Append to c_target_objs and
      	cxx_target_objs rather than overriding previous value.
      	* config/glibc-c.c, config/t-glibc: New.
      	* doc/tm.texi.in (TARGET_C_PREINCLUDE): New @hook.
      	* doc/tm.texi: Regenerate.
      	* hooks.c (hook_constcharptr_void_null): New.
      	* hooks.h (hook_constcharptr_void_null): Declare.
      
      gcc/c-family:
      	* c-common.h (pch_cpp_save_state): Declare.
      	* c-target.def (c_preinclude): New hook.
      	* c-opts.c (done_preinclude): New.
      	(push_command_line_include): Handle default preincluded header.
      	(cb_file_change): Call pch_cpp_save_state when calling
      	push_command_line_include.
      	* c-pch.c (pch_ready_to_save_cpp_state, pch_cpp_state_saved)
      	(pch_cpp_save_state): New.
      	(pch_init): Call pch_cpp_save_state conditionally, instead of
      	calling cpp_save_state.
      
      gcc/testsuite:
      	* gcc.dg/c99-predef-1.c: New test.
      	* gcc.dg/cpp/cmdlne-dU-1.c, gcc.dg/cpp/cmdlne-dU-2.c,
      	gcc.dg/cpp/cmdlne-dU-3.c, gcc.dg/cpp/cmdlne-dU-4.c,
      	gcc.dg/cpp/cmdlne-dU-5.c, gcc.dg/cpp/cmdlne-dU-6.c,
      	gcc.dg/cpp/cmdlne-dU-7.c, gcc.dg/cpp/cmdlne-dU-8.c,
      	gcc.dg/cpp/cmdlne-dU-9.c, gcc.dg/cpp/cmdlne-dU-10.c,
      	gcc.dg/cpp/cmdlne-dU-11.c, gcc.dg/cpp/cmdlne-dU-12.c,
      	gcc.dg/cpp/cmdlne-dU-13.c, gcc.dg/cpp/cmdlne-dU-14.c,
      	gcc.dg/cpp/cmdlne-dU-15.c, gcc.dg/cpp/cmdlne-dU-16.c,
      	gcc.dg/cpp/cmdlne-dU-17.c, gcc.dg/cpp/cmdlne-dU-18.c,
      	gcc.dg/cpp/cmdlne-dU-19.c, gcc.dg/cpp/cmdlne-dU-20.c,
      	gcc.dg/cpp/cmdlne-dU-21.c, gcc.dg/cpp/cmdlne-dU-22.c,
      	gcc.dg/cpp/mi5.c, gcc.dg/cpp/multiline.c: Add -nostdinc to
      	dg-options.
      
      libcpp:
      	* files.c (struct _cpp_file): Add implicit_preinclude.
      	(pch_open_file): Allow a previously opened implicitly included
      	file.
      	(_cpp_find_file): Add implicit_preinclude argument.  Free file and
      	do not call open_file_failed if implicit_preinclude.  Store
      	implicit_preinclude value.
      	(_cpp_stack_include, _cpp_fake_include, _cpp_compare_file_date):
      	Update calls to _cpp_find_file.
      	(_cpp_stack_include): Handle IT_DEFAULT.
      	(cpp_push_default_include): New.
      	* include/cpplib.h (cpp_push_default_include): Declare.
      	* init.c (cpp_read_main_file): Update call to _cpp_find_file.
      	* internal.h (enum include_type): Add IT_DEFAULT.
      	(_cpp_find_file): Update prototype.
      
      From-SVN: r192715
      Joseph Myers committed
  2. 15 Oct, 2012 1 commit
  3. 04 Oct, 2012 1 commit
    • Implement #pragma GCC warning/error · f591bd8f
      2012-10-04  Florian Weimer  <fweimer@redhat.com>
      
      	* doc/cpp.texi (Pragmas): Document #pragma GCC warning, #pragma
      	GCC error.
      
      2012-10-04  Florian Weimer  <fweimer@redhat.com>
      
      	* c-c++-common/cpp/diagnostic-pragma-1.c: New testcase.
      
      2012-10-04  Florian Weimer  <fweimer@redhat.com>
      
      	* directives.c (do_pragma_warning_or_error): New.
      	(do_pragma_warning): New.
      	(do_pragma_error): New.
      	(_cpp_init_internal_pragmas): Register new pragmas.
      
      From-SVN: r192084
      Florian Weimer committed
  4. 26 Sep, 2012 1 commit
  5. 25 Sep, 2012 3 commits
  6. 19 Sep, 2012 2 commits
    • 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
    • * cpplib.pot: Regenerate. · 5b156fea
      From-SVN: r191483
      Joseph Myers committed
  7. 27 Aug, 2012 1 commit
    • PR preprocessor/53469 - argument tokens of _Pragma miss virtual location · f3d25c65
      Consider this short test snippet:
      
      -------------------------8-------------------
          #define STRINGIFY(x) #x
          #define TEST(x) \
            _Pragma(STRINGIFY(GCC diagnostic ignored "-Wunused-local-typedefs")) \
            typedef int myint;
      
          void bar ()
          {
            TEST(myint)
          }
      -------------------------8-------------------
      
      The _Pragma is effectively ignored, and compiling with
      -Wunused-local-typedefs warns on the local typedef, even though the
      pragma should have prevented the warning to be emitted.
      
      This is because when the preprocessor sees the _Pragma operator and
      then goes to handle the first token ('GCC' here) that makes up its
      operands, it retains the spelling location of that token, not its
      virtual location.
      
      Later when diagnostic_report_diagnostic is called to emit the warning
      (or ignore it because of the pragma), it compares the location of the
      first operand of the pragma with the location of the unused location,
      (by calling linemap_location_before_p) and that comparison fails
      because in this case, both locations should be virtual.
      
      This patch fixes the issue by teaching the pragma handling to use
      virtual locations.
      
      Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.
      
      libcpp/
      
      	PR preprocessor/53469
      	* directives.c (do_pragma): Use the virtual location for the
      	pragma token, instead of its spelling location.
      
      gcc/testsuite/
      
      	PR preprocessor/53469
      	* gcc.dg/cpp/_Pragma7.c: New test case.
      
      From-SVN: r190714
      Dodji Seketeli committed
  8. 15 Aug, 2012 1 commit
    • backport: As described in http://gcc.gnu.org/ml/gcc/2012-08/msg00015.html... · 0823efed
      Merge from cxx-conversion branch (http://gcc.gnu.org/wiki/cxx-conversion).
      
      As described in http://gcc.gnu.org/ml/gcc/2012-08/msg00015.html, this patch
      changes the default bootstrap process so that stage 1 always builds with a C++
      compiler.
      
      Other than the bootstrap change, the patch makes no functional changes to the
      compiler.  Everything should build as it does now in trunk.  The main
      changes in this patch are:
      
      1- Configuration changes.
      2- Re-write of VEC.
      3- Re-write of gengtype to support C++ templates and
         user-provided marking functions.
      4- New hash table class.
      5- Re-write double_int.
      6- Implement tree macros as inline functions so they can be
         called from gdb.
      
      As discussed before, several of these changes do not fully change
      the call sites to use the new APIs.
      
      The bootstrap changes have already been tested on a wide range of
      targets (http://gcc.gnu.org/wiki/CppBuildStatus).  Additionally,
      I have tested the merged trunk on: x86_64-unknown-linux-gnu,
      mips64el-unknown-linux-gnu, powerpc64-unknown-linux-gnu,
      i686-pc-linux-gnu, and ia64-unknown-linux-gnu.
      
      ChangeLog
      2012-08-14   Diego Novillo  <dnovillo@google.com>
      
      	Merge from cxx-conversion branch.
      
      	* Makefile.tpl (STAGE[+id+]_CXXFLAGS): Remove
      	POSTSTAGE1_CONFIGURE_FLAGS.
      	* Makefile.in: Regenerate.
      	* configure.ac (ENABLE_BUILD_WITH_CXX): Remove.  Update all users.
      	Force C++ when bootstrapping.
      	* configure: Regenerate.
      
      
      libcpp/ChangeLog
      2012-08-14   Diego Novillo  <dnovillo@google.com>
      
      	Merge from cxx-conversion branch.  Configury.
      
      	* Makefile.in: Remove all handlers of ENABLE_BUILD_WITH_CXX.
      	* configure.ac: Likewise.
      	* configure: Regenerate.
      
      2012-08-14   Lawrence Crowl  <crowl@google.com>
      
      	Merge from cxx-conversion branch.  New C++ hash table.
      
      	* include/symtab.h (typedef struct ht hash_table): Change the typedef
      	name to cpp_hash_table.  Update all users of the typedef.
      
      gcc/ChangeLog
      2012-08-14   Diego Novillo  <dnovillo@google.com>
      
      	Merge from cxx-conversion branch.  Configury.
      
      	* configure.ac (CXX_FOR_BUILD): Define and substitute.
      	(BUILD_CXXFLAGS): Define.
      	Remove all handlers of ENABLE_BUILD_WITH_CXX.
      	Force all build to be with C++.
      	* Makefile.in (BUILD_CXXFLAGS): Use it.
      	Remove all handlers of ENABLE_BUILD_WITH_CXX.
      	* configure: Regenerate.
      	* config.in: Regenerate.
      	* doc/install.texi: Remove documentation for --enable-build-with-cxx
      	and --enable-build-poststage1-with-cxx.
      
      2012-08-14   Diego Novillo  <dnovillo@google.com>
      
      	Merge from cxx-conversion branch.  Re-implement VEC in C++.
      
      	* vec.c (vec_heap_free): Convert into a template function.
      	(vec_gc_o_reserve_1): Make extern.
      	(vec_gc_p_reserve): Remove.
      	(vec_gc_p_reserve_exact): Remove.
      	(vec_gc_o_reserve): Remove.
      	(vec_gc_o_reserve_exact): Remove.
      	(vec_heap_o_reserve_1): Make extern.
      	(vec_heap_p_reserve): Remove.
      	(vec_heap_p_reserve_exact): Remove.
      	(vec_heap_o_reserve): Remove.
      	(vec_heap_o_reserve_exact): Remove.
      	(vec_stack_p_reserve): Remove.
      	(vec_stack_p_reserve_exact): Remove.
      	* vec.h (VEC_CHECK_INFO, VEC_CHECK_DECL, VEC_CHECK_PASS,
      	VEC_ASSERT, VEC_ASSERT_FAIL, vec_assert_fail): Move earlier
      	in the file.
      	(VEC): Define to vec_t<T>.
      	(vec_allocation_t): Define.
      	(struct vec_prefix): Move earlier in the file.
      	(vec_t<T>): New template.
      	(DEF_VEC_I, DEF_VECL_ALLOC_I, DEF_VEC_P, DEF_VEC_ALLOC_P,
      	DEF_VEC_O, DEF_VEC_ALLOC_P, DEF_VEC_O, DEF_VEC_ALLOC_O,
      	DEF_VEC_ALLOC_P_STACK, DEF_VEC_ALLOC_O_STACK,
      	DEF_VEC_ALLOC_I_STACK): Expand to 'struct vec_swallow_trailing_semi'.
      	(DEF_VEC_A): Provide template instantiations for
      	GC/PCH markers that do not traverse the vector.
      	(vec_stack_p_reserve): Remove.
      	(vec_stack_p_reserve_exact): Remove.
      	(vec_stack_p_reserve_exact_1): Remove.
      	(vec_stack_o_reserve): Remove.
      	(vec_stack_o_reserve_exact): Remove.
      	(vec_stack_free): Re-write as a template function.
      	(vec_reserve): New template function.
      	(vec_reserve_exact): New template function.
      	(vec_heap_free): New template function if GATHER_STATISTICS is
      	defined.  Otherwise, macro that expands to free().
      	(VEC_length_1): New template function.
      	(VEC_length): Call it.
      	(VEC_empty_1): New template function.
      	(VEC_empty): Call it.
      	(VEC_address_1): New template function.
      	(VEC_address): Call it.
      	(VEC_last_1): New template function.
      	(VEC_last): Call it.  Change return type to T&.
      	Change all users that used VEC_Os.
      	(VEC_index_1): New template function.
      	(VEC_index): Call it.  Return a T& instead of a T*.
      	Update all callers that were using VEC_O before.
      	(VEC_iterate_1): New template function.
      	(VEC_iterate): Call it.
      	(VEC_embedded_size_1): New template function.
      	(VEC_embedded_size): Call it.
      	(VEC_embedded_init_1): New template function.
      	(VEC_embedded_init): Call it.
      	(VEC_alloc_1): New template function.
      	(VEC_alloc): Call it.  If A is 'stack', call XALLOCAVAR to
      	do the allocation.
      	(VEC_free_1): New template function.
      	(VEC_free): Call it.
      	(VEC_copy_1): New template function.
      	(VEC_copy): Call it.
      	(VEC_space_1): New template function
      	(VEC_space): Call it.
      	(VEC_reserve_1): New template function.
      	(VEC_reserve): Call it.
      	(VEC_reserve_exact_1): New template function.
      	(VEC_reserve_exact): Call it.
      	(VEC_splice_1): New template function.
      	(VEC_splice): Call it.
      	(VEC_safe_splice_1): New template function.
      	(VEC_safe_splice): Call it.
      	(VEC_quick_push_1): New template function.  Create two overloads, one
      	accepting T, the other accepting T *.  Update all callers
      	where T and T * are ambiguous.
      	(VEC_quick_push): Call it.
      	(VEC_safe_push_1): New template function. Create two overloads, one
      	accepting T, the other accepting T *.  Update all callers
      	where T and T * are ambiguous.
      	(VEC_safe_push): Call it.
      	(VEC_pop_1): New template function.
      	(VEC_pop): Call it.
      	(VEC_truncate_1): New template function.
      	(VEC_truncate): Call it.
      	(VEC_safe_grow_1): New template function.
      	(VEC_safe_grow): Call it.
      	(VEC_safe_grow_cleared_1): New template function.
      	(VEC_safe_grow_cleared): Call it.
      	(VEC_replace_1): New template function.
      	(VEC_replace): Call it.  Always accept T instead of T*.
      	Update all callers that used VEC_Os.
      	(VEC_quick_insert_1): New template function.
      	(VEC_quick_insert): Call it.
      	(VEC_safe_insert_1): New template function.
      	(VEC_safe_insert): Call it.
      	(VEC_ordered_remove_1): New template function.
      	(VEC_ordered_remove): Call it.
      	(VEC_unordered_remove_1): New template function.
      	(VEC_unordered_remove): Call it.
      	(VEC_block_remove_1): New template function.
      	(VEC_block_remove): Call it.
      	(VEC_lower_bound_1): New template function.
      	(VEC_lower_bound): Call it.
      	(VEC_OP): Remove.
      	(DEF_VEC_FUNC_P): Remove.
      	(DEF_VEC_ALLOC_FUNC_P): Remove.
      	(DEF_VEC_NONALLOC_FUNCS_P): Remove.
      	(DEF_VEC_FUNC_O): Remove.
      	(DEF_VEC_ALLOC_FUNC_O): Remove.
      	(DEF_VEC_NONALLOC_FUNCS_O): Remove.
      	(DEF_VEC_ALLOC_FUNC_I): Remove.
      	(DEF_VEC_NONALLOC_FUNCS_I): Remove.
      	(DEF_VEC_ALLOC_FUNC_P_STACK): Remove.
      	(DEF_VEC_ALLOC_FUNC_O_STACK): Remove.
      	(DEF_VEC_ALLOC_FUNC_I_STACK): Remove.
      	(vec_reserve_exact): New template function.
      
      	* gengtype-lex.l (DEF_VEC_ALLOC_[IOP]/{EOID}): Remove.
      	* gengtype-parse.c (token_names): Remove DEF_VEC_ALLOC_[IOP].
      	(typedef_name): Emit vec_t<C1> instead of VEC_C1_C2.
      	(def_vec_alloc): Remove.  Update all callers.
      	* gengtype.c (filter_type_name): New.
      	(output_mangled_typename): Call it.
      	(write_func_for_structure): Likewise.
      	(write_types): Likewise.
      	(write_root): Likewise.
      	(write_typed_alloc_def): Likewise.
      	(note_def_vec): Emit vec_t<TYPE_NAME> instead of VEC_TYPE_NAME_base.
      	(note_def_vec_alloc): Remove.
      	* gengtype.h (note_def_vec_alloc): Remove.
      	(DEFVEC_ALLOC): Remove token code.
      
      	* df-scan.c (df_bb_verify): Remove call to df_free_collection_rec
      	inside the insn traversal loop.
      	* gimplify.c (gimplify_compound_lval): Rename STACK to EXPR_STACK.
      	* ipa-inline.c (inline_small_functions): Rename HEAP to EDGE_HEAP.
      	* reg-stack.c (stack): Rename to STACK_PTR.  Update all users.
      	* tree-vrp.c (stack): Rename to EQUIV_STACK.  Update all users.
      
      	* config/bfin/bfin.c (hwloop_optimize): Update some calls to
      	VEC_* for vectors of non-pointers.
      	* config/c6x/c6x.c (try_rename_operands): Likewise.
      	(reshuffle_units): Likewise.
      	* config/mips/mips.c (mips_multi_start): Likewise.
      	(mips_multi_add): Likewise.
      	(mips_multi_copy_insn): Likewise.
      	(mips_multi_set_operand): Likewise.
      	* hw-doloop.c (discover_loop): Likewise.
      	(discover_loops): Likewise.
      	(reorg_loops): Likewise.
      
      2012-08-14   Diego Novillo  <dnovillo@google.com>
      
      	Merge from cxx-conversion branch.  C++ support in gengtype.
      
      	* coretypes.h (gt_pointer_operator): Move from ...
      	* ggc.h: ... here.
      	* doc/gty.texi: Document support for C++ templates and
      	user-provided markers.
      	* gcc/gengtype-lex.l: Update copyright year.
      	Remove support for recognizing DEF_VEC_O, DEF_VEC_P and
      	DEFVEC_I.
      	* gengtype-parse.c: Update copyright year.
      	(token_names): Remove DEF_VEC_O, DEF_VEC_P and DEF_VEC_I.
      	(require_template_declaration): New.
      	(typedef_name): Call it.
      	(type): Replace IS_UNION with KIND. Replace all users.
      	(def_vec): Remove.  Update all users.
      	* gengtype-state.c (type_lineloc): Handle TYPE_USER_STRUCT.
      	(write_state_user_struct_type): New.
      	(write_state_type): Call it.
      	(read_state_user_struct_type): New.
      	(read_state_type): Call it.
      	* gengtype.c: Update copyright year.
      	(dump_pair): Move declaration to the top.
      	(dump_type): Likewise.
      	(dump_type_list): Likewise.
      	(dbgprint_count_type_at): Handle TYPE_USER_STRUCT.
      	(create_user_defined_type): New.
      	(resolve_typedef): Call it.
      	(new_structure): Replace argument ISUNION with KIND.
      	Change users to refer to KIND directly.
      	Update all callers.
      	(find_structure): Likewise.
      	(set_gc_used_type): Handle TYPE_USER_STRUCT.
      	(create_file): Update HDR to include new copyright year.
      	(struct walk_type_data): Add field IN_PTR_FIELD.
      	(output_mangled_typename): Handle TYPE_USER_STRUCT.
      	(walk_type): Set D->IN_PTR_FIELD when walking a TYPE_POINTER.
      	Clear it afterwards.
      	Handle TYPE_USER_STRUCT.
      	(write_types_process_field): Handle TYPE_USER_STRUCT.
      	(get_type_specifier): Move earlier in the file.
      	(write_type_decl): New.
      	(write_marker_function_name): New.
      	(write_user_func_for_structure_ptr): New.
      	(write_user_func_for_structure_body): New.
      	(write_user_marking_functions): New.
      	(write_func_for_structure): Call write_marker_function_name
      	and write_type_decl.
      	Do not call walk_type for TYPE_USER_STRUCT. Emit a call to the user
      	function directly.
      	Call write_user_marking_functions on TYPE_USER_STRUCTs.
      	(write_types_local_user_process_field): New.
      	(write_pch_user_walking_for_structure_body): New.
      	(write_pch_user_walking_functions): New.
      	(write_types_local_process_field): Handle TYPE_USER_STRUCT.
      	(write_local_func_for_structure): Do not call walk_type for
      	TYPE_USER_STRUCT. Instead, emit the call to gt_pch_nx directly.
      	Call write_pch_user_walking_functions for TYPE_USER_STRUCTs.
      	(write_root): Handle TYPE_USER_STRUCT.
      	(vec_prefix_type): Remove.  Update all users.
      	(note_def_vec): Remove.  Update all users.
      	(dump_typekind): Handle TYPE_USER_STRUCT.
      	(dump_type): Initialize SEEN_TYPES, if needed.
      	Handle TYPE_USER_STRUCT.
      	(dump_everything): Do not initialize SEEN_TYPES.
      	* gengtype.h: Update copyright year.
      	(enum typekind): Add TYPE_USER_STRUCT.
      	(union_or_struct_p): Rename from UNION_OR_STRUCT_P.
      	Convert into function.
      	Add an overload taking const_type_p.
      	Update all callers.
      	(new_structure): Change second field to type enum typekind.
      	Update all users.
      	(find_structure): Likewise.
      	(note_def_vec): Remove.
      	(DEFVEC_OP): Remove.
      	(DEFVEC_I): Remove.
      	* ggc-page.c (gt_ggc_mx): Add entry points for marking
      	'const char *&', 'unsigned char *&' and 'unsigned char&'.
      	* ggc-zone.c (gt_ggc_mx): Add entry points for marking
      	'const char *&' and 'unsigned char *&'.
      	* stringpool.c (gt_pch_nx): Add entry points for marking
      	'const char *&', 'unsigned char *&' and 'unsigned char&'.
      	Add an entry point for the overload taking arguments 'unsigned char
      	*', 'gt_pointer_operator' and 'void *'.
      	* vec.h (struct vec_prefix): Remove GTY marker.
      	(struct vec_t): Remove GTY((length)) attribute from field 'vec'.
      	(gt_ggc_mx (vec_t<T> *)): New template function.
      	(gt_pch_nx (vec_t<T> *)): New template function.
      	(gt_pch_nx (vec_t<T *> *, gt_pointer_operator, void *)): New template
      	function.
      	(gt_pch_nx (vec_t<T> *, gt_pointer_operator, void *)): New template
      	function.
      
      	* basic-block.h (struct edge_def): Mark GTY((user)).
      	Remove all GTY markers from fields.
      	(gt_ggc_mx): Declare.
      	(gt_pch_nx): Declare.
      	* tree-cfg.c (gt_ggc_mx): New.
      	(gt_pch_nx): New.
      
      	* gengtype-lex.l (USER_GTY): Add pattern for "user".
      	* gengtype-parse.c (option): Handle USER_GTY.
      	(opts_have): New.
      	(type): Call it.
      	If the keyword 'user' is used, do not walk the fields
      	of the structure.
      	* gengtype.h (USER_GTY): Add.
      	* doc/gty.texi: Update.
      
      2012-08-14   Lawrence Crowl  <crowl@google.com>
      
      	Merge cxx-conversion branch.  Implement C++ hash table.
      
      	* hash-table.h: New. Implementation borrowed from libiberty/hashtab.c.
      	* hash-table.c: Likewise.
      	* tree-ssa-tail-merge.c: Include hash-table.h instead of hashtab.h.
      	(static htab_t same_succ_htab): Change type to hash_table;
      	move specification of helper functions from create call to declaration.
      	Change users to invoke member functions.
      	(same_succ_print_traverse): Make extern ssa_.... Change callers.
      	Remove void* casting.
      	(same_succ_hash): Likewise.
      	(same_succ_equal): Likewise.
      	(same_succ_delete): Likewise.
      	* tree-ssa-threadupdate.c: Include hash-table.h.
      	(struct local_info): Rename to ssa_local_info_t to avoid overloading
      	the type name local_info with the variable name local_info.
      	(static htab_t redirection_data): Change type to hash_table.
      	Move specification of helper functions from create call to declaration.
      	Change users to invoke member functions.
      	(redirection_data_hash): Make extern ssa_.... Change callers.
      	Remove void* casting.
      	(redirection_data_eq): Likewise.
      	(fix_duplicate_block_edges): Likewise.
      	(create_duplicates): Likewise.
      	(fixup_template_block): Likewise.
      	(redirect_edges): Likewise.
      	(lookup_redirection_data): Change types associated with the hash table
      	from void* to their actual type. Remove unnecessary casts.
      	* tree-ssa-ccp.c: Include hash-table.h.
      	(typedef gimple_htab): New.  Uses hash_table.  Replace specific uses
      	of htab_t with gimple_htab.  Change users to invoke member functions.
      	Move specification of helper functions from create call to declaration.
      	* tree-ssa-coalesce.c: Include hash-table.h instead of hashtab.h.
      	(hash_ssa_name_by_var): Make extern. Remove void* casting.
      	(eq_ssa_name_by_var): Likewise.
      	(coalesce_ssa_name): Change type of local static htab_t ssa_name_hash
      	to hash_table. Change users to invoke member functions.
      	Move specification of helper functions from create call to declaration.
      	* coverage.c: Include hash-table.h instead of hashtab.h.
      	(static htab_t counts_hash): Change type to hash_table;
      	move specification of helper functions from create call to declaration.
      	Change users to invoke member functions.
      	(htab_counts_entry_hash): Make extern. Rename with coverage_... instead
      	of htab_... Remove void* casting.
      	(htab_counts_entry_eq): Likewise.
      	(htab_counts_entry_del): Likewise.
      	* tree-ssa-pre.c: Include hash-table.h instead of hashtab.h.
      	(static htab_t expression_to_id): Change type to hash_table.
      	Move specification of helper functions from create call to declaration.
      	Change users to invoke member functions.
      	(static htab_t phi_translate_table): Likewise.
      	(pre_expr_eq): Make extern ssa_.... Change callers.
      	Remove void* casting.
      	(pre_expr_hash): Likewise.
      	(expr_pred_trans_hash): Likewise.
      	(expr_pred_trans_eq): Likewise.
      	(alloc_expression_id): Change types associated with the hash table
      	from void* to their actual type. Remove unnecessary casts.
      	(lookup_expression_id): Likewise.
      	(phi_trans_lookup): Likewise.
      	(phi_trans_add): Likewise.
      	* stringpool.c: Rename uses of libcpp typedef hash_table to
      	cpp_hash_table.
      	* Makefile.in: Add hash-table.o to OBJS-libcommon-target.
      	Add $(HASH_TABLE_H). Add new dependences on $(HASH_TABLE_H).
      
      2012-08-14   Lawrence Crowl  <crowl@google.com>
      
      	Merge from cxx-conversion branch.  Re-write double_int in C++.
      
      	* hash-table.h
      	(typedef double_int): Change to struct (POD).
      	(double_int::make): New overloads for int to double-int conversion.
      	(double_int::mask): New.
      	(double_int::max_value): New.
      	(double_int::min_value): New.
      	(double_int::operator ++): New.
      	(double_int::operator --): New.
      	(double_int::operator *=): New.
      	(double_int::operator +=): New.
      	(double_int::operator -=): New.
      	(double_int::to_signed): New.
      	(double_int::to_unsigned): New.
      	(double_int::fits_unsigned): New.
      	(double_int::fits_signed): New.
      	(double_int::fits): New.
      	(double_int::trailing_zeros): New.
      	(double_int::popcount): New.
      	(double_int::multiple_of): New.
      	(double_int::set_bit): New.
      	(double_int::mul_with_sign): New.
      	(double_int::operator * (binary)): New.
      	(double_int::operator + (binary)): New.
      	(double_int::operator - (binary)): New.
      	(double_int::operator - (unary)): New.
      	(double_int::operator ~ (unary)): New.
      	(double_int::operator & (binary)): New.
      	(double_int::operator | (binary)): New.
      	(double_int::operator ^ (binary)): New.
      	(double_int::and_not): New.
      	(double_int::lshift): New.
      	(double_int::rshift): New.
      	(double_int::alshift): New.
      	(double_int::arshift): New.
      	(double_int::llshift): New.
      	(double_int::lrshift): New.
      	(double_int::lrotate): New.
      	(double_int::rrotate): New.
      	(double_int::div): New.
      	(double_int::sdiv): New.
      	(double_int::udiv): New.
      	(double_int::mod): New.
      	(double_int::smod): New.
      	(double_int::umod): New.
      	(double_int::divmod): New.
      	(double_int::sdivmod): New.
      	(double_int::udivmod): New.
      	(double_int::ext): New.
      	(double_int::zext): New.
      	(double_int::sext): New.
      	(double_int::is_zero): New.
      	(double_int::is_one): New.
      	(double_int::is_minus_one): New.
      	(double_int::is_negative): New.
      	(double_int::cmp): New.
      	(double_int::ucmp): New.
      	(double_int::scmp): New.
      	(double_int::ult): New.
      	(double_int::ugt): New.
      	(double_int::slt): New.
      	(double_int::sgt): New.
      	(double_int::max): New.
      	(double_int::smax): New.
      	(double_int::umax): New.
      	(double_int::min): New.
      	(double_int::smin): New.
      	(double_int::umin): New.
      	(double_int::operator ==): New.
      	(double_int::operator !=): New.
      	(shwi_to_double_int): Change implementation to use member function.
      	(double_int_minus_one): Likewise.
      	(double_int_zero): Likewise.
      	(double_int_one): Likewise.
      	(double_int_two): Likewise.
      	(double_int_ten): Likewise.
      	(uhwi_to_double_int): Likewise.
      	(double_int_to_shwi): Likewise.
      	(double_int_to_uhwi): Likewise.
      	(double_int_fits_in_uhwi_p): Likewise.
      	(double_int_fits_in_shwi_p): Likewise.
      	(double_int_fits_in_hwi_p): Likewise.
      	(double_int_mul): Likewise.
      	(double_int_mul_with_sign): Likewise.
      	(double_int_add): Likewise.
      	(double_int_sub): Likewise.
      	(double_int_neg): Likewise.
      	(double_int_div): Likewise.
      	(double_int_sdiv): Likewise.
      	(double_int_udiv): Likewise.
      	(double_int_mod): Likewise.
      	(double_int_smod): Likewise.
      	(double_int_umod): Likewise.
      	(double_int_divmod): Likewise.
      	(double_int_sdivmod): Likewise.
      	(double_int_udivmod): Likewise.
      	(double_int_multiple_of): Likewise.
      	(double_int_setbit): Likewise.
      	(double_int_ctz): Likewise.
      	(double_int_not): Likewise.
      	(double_int_ior): Likewise.
      	(double_int_and): Likewise.
      	(double_int_and_not): Likewise.
      	(double_int_xor): Likewise.
      	(double_int_lshift): Likewise.
      	(double_int_rshift): Likewise.
      	(double_int_lrotate): Likewise.
      	(double_int_rrotate): Likewise.
      	(double_int_cmp): Likewise.
      	(double_int_scmp): Likewise.
      	(double_int_ucmp): Likewise.
      	(double_int_max): Likewise.
      	(double_int_smax): Likewise.
      	(double_int_umax): Likewise.
      	(double_int_min): Likewise.
      	(double_int_smin): Likewise.
      	(double_int_umin): Likewise.
      	(double_int_ext): Likewise.
      	(double_int_sext): Likewise.
      	(double_int_zext): Likewise.
      	(double_int_mask): Likewise.
      	(double_int_max_value): Likewise.
      	(double_int_min_value): Likewise.
      	(double_int_zero_p): Likewise.
      	(double_int_one_p): Likewise.
      	(double_int_minus_one_p): Likewise.
      	(double_int_equal_p): Likewise.
      	(double_int_popcount): Likewise.
      	* hash-table.c
      	(double_int_mask): Reuse implementation for double_int::mask.
      	(double_int_max_value): Likewise.
      	(double_int_min_value): Likewise.
      	(double_int_ext): Likewise.
      	(double_int_zext): Likewise.
      	(double_int_sext): Likewise.
      	(double_int_mul_with_sign): Likewise.
      	(double_int_divmod): Likewise.
      	(double_int_sdivmod): Likewise.
      	(double_int_udivmod): Likewise.
      	(double_int_div): Likewise.
      	(double_int_sdiv): Likewise.
      	(double_int_udiv): Likewise.
      	(double_int_mod): Likewise.
      	(double_int_smod): Likewise.
      	(double_int_umod): Likewise.
      	(double_int_multiple_of): Likewise.
      	(double_int_lshift): Likewise.
      	(double_int_rshift): Likewise.
      	(double_int_lrotate): Likewise.
      	(double_int_rrotate): Likewise.
      	(double_int_cmp): Likewise.
      	(double_int_ucmp): Likewise.
      	(double_int_scmp): Likewise.
      	(double_int_max): Likewise.
      	(double_int_smax): Likewise.
      	(double_int_umax): Likewise.
      	(double_int_min): Likewise.
      	(double_int_smin): Likewise.
      	(double_int_umin): Likewise.
      	(double_int_min): Likewise.
      	(double_int_min): Likewise.
      	(double_int_min): Likewise.
      	(double_int_min): Likewise.
      	(double_int_min): Likewise.
      	(double_int_min): Likewise.
      	(double_int::alshift): New.
      	(double_int::arshift): New.
      	(double_int::llshift): New.
      	(double_int::lrshift): New.
      	(double_int::ult): New.
      	(double_int::ugt): New.
      	(double_int::slt): New.
      	(double_int::sgt): New.
      	(double_int_setbit): Reuse implementation for double_int::set_bit,
      	which avoids a name conflict with a macro.
      	(double_int_double_int_ctz): Reuse implementation for
      	double_int::trailing_zeros.
      	(double_int_fits_in_shwi_p): Reuse implementation for
      	double_int::fits_signed.
      	(double_int_fits_in_hwi_p): Reuse implementation for double_int::fits.
      	(double_int_mul): Reuse implementation for binary
      	double_int::operator *.
      	(double_int_add): Likewise.
      	(double_int_sub): Likewise.
      	(double_int_neg): Reuse implementation for unary
      	double_int::operator -.
      	(double_int_max_value): Likewise.
      	* fixed-value.c: Change to use member functions introduced above.
      
      2012-08-14   Lawrence Crowl  <crowl@google.com>
      
      	Merge cxx-conversion branch.  Support tree macro calling
      	from gdb.
      
      	* tree.h (tree_check): New.
      	(TREE_CHECK): Use inline function above instead of __extension__.
      	(tree_not_check): New.
      	(TREE_NOT_CHECK): Use inline function above instead of __extension__.
      	(tree_check2): New.
      	(TREE_CHECK2): Use inline function above instead of __extension__.
      	(tree_not_check2): New.
      	(TREE_NOT_CHECK2): Use inline function above instead of __extension__.
      	(tree_check3): New.
      	(TREE_CHECK3): Use inline function above instead of __extension__.
      	(tree_not_check3): New.
      	(TREE_NOT_CHECK3): Use inline function above instead of __extension__.
      	(tree_check4): New.
      	(TREE_CHECK4): Use inline function above instead of __extension__.
      	(tree_not_check4): New.
      	(TREE_NOT_CHECK4): Use inline function above instead of __extension__.
      	(tree_check5): New.
      	(TREE_CHECK5): Use inline function above instead of __extension__.
      	(tree_not_check5): New.
      	(TREE_NOT_CHECK5): Use inline function above instead of __extension__.
      	(contains_struct_check): New.
      	(CONTAINS_STRUCT_CHECK): Use inline function above instead of
      	__extension__.
      	(tree_class_check): New.
      	(TREE_CLASS_CHECK): Use inline function above instead of __extension__.
      	(tree_range_check): New.
      	(TREE_RANGE_CHECK): Use inline function above instead of __extension__.
      	(omp_clause_subcode_check): New.
      	(OMP_CLAUSE_SUBCODE_CHECK): Use inline function above instead of
      	__extension__.
      	(omp_clause_range_check): New.
      	(OMP_CLAUSE_RANGE_CHECK): Use inline function above instead of
      	__extension__.
      	(expr_check): New.
      	(EXPR_CHECK): Use inline function above instead of __extension__.
      	(non_type_check): New.
      	(NON_TYPE_CHECK): Use inline function above instead of __extension__.
      	(tree_vec_elt_check): New.
      	(TREE_VEC_ELT_CHECK): Use inline function above instead of
      	__extension__.
      	(omp_clause_elt_check): New.
      	(OMP_CLAUSE_ELT_CHECK): Use inline function above instead of
      	__extension__.
      	(tree_operand_check): New.
      	(TREE_OPERAND_CHECK): Use inline function above instead of
      	__extension__.
      	(tree_operand_check_code): New.
      	(TREE_OPERAND_CHECK_CODE): Use inline function above instead of
      	__extension__.
      	(TREE_CHAIN): Simplify implementation.
      	(TREE_TYPE): Simplify implementation.
      	(tree_operand_length): Move for compilation dependences.
      	* gdbinit.in: (macro define __FILE__): New.
      	(macro define __LINE__): New.
      	(skip "tree.h"): New.
      
      gcc/cp/ChangeLog
      2012-08-14   Diego Novillo  <dnovillo@google.com>
      
      	Merge from cxx-conversion branch.  Re-write VEC in C++.
      
      	* call.c (add_function_candidate): Remove const qualifier
      	from call to VEC_index.
      
      2012-08-14   Diego Novillo  <dnovillo@google.com>
      
      	Merge from cxx-conversion branch.  Configury.
      
      	* go-c.h: Remove all handlers of ENABLE_BUILD_WITH_CXX.
      	* go-gcc.cc: Likewise.
      	* go-system.h: Likewise.
      
      From-SVN: r190402
      Diego Novillo committed
  9. 30 Jul, 2012 1 commit
    • gengtype.c (adjust_field_type): Diagnose duplicate "length" option applications… · c0fd3497
      gengtype.c (adjust_field_type): Diagnose duplicate "length" option applications and option being applied to...
      
      gcc:
      2012-07-27  Laurynas Biveinis  <laurynas.biveinis@gmail.com>
      	    Steven Bosscher  <steven@gcc.gnu.org>
      
      	* gengtype.c (adjust_field_type): Diagnose duplicate "length"
      	option applications and option being applied to arrays of atomic
      	types.
      	(walk_type): Allow "atomic" option on strings too.
      	* dwarf2out.h (struct dw_vec_struct): Use the "atomic" GTY option
      	for the array field.
      	* vec.h: Describe the atomic object "A" type of the macros in
      	the header comment.
      	(VEC_T_GTY_ATOMIC, DEF_VEC_A, DEF_VEC_ALLOC_A): Define.
      	* emit-rtl.c (locations_locators_vals): use the atomic object
      	vector.
      	* doc/gty.texi: Clarify that GTY option "length" is only for
      	arrays of non-atomic objects.  Fix typo in the description of the
      	"atomic" option.
      
      gcc/java:
      2012-07-24  Laurynas Biveinis  <laurynas.biveinis@gmail.com>
      
      	* jcf.h (CPool): Use the "atomic" GTY option for the tags field.
      	(bootstrap_method): Likewise for the bootstrap_arguments field.
      
      libcpp:
      2012-07-24  Laurynas Biveinis  <laurynas.biveinis@gmail.com>
      
      	* include/line-map.h (line_map_macro): Use the "atomic" GTY option
      	for the macro_locations field.
      
      Co-Authored-By: Steven Bosscher <steven@gcc.gnu.org>
      
      From-SVN: r189951
      Laurynas Biveinis committed
  10. 19 Jun, 2012 1 commit
  11. 13 Jun, 2012 2 commits
  12. 05 Jun, 2012 1 commit
  13. 04 Jun, 2012 1 commit
    • PR preprocessor/53463 - Fix system header detection for built-in macro tokens · 7ca643e1
      The location for a built-in macro token is BUILTIN_LOCATION.  When we
      see that location value, we cannot know if that token was used in a
      system header or not.  And that can trigger some unwanted warnings on
      e.g, the use of __LONG_LONG_MAX__ built-in macro in system headers
      when we compile with -pedantic, like in the test case accompanying
      this patch.
      
      In that case, I think we ought to step-up to see where the built-in
      macro has been expanded, until we see a location that is not for a
      built-in macro.  Then we can check if the resulting location is in a
      system header or not.
      
      Now that we step up to the location of first non-built-in-macro token,
      it appeared that for
      testsuite/c-c++-common/dfp/convert-int-saturate.c, G++ then fails to
      emit the warning in:
      
          volatile unsigned int usi;
          int
          main ()
          {
            usi = DEC32_MAX;  /* { dg-warning "overflow in implicit constant conversion" } */
           ...
          }
      
      Because DEC32_MAX is defined in the system header float.h as a
      built-in macro:
      
          #define DEC32_MAX	__DEC32_MAX__
      
      And during the parsing of the assignment expression that should have
      led to the warning above, input_location is set to the location for
      the DEC32_MAX, which is actually the location for the built-in
      __DECL32_MAX_EXP.
      
      A possible fix is to use the location of the "=" operator as the
      default location for assignment expressions.  This is what the patch
      does.
      
      I had to adjust a couple of tests to arrange for this.
      
      Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.
      
      libcpp/
      
      	PR preprocessor/53463
      	* line-map.c (linemap_location_in_system_header_p): For built-in
      	macro tokens, check the first expansion point location for that is
      	not for a token coming from a built-in macro.
      
      gcc/cp/
      
      	PR preprocessor/53463
      	* parser.c (cp_parser_assignment_expression): Use the location
      	for the LHS as the default location for the expression.
      
      gcc/testsuite/
      
      	PR preprocessor/53463
      	* g++.dg/cpp/limits.C: New test.
      	* g++.dg/parse/error19.C: Adjust.
      	* g++.dg/warn/Wconversion-real-integer2.C: Likewise.
      	* g++.dg/warn/pr35635.C: Likewise.
      	* g++.old-deja/g++.pt/assign1.C: Likewise.
      
      From-SVN: r188203
      Dodji Seketeli committed
  14. 29 May, 2012 4 commits
    • directives.c: Fix typos. · 7d9641cc
      	* directives.c: Fix typos.
      	* include/line-map.h: Fix typos.
      	* line-map.c: Fix typos.
      	* macro.c: Fix typos.
      
      From-SVN: r187966
      Joseph Myers committed
    • PR bootstrap/53459 - unused local typedef when building on altivec · 53a103d3
      	PR bootstrap/53459
      	* lex.c (search_line_fast): Avoid unused local typedefs to simulate
      	a static assertion.
      
      From-SVN: r187947
      Dodji Seketeli committed
    • Revert "PR bootstrap/53459 - unused local typedef when building on altivec" · 6de6b1ec
      This reverts commit r187853
      
      From-SVN: r187946
      Dodji Seketeli committed
    • PR preprocessor/53229 - Fix diagnostics location when pasting tokens · 828a7f76
      As stated in the audit trail of this problem report, consider this
      test case:
      
          $ cat test.c
      	 1	struct x {
      	 2	  int i;
      	 3	};
      	 4	struct x x;
      	 5
      	 6	#define TEST(X) x.##X
      	 7
      	 8	void foo (void)
      	 9	{
      	10	  TEST(i) = 0;
      	11	}
          $
      
          $ cc1 -quiet test.c
          test.c: In function 'foo':
          test.c:10:1: error: pasting "." and "i" does not give a valid preprocessing token
             TEST(i) = 0;
           ^
          $
      
      So, when pasting tokens, the error diagnostic uses the global and
      imprecise input_location variable, leading to an imprecise output.
      
      To properly fix this, I think libcpp should keep the token of the
      pasting operator '##', instead of representing it with flag on the LHS
      operand's token.  That way, it could use its location.  Doing that
      would be quite intrusive though.  So this patch just uses the location
      of the LHS of the pasting operator, for now.  It's IMHO better than
      the current situation.
      
      The patch makes paste_tokens take a location parameter that is used in
      the diagnostics.  This change can still be useful later when we can
      use the location of the pasting operator, because paste_tokens will
      just be passed the new, more precise location.
      
      Incidentally, it appeared that when getting tokens from within
      preprocessor directives (like what is done in gcc.dg/cpp/paste12.c),
      with -ftrack-macro-expansion disabled, the location of the expansion
      point of macros was being lost because
      cpp_reader::set_invocation_location wasn't being properly set.  It's
      because when cpp_get_token_1 calls enter_macro_context, there is a
      little period of time between the beginning of that later function and
      when the macro is really pushed (and thus when the macro is really
      expanded) where we wrongly consider that we are not expanding the
      macro because macro_of_context is still NULL.  In that period of time,
      in the occurrences of indirect recursive calls to cpp_get_token_1,
      this later function wrongly sets cpp_reader::invocation_location
      because cpp_reader::set_invocation_location is not being properly set.
      
      To avoid that confusion the patch does away with
      cpp_reader::set_invocation_location and introduces a new flag
      cpp_reader::about_to_expand_macro_p that is set in the small time
      interval exposed earlier.  A new in_macro_expansion_p is introduced as
      well, so that cpp_get_token_1 can now accurately detect when we are in
      the process of expanding a macro, and thus correctly collect the
      location of the expansion point.
      
      People seem to like screenshots.
      
      Thus, after the patch, we now have:
      
          $ cc1 -quiet test.c
          test.c: In function 'foo':
          test.c:6:18: error: pasting "." and "i" does not give a valid preprocessing token
           #define TEST(X) x.##X
      		      ^
          test.c:10:3: note: in expansion of macro 'TEST'
             TEST(i) = 0;
             ^
          $
      
      Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.
      
      libcpp/
      
      	PR preprocessor/53229
      	* internal.h (cpp_reader::set_invocation_location): Remove.
      	(cpp_reader::about_to_expand_macro_p): New member flag.
      	* directives.c (do_pragma):  Remove Kludge as
      	pfile->set_invocation_location is no more.
      	* macro.c (cpp_get_token_1): Do away with the use of
      	cpp_reader::set_invocation_location.  Just collect the macro
      	expansion point when we are about to expand the top-most macro.
      	Do not override cpp_reader::about_to_expand_macro_p.
      	This fixes gcc.dg/cpp/paste12.c by making get_token_no_padding
      	properly handle locations of expansion points.
      	(cpp_get_token_with_location): Adjust, as
      	cpp_reader::set_invocation_location is no more.
      	(paste_tokens): Take a virtual location parameter for
      	the LHS of the pasting operator.  Use it in diagnostics.  Update
      	comments.
      	(paste_all_tokens): Tighten the assert.  Propagate the location of
      	the expansion point when no virtual locations are available.
      	Pass the virtual location to paste_tokens.
      	(in_macro_expansion_p): New static function.
      	(enter_macro_context): Set the cpp_reader::about_to_expand_macro_p
      	flag until we really start expanding the macro.
      
      gcc/testsuite/
      
      	PR preprocessor/53229
      	* gcc.dg/cpp/paste6.c: Force to run without
      	-ftrack-macro-expansion.
      	* gcc.dg/cpp/paste8.c: Likewise.
      	* gcc.dg/cpp/paste8-2.c: New test, like paste8.c but run with
      	-ftrack-macro-expansion.
      	* gcc.dg/cpp/paste12.c: Force to run without
      	-ftrack-macro-expansion.
      	* gcc.dg/cpp/paste12-2.c: New test, like paste12.c but run with
      	-ftrack-macro-expansion.
      	* gcc.dg/cpp/paste13.c: Likewise.
      	* gcc.dg/cpp/paste14.c: Likewise.
      	* gcc.dg/cpp/paste14-2.c: New test, like paste14.c but run with
      	-ftrack-macro-expansion.
      	* gcc.dg/cpp/paste18.c: New test.
      
      From-SVN: r187945
      Dodji Seketeli committed
  15. 24 May, 2012 1 commit
  16. 16 May, 2012 1 commit
    • PR preprocessor/7263 - Avoid pedantic warnings on system headers macro tokens · 0b2c4be5
      Now that we track token locations accross macro expansions, it would
      be cool to be able to fix PR preprocessor/7263 for real.  That is,
      consider this example where we have a system header named header.h
      like this:
      
      	#define _Complex __complex__ #define _Complex_I 1.0iF
      
      and then a normal C file like this:
      
          #include "header.h"
      
          static _Complex float c = _Complex_I;
      
      If we compile the file with -pedantic, the usages of _Complex or
      _Complex_I should not trigger any warning, even though __complex__ and
      the complex literal are extensions to the standard C.
      
      They shouldn't trigger any warning because _Complex and _Complex_I are
      defined in a system header (and expanded in normal user code).
      
      To be able to handle this, we must address two separate concerns.
      
      First, warnings about non-standard usage of numerical literals are emitted
      directly from within libcpp.  So we must teach libcpp's parser for numerical
      literals to use virtual locations, instead of the spelling
      location it uses today.  Once we have that, as the diagnostics machinery
      already knows how to avoid emitting errors happening on tokens that come from
      system headers, we win.
      
      Second, there is the issue of tracking locations for declaration
      specifiers, like the "_Complex" in the declaration:
      
      	static _Complex float c;
      
      For that, we need to arrange for each possible declaration specifier
      to have its own location, because otherwise, we'd warn on e.g, on:
      
          _Complex float c;
      
      but not on:
      
          static _Complex float c;
      
      So this patch addresses the two concerns above.  It's actually a
      follow-up on an earlier patch[1] I wrote as part of my initial work on
      virtual locations.  We then agreed[2] that the second concern was
      important to address before the patch could get a chance to go in.
      
      [1]: http://gcc.gnu.org/ml/gcc-patches/2011-09/msg00957.html
      [2]: http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00264.html
      
      Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.
      
      libcpp/
      
      	PR preprocessor/7263
      	* include/cpplib.h (cpp_classify_number): Take a location
      	parameter.
      	* expr.c (SYNTAX_ERROR_AT, SYNTAX_ERROR2_AT): New diagnostic
      	macros that take a location parameter.
      	(cpp_classify_number): Take a (virtual) location parameter.  Use
      	it for diagnostics.  Adjust comments.
      	(eval_token): Take a location parameter.  Pass it to
      	cpp_classify_number and to diagnostic routines.
      	(_cpp_parse_expr): Use virtual locations of tokens when parsing
      	expressions.  Pass a virtual location to eval_token and to
      	diagnostic routines.
      
      gcc/c-family/
      
      	PR preprocessor/7263
      	* c-lex.c (c_lex_with_flags):  Pass a virtual location to the call
      	to cpp_classify_number.  For diagnostics, use the precise location
      	instead of the global input_location.
      
      gcc/
      	PR preprocessor/7263
      	* c-tree.h (enum c_declspec_word): Declare new enum.
      	(struct c_declspecs::locations): New member.
      	(declspecs_add_qual, declspecs_add_scspec)
      	(declspecs_add_addrspace, declspecs_add_alignas): Take a new
      	location parameter.
      	* c-decl.c (build_null_declspecs): Initialize the new struct
      	c_declspecs::locations member.
      	(declspecs_add_addrspace): Take a location parameter for the
      	address space.  Store it onto declaration specifiers.
      	(declspecs_add_qual): Likewise, take a location parameter for the
      	qualifier.
      	(declspecs_add_type): Likewise, take a location parameter for the
      	type specifier.
      	(declspecs_add_scspec): Likewise, take a location parameter for
      	the storage class specifier.
      	(declspecs_add_attrs): Likewise, take a location parameter for the
      	first attribute.
      	(declspecs_add_alignas): Likewise, take a location parameter for
      	the alignas token.
      	(finish_declspecs): For diagnostics, use the location of the
      	relevant declspec, instead of the global input_location.
      	* c-parser.c (c_parser_parameter_declaration): Pass the precise
      	virtual location of the declspec to the declspecs-setters.
      	(c_parser_declspecs): Likewise.  Avoid calling c_parser_peek_token
      	repeatedly.
      
      gcc/cp/
      
      	PR preprocessor/7263
      	* cp-tree.h (enum cp_decl_spec): Add new enumerators to cover all
      	the possible declarator specifiers so far.
      	(struct cp_decl_specifier_seq::locations): Declare new member.
      	(cp_decl_specifier_seq::{specs, type_location}): Remove.
      	(decl_spec_seq_has_spec_p): Declare new function.
      	* parser.c (cp_parser_check_decl_spec): Remove.
      	(set_and_check_decl_spec_loc): Define new static function.
      	(decl_spec_seq_has_spec_p): Define new public function.
      	(cp_parser_decl_specifier_seq, cp_parser_function_specifier_opt)
      	(cp_parser_type_specifier, cp_parser_simple_type_specifier)
      	(cp_parser_set_storage_class, cp_parser_set_decl_spec_type)
      	(cp_parser_alias_declaration): Set the locations for each
      	declspec, using set_and_check_decl_spec_loc.
      	(cp_parser_explicit_instantiation, cp_parser_init_declarator)
      	(cp_parser_member_declaration, cp_parser_init_declarator): Use the
      	new declspec location for specifiers.  Use the new
      	decl_spec_seq_has_spec_p.
      	(cp_parser_type_specifier_seq): Use the new
      	set_and_check_decl_spec_loc.  Stop using
      	cp_parser_check_decl_spec.  Use the new decl_spec_seq_has_spec_p.
      	(, cp_parser_init_declarator): Use the new
      	set_and_check_decl_spec_loc.
      	(cp_parser_single_declaration, cp_parser_friend_p)
      	(cp_parser_objc_class_ivars, cp_parser_objc_struct_declaration):
      	Use the new decl_spec_seq_has_spec_p.
      	* decl.c (check_tag_decl): Use new decl_spec_seq_has_spec_p.  Use
      	the more precise ds_redefined_builtin_type_spec location for
      	diagnostics about re-declaring C++ built-in types.
      	(start_decl, grokvardecl, grokdeclarator): Use the new
      	decl_spec_seq_has_spec_p.
      
      gcc/testsuite/
      
      	PR preprocessor/7263
      	* gcc.dg/binary-constants-2.c: Run without tracking locations
      	accross macro expansion.
      	* gcc.dg/binary-constants-3.c: Likewise.
      	* gcc.dg/cpp/sysmac2.c: Likewise.
      	* testsuite/gcc.dg/nofixed-point-2.c: Adjust for more precise
      	location.
      	* gcc.dg/cpp/syshdr3.c: New test.
      	* gcc.dg/cpp/syshdr3.h: New header for the new test above.
      	* gcc.dg/system-binary-constants-1.c: New test.
      	* gcc.dg/system-binary-constants-1.h: New header for the new test
      	above.
      	* g++.dg/cpp/syshdr3.C: New test.
      	* g++.dg/cpp/syshdr3.h: New header the new test above.
      	* g++.dg/system-binary-constants-1.C: New test.
      	* g++.dg/system-binary-constants-1.h: New header the new test
      	above.
      
      From-SVN: r187587
      Dodji Seketeli committed
  17. 10 May, 2012 1 commit
  18. 02 May, 2012 1 commit
    • Properly initialize cpp_context in destringize_and_run · 3ad64f53
      destringize_and_run forgets to initialize all the fields of the
      cpp_context that it pushes.  Later _cpp_pop_context then gets confused
      when it accesses context->tokens_kind via the call to macro_of_context
      on context->prev.
      
      The first hunk of this patch is the real obvious fix.  The second hunk
      is just an assert that I am adding to err on the safe side.
      
      Tested by on x86_64-unknown-linux-gnu against trunk by running the
      test gcc.dg/gomp/macro-4.c under Valgrind, and bootstrapped.
      
      libcpp/
      
      	* directives.c (destringize_and_run): Properly initialize the new
      	context.
      	* macro.c (_cpp_pop_context): Assert that we shouldn't try to pop
      	the initial base context, which has the same life time as the
      	current instance of cpp_file.
      
      From-SVN: r187054
      Dodji Seketeli committed
  19. 30 Apr, 2012 7 commits
    • * libcpp/ChangeLog: Fix PR number. · 3efc2959
      From-SVN: r186992
      Manuel López-Ibáñez committed
    • re PR c++/52974 (Canonicalize include paths in diagnostics) · b193dfa8
      2012-04-30  Manuel López-Ibáñez  <manu@gcc.gnu.org>
      	    Dodji Seketeli  <dodji@seketeli.org>
      
      	PR c++/52974
      	* libcpp/files.c (maybe_shorter_path): New.
      	(find_file_in_dir): Use it.
      
      Co-Authored-By: Dodji Seketeli <dodji@seketeli.org>
      
      From-SVN: r186991
      Manuel López-Ibáñez committed
    • Switch -ftrack-macro-expansion=2 on by default. · 51fce2d3
      This switches the compiler to -ftrack-macro-expansion=2 by default.
      
      Tested and bootstrapped on x86_64-unknown-linux-gnu against trunk.
      
      libcpp/
      
      	* init.c (cpp_create_reader): Switch -ftrack-macro-expansion=2 on
      	by default.  Add comments.
      
      gcc/docs/
      
      	* cppopts.texi: Adjust for enabling -ftrack-macro-expansion=2 by
      	default.
      
      From-SVN: r186977
      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
    • Fix expansion point loc for macro-like tokens · 3600218c
      Consider the test case gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c.
      Its interesting part is:
      
          #define A(x) vari x /* line 7.  */
          #define vari(x)
          #define B , varj
          int A(B) ;  /* line 10.  */
      
      In its initial version, this test was being pre-processed as:
      
          # 1 "gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c"
          # 1 "build/gcc//"
          # 1 "<command-line>"
          # 1 "gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c"
          # 10 "gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c"
          int
          # 7 "gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c"
      		 vari
      
      	, varj ;
      
      Note how "int" and "vari" are on separate lines, whereas "int" and
      ", varj" are on the same line.
      
      This looks like a bug to me, even independantly from the macro
      location tracking work.
      
      With macro location tracking turned on, the preprocessed output
      becomes:
      
          # 1 "gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c"
          # 1 "<command-line>"
          # 1 "gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c"
          # 10 "gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c"
          int vari , varj ;
      
      Which, IMO, is what we'd expect.
      
      This is due to an unexpected side effect of enter_macro_context when
      passed a token that might look like a function-like macro at first
      sight, but that it eventually considers to not be a macro after all.
      
      This is the case for the "vari" token which looks like a macro when it
      is first lexed, but is eventually considered to be a normal token by
      enter_macro_context because it's not used as a function-like macro
      invocation.
      
      In that case, besides returning NULL, enter_macro_context sets
      pfile->context->c.macro to NULL, making cpp_get_token_1 forget to set
      the location of the "vari" to the expansion point of A.
      
      enter_macro_context sets pfile->context->c.macro to NULL in that case
      because funlike_invocation_p reads one token pass "foo", sees that
      there is no '(' token, so we are not invoking the function-like
      parameter.  It then puts the tokens (which it has read after "foo")
      back into the tokens stream by calling _cpp_push_token_context on it,
      which sets pfile->context->c.macro to NULL, saying in essence that the
      current macro expansion context is "stopped".
      
      The fix here is to teach _cpp_push_token and
      push_extended_tokens_context to continue the current macro context
      when passed a NULL macro.  But then, now that there can be several
      continguous contexts associated with the same macro, we need to teach
      _cpp_pop_context to re-enable the expansion of the current macro only
      when we are really out of expanding the current macro.  Otherwise we
      can run in cases where we have recursive expansions of the same macro.
      
      Tested on x86_64-unknown-linux-gnu against trunk.  Now this test has
      the same output with and without tracking locations accross macro
      expansions.
      
      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 (macro_of_context): New static function.
      	(_cpp_push_token_context, push_extended_tokens_context): If the
      	macro argument is NULL, it means we are continuing the expansion
      	of the current macro, if any.  Update comments.
      	(_cpp_pop_context): Re-enable expansion of the macro only when we
      	are really out of the context of the current expansion.
      
      gcc/testsuite/
      
      	* gcc.dg/debug/dwarf2/pr41445-5.c: Adjust.
      	* gcc.dg/debug/dwarf2/pr41445-6.c: Likewise.
      
      From-SVN: r186968
      Dodji Seketeli committed
    • Fix token pasting with -ftrack-macro-expansion · 0ff2b8a0
      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
    • Fix cpp_sys_macro_p with -ftrack-macro-expansion · 4e65a470
      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
  20. 29 Apr, 2012 1 commit
    • Don't use C++ style comments in libcpp · 112448b4
      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
  21. 27 Apr, 2012 1 commit
    • Add new option, -Wliteral-suffix. · 7f5f5f98
      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
  22. 26 Apr, 2012 1 commit
    • tree-diagnostic.c (maybe_unwind_expanded_macro_loc): Fix comment. · 1d72e96f
      2012-04-26  Manuel López-Ibáñez  <manu@gcc.gnu.org>
      
      	* tree-diagnostic.c (maybe_unwind_expanded_macro_loc): Fix
      	comment. Delete unused parameter first_exp_point_map.
      	(virt_loc_aware_diagnostic_finalizer): Update call.
      libcpp/
      	* line-map.c (linemap_resolve_location): Synchronize comments with
      	those in line-map.h.
      	* include/line-map.h (linemap_resolve_location): Fix spelling in
      	comment.
      
      From-SVN: r186860
      Manuel López-Ibáñez committed
  23. 24 Apr, 2012 1 commit
  24. 27 Mar, 2012 1 commit
  25. 22 Mar, 2012 1 commit
  26. 18 Mar, 2012 1 commit