1. 27 Mar, 2012 1 commit
  2. 22 Mar, 2012 1 commit
  3. 18 Mar, 2012 1 commit
  4. 14 Mar, 2012 1 commit
    • Remove obsolete Solaris 8 support · 7888f266
      	libstdc++-v3:
      	* config/os/solaris/solaris2.8: Rename to ...
      	* config/os/solaris/solaris2.9: ... this.
      	* config/abi/post/solaris2.8: Rename to ...
      	* config/abi/post/solaris2.9: ... this.
      	* configure.host (os_include_dir): Remove solaris2.8.
      	Reflect renaming.
      	(abi_baseline_pair): Remove *-*-solaris2.8.
      	Reflect renaming.
      
      	* configure.ac (GLIBCXX_CHECK_MATH_PROTO): Remove
      	(GLIBCXX_CHECK_STDLIB_PROTO): Remove.
      	* acinclude.m4 (GLIBCXX_CHECK_MATH_PROTO): Remove
      	(GLIBCXX_CHECK_STDLIB_PROTO): Remove.
      	(GLIBCXX_CHECK_GTHREADS): Remove Solaris 8 handling.
      	* crossconfig.m4 (GLIBCXX_CROSSCONFIG): Remove *-solaris2.8
      	handling.
      	* configure: Regenerate.
      	* config.h.in: Regenerate.
      
      	* config/os/solaris/solaris2.9/os_defines.h
      	(__CORRECT_ISO_CPP_MATH_H_PROTO): Define.
      	(__CORRECT_ISO_CPP_STDLIB_H_PROTO): Define.
      	* include/c_global/cmath: Rename __CORRECT_ISO_CPP_MATH_H_PROTO1
      	to __CORRECT_ISO_CPP_MATH_H_PROTO.
      	[!__CORRECT_ISO_CPP_MATH_H_PROTO2]: Remove.
      	* include/tr1/cmath: Rename __CORRECT_ISO_CPP_MATH_H_PROTO1 to
      	__CORRECT_ISO_CPP_MATH_H_PROTO.
      
      	* doc/xml/manual/configure.xml (Configure, --enable-libstdcxx-threads):
      	Remove Solaris 8 reference.
      
      	* testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc:
      	Don't xfail on *-*-solaris2.8.
      	* testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc:
      	Likewise.
      	* testsuite/ext/enc_filebuf/char/13598.cc: Don't xfail on
      	*-*-solaris2.8.
      
      	libjava:
      	* configure.ac (THREADLIBS): Remove *-*-solaris2.8 handling.
      	* configure: Regenerate.
      
      	libgcc:
      	* config/i386/sol2-unwind.h (x86_fallback_frame_state): Remove
      	Solaris 8 handling.
      	* config/sparc/sol2-unwind.h (sparc64_is_sighandler): Remove
      	Solaris 8 handling.
      	(sparc_is_sighandler): Likewise.
      
      	libcpp:
      	* lex.c: Remove Solaris 8 reference.
      
      	gcc/testsuite:
      	* g++.dg/warn/miss-format-1.C: Remove *-*-solaris2.8 handling.
      	* gcc.dg/c99-stdint-6.c: Likewise.
      	* gcc.dg/lto/20090210_0.c: Likewise.
      	* gcc.dg/pr28796-2.c: Don't skip on sparc*-sun-solaris2.8.
      	* gcc.dg/pragma-init-fini.c: Don't skip on i?86-*-solaris2.8.
      	* gcc.dg/pragma-init-fini-2.c: Likewise.
      	* gcc.dg/torture/pr47917.c: Remove *-*-solaris2.8 handling.
      	* gcc.target/i386/pr22076.c: Remove i?86-*-solaris2.8 handling.
      	* gcc.target/i386/pr22152.c: Likewise.
      	* gcc.target/i386/vect8-ret.c: Likewise.
      	* lib/target-supports.exp (add_options_for_tls): Remove Solaris 8
      	handling.
      
      	gcc:
      	* config.gcc (enable_obsolete): Remove *-*-solaris2.8*.
      	(*-*-solaris2.[0-8], *-*-solaris2.[0-8].*): Mark unsupported.
      	(i[34567]86-*-solaris2*, x86_64-*-solaris2.1[0-9]*): Remove
      	Solaris 8 support.
      	* configure.ac (gcc_cv_ld_hidden): Remove *-*-solaris2.8*.
      	(ld_tls_support): Remove Solaris 8 references.
      	(lwp_dir, lwp_spec): Remove support for alternate thread library.
      	* acinclude.m4 (gcc_cv_initfini_array): Remove *-*-solaris2.*
      	tests.
      	* configure: Regenerate.
      	* config.in: Regenerate.
      
      	* config/sol2.h (LINK_SPEC): Remove LIB_THREAD_LDFLAGS_SPEC.
      	* config/i386/sol2.h: Remove Solaris 8 references.
      
      	* doc/install.texi (Specific, i?86-*-solaris2.[89]): Rename to ...
      	(i?86-*-solaris2.9): ... this.
      	Remove Solaris 8 references.
      	(Specific, *-*-solaris2*): Document Solaris 8 removal.
      	Remove Solaris 8 references.
      
      	fixincludes:
      	* inclhack.def (math_exception): Remove duplicate.
      	(solaris_cond_init): Remove.
      	(solaris_sys_va_list): Remove Solaris 8 support.
      	* fixincl.x: Regenerate.
      	* tests/base/pthread.h [SOLARIS_COND_INIT_CHECK]: Remove.
      
      From-SVN: r185392
      Rainer Orth committed
  5. 14 Feb, 2012 1 commit
    • Add ports for TILE-Gx and TILEPro. · dd552284
      .
      	* MAINTAINERS (tilegx port): Add myself.
      	(tilepro port): Add myself.
      
      contrib
      	* config-list.mk (LIST): Add tilegx-linux-gnu and
      	tilepro-linux-gnu.
      	* gcc_update (gcc/config/tilegx/mul-tables.c): New dependencies.
      	(gcc/config/tilepro/mul-tables.c): New dependencies.
      
      gcc
      	* config.gcc: Handle tilegx and tilepro.
      	* configure.ac (gcc_cv_as_dwarf2_debug_line): Enable test for
      	tilegx and tilepro.
      	Add HAVE_AS_TLS check for tilegx and tilepro.
      	* configure: Regenerate.
      	* doc/contrib.texi: Add Mat Hostetter and self.
      	* doc/extend.texi (TILE-Gx Built-in Functions): New node.
      	Document instruction intrinsics and network accessing intrinsics.
      	(TILEPro Built-in Functions): New node.	 Document instruction
      	intrinsics and network accessing intrinsics.
      	* doc/install.texi (Specific, tilegx-*-linux*): Document it.
      	(Specific, tilepro-*-linux*): Likewise.
      	* doc/invoke.texi (TILE-Gx Options): New section.
      	(TILEPro Options): New section.
      	* doc/md.texi (TILE-Gx): New section.
      	(TILEPro): New section.
      	* common/config/tilegx: New directory for tilegx.
      	* common/config/tilepro: New directory for tilepro.
      	* config/tilegx: New directory for tilegx.
      	* config/tilepro: New directory for tilepro.
      
      gcc/testsuite
      	* g++.dg/other/PR23205.C: Disable test on tile.
      	* g++.dg/other/pr23205-2.C: Disable test on tile.
      	* gcc.dg/20020312-2.c: Add a condition for __tile__.
      	* gcc.dg/20040813-1.c: Disable test on tile.
      	* gcc.dg/lower-subreg-1.c: Disable test on tilegx.
      	* gcc.misc-tests/linkage.exp: Handle tilegx.
      
      libcpp
      	* configure.ac: Require 64-bit hwint for tilegx and tilepro.
      	* configure: Regenerate.
      
      libgcc
      	* config.host: Handle tilegx and tilepro.
      	* config/tilegx: New directory for tilegx.
      	* config/tilepro: New directory for tilepro.
      
      libgomp
      	* configure.tgt: Handle tilegx and tilepro.
      	* config/linux/tile: New directory for tilegx and tilepro.
      
      Added:
           trunk/gcc/common/config/tilegx/tilegx-common.c
           trunk/gcc/common/config/tilepro/tilepro-common.c
           trunk/gcc/config/tilegx/constraints.md
           trunk/gcc/config/tilegx/linux.h
           trunk/gcc/config/tilegx/mul-tables.c
           trunk/gcc/config/tilegx/predicates.md
           trunk/gcc/config/tilegx/sync.md
           trunk/gcc/config/tilegx/t-tilegx
           trunk/gcc/config/tilegx/tilegx-builtins.h
           trunk/gcc/config/tilegx/tilegx-c.c
           trunk/gcc/config/tilegx/tilegx-generic.md
           trunk/gcc/config/tilegx/tilegx-modes.def
           trunk/gcc/config/tilegx/tilegx-multiply.h
           trunk/gcc/config/tilegx/tilegx-protos.h
           trunk/gcc/config/tilegx/tilegx.c
           trunk/gcc/config/tilegx/tilegx.h
           trunk/gcc/config/tilegx/tilegx.md
           trunk/gcc/config/tilegx/tilegx.opt
           trunk/gcc/config/tilepro/constraints.md
           trunk/gcc/config/tilepro/gen-mul-tables.cc
           trunk/gcc/config/tilepro/linux.h
           trunk/gcc/config/tilepro/mul-tables.c
           trunk/gcc/config/tilepro/predicates.md
           trunk/gcc/config/tilepro/t-tilepro
           trunk/gcc/config/tilepro/tilepro-builtins.h
           trunk/gcc/config/tilepro/tilepro-c.c
           trunk/gcc/config/tilepro/tilepro-generic.md
           trunk/gcc/config/tilepro/tilepro-modes.def
           trunk/gcc/config/tilepro/tilepro-multiply.h
           trunk/gcc/config/tilepro/tilepro-protos.h
           trunk/gcc/config/tilepro/tilepro.c
           trunk/gcc/config/tilepro/tilepro.h
           trunk/gcc/config/tilepro/tilepro.md
           trunk/gcc/config/tilepro/tilepro.opt
           trunk/libgcc/config/tilegx/sfp-machine.h
           trunk/libgcc/config/tilegx/sfp-machine32.h
           trunk/libgcc/config/tilegx/sfp-machine64.h
           trunk/libgcc/config/tilegx/t-crtstuff
           trunk/libgcc/config/tilegx/t-softfp
           trunk/libgcc/config/tilegx/t-tilegx
           trunk/libgcc/config/tilepro/atomic.c
           trunk/libgcc/config/tilepro/atomic.h
           trunk/libgcc/config/tilepro/linux-unwind.h
           trunk/libgcc/config/tilepro/sfp-machine.h
           trunk/libgcc/config/tilepro/softdivide.c
           trunk/libgcc/config/tilepro/softmpy.S
           trunk/libgcc/config/tilepro/t-crtstuff
           trunk/libgcc/config/tilepro/t-tilepro
           trunk/libgomp/config/linux/tile/futex.h
      Modified:
           trunk/MAINTAINERS
           trunk/contrib/config-list.mk
           trunk/contrib/gcc_update
           trunk/gcc/config.gcc
           trunk/gcc/configure
           trunk/gcc/configure.ac
           trunk/gcc/doc/contrib.texi
           trunk/gcc/doc/extend.texi
           trunk/gcc/doc/install.texi
           trunk/gcc/doc/invoke.texi
           trunk/gcc/doc/md.texi
           trunk/gcc/testsuite/g++.dg/other/PR23205.C
           trunk/gcc/testsuite/g++.dg/other/pr23205-2.C
           trunk/gcc/testsuite/gcc.dg/20020312-2.c
           trunk/gcc/testsuite/gcc.dg/20040813-1.c
           trunk/gcc/testsuite/gcc.dg/lower-subreg-1.c
           trunk/gcc/testsuite/gcc.misc-tests/linkage.exp
           trunk/libcpp/configure
           trunk/libcpp/configure.ac
           trunk/libgcc/config.host
           trunk/libgomp/configure.tgt
      
      From-SVN: r184203
      Walter Lee committed
  6. 31 Jan, 2012 2 commits
  7. 30 Jan, 2012 1 commit
  8. 27 Jan, 2012 1 commit
  9. 09 Jan, 2012 2 commits
  10. 03 Jan, 2012 1 commit
  11. 20 Dec, 2011 2 commits
    • gcc: · 48b0b196
      	* c-decl.c (diagnose_mismatched_decls, grokdeclarator, grokfield)
      	(finish_struct): Refer to C11 in comments.  Use flag_isoc11.
      	* c-parser.c (c_parser_static_assert_declaration)
      	(c_parser_static_assert_declaration_no_semi, c_parser_declspecs)
      	(c_parser_alignas_specifier, c_parser_alignof_expression): Refer
      	to C11 in comments.  Use flag_isoc11.
      	* c-typeck.c (comptypes_check_different_types): Refer to C11 in
      	comment.
      	* doc/cpp.texi (Overview): Refer to -std=c11 instead of -std=c1x.
      	* doc/cppopts.texi (-std=c11, -std=gnu11): Document in preference
      	to -std=c1x and -std=gnu1x.
      	* doc/extend.texi (Inline, Alternate Keywords, Other Builtins)
      	(__builtin_complex, Unnamed Fields): Refer to -std=c11 and C11
      	instead of -std=c1x and C1X.
      	* doc/invoke.texi (-std=c11, -std=iso9899:2011): Document in
      	preference to -std=c1x.
      	(-std=gnu11): Document in preference to -std=gnu1x.
      	* doc/standards.texi: Document C11 instead of C1X.  Document C11
      	as actual standard.  Document headers required from freestanding
      	C11 implementations.
      	* ginclude/float.h, ginclude/stddef.h: Test __STDC_VERSION__ >=
      	201112L for C11.  Update comments to refer to C11.
      
      gcc/c-family:
      	* c-common.c (flag_isoc99): Update comment to refer to C11.
      	(flag_isoc1x): Change to flag_isoc11.
      	* c-common.h (flag_isoc99): Update comment to refer to C11.
      	(flag_isoc1x): Change to flag_isoc11.
      	* c-cppbuiltin.c (cpp_atomic_builtins): Change comment to refer to
      	C11.
      	* c-opts.c (set_std_c1x): Change to set_std_c11.
      	(c_common_handle_option): Handle OPT_std_c11 and OPT_std_gnu11.
      	Call set_std_c11.
      	(set_std_c89, set_std_c99, set_std_c11): Use flag_isoc11.
      	(set_std_c1): Use CLK_STDC11 and CLK_GNUC11.
      	* c.opt (std=c1x): Change to std=c11.  Document as non-draft
      	standard.
      	(std=c1x, std=iso9899:2011): Add as aliases of std=c11.
      	(std=gnu1x): Change to std=gnu11.  Refer to non-draft standard.
      	(std=gnu1x): Make alias of std=gnu11.
      
      gcc/testsuite:
      	* gcc.dg/c11-version-1.c, gcc.dg/c11-version-2.c,
      	gcc.dg/c94-version-1.c, gcc.dg/c99-version-1.c,
      	gcc.dg/gnu11-version-1.c: New tests.
      
      libcpp:
      	* include/cpplib.h (CLK_GNUC1X): Change to CLK_GNUC11.
      	(CLK_STDC1X): Change to CLK_STDC11.
      	* init.c (lang_defaults): Update comments.
      	(cpp_init_builtins): Update language tests.  Use 201112L for C11
      	__STDC_VERSION__.
      
      From-SVN: r182551
      Joseph Myers committed
    • warnings.m4 (ACX_PROG_CC_WARNING_OPTS): Avoid leading dash in expr call. · 4a5e00ca
      config/:
      	* warnings.m4 (ACX_PROG_CC_WARNING_OPTS): Avoid leading dash in
      	expr call.
      fixincludes/:
      	* configure: Regenerate.
      gcc/:
      	* configure: Regenerate.
      libcpp/:
      	* configure: Regenerate.
      libdecnumber/:
      	* configure: Regenerate.
      libiberty/:
      	* configure: Regenerate.
      lto-plugin/:
      	* configure: Regenerate.
      
      From-SVN: r182546
      Andreas Schwab committed
  12. 19 Dec, 2011 1 commit
    • Check for warning flags without no- prefix · 095af58f
      config/:
      	PR bootstrap/51388
      	* warnings.m4 (ACX_PROG_CC_WARNING_OPTS)
      	(ACX_PROG_CC_WARNING_ALMOST_PEDANTIC): Run the test without the
      	no- prefix.
      fixincludes/:
      	* configure: Regenerate.
      gcc/:
      	* configure: Regenerate.
      libcpp/:
      	* configure: Regenerate.
      libdecnumber/:
      	* configure: Regenerate.
      libiberty/:
      	* configure: Regenerate.
      lto-plugin/:
      	* configure: Regenerate.
      
      From-SVN: r182478
      Andreas Schwab committed
  13. 07 Dec, 2011 1 commit
  14. 05 Dec, 2011 1 commit
  15. 22 Nov, 2011 1 commit
  16. 21 Nov, 2011 1 commit
  17. 03 Nov, 2011 1 commit
  18. 02 Nov, 2011 2 commits
  19. 31 Oct, 2011 2 commits
    • re PR libstdc++/1773 (__cplusplus defined to 1, should be 199711L) · 1fb80b0c
      	PR libstdc++/1773
      	* init.c (cpp_init_builtins): Set __cplusplus for C++11.
      
      From-SVN: r180708
      Jason Merrill committed
    • re PR c++/50920 (add a -std=c++11 option to the driver) · 97e3ad20
      	PR c++/50920
      gcc/c-family
      	* c-common.h (cxx_dialect): Add cxx11 and cxx03.
      	* c.opt: Add -std=c++11, -std=gnu++11, -std=gnu++03,
      	and -Wc++11-compat.
      	* c-opts.c (set_std_cxx11): Rename from set_std_cxx0x.
      gcc/cp
      	* class.c (check_field_decl): Change c++0x in diags to c++11.
      	* error.c (maybe_warn_cpp0x): Likewise.
      	* parser.c (cp_parser_diagnose_invalid_type_name): Likewise.
      	* pt.c (check_default_tmpl_args): Likewise.
      libcpp
      	* include/cpplib.h (enum c_lang): Rename CLK_CXX0X to CLK_CXX11,
      	CLK_GNUCXX0X to CLK_GNUCXX11.
      libstdc++-v3
      	* include/bits/c++0x_warning.h: Change -std=c++0x to -std=c++11.
      
      From-SVN: r180707
      Jason Merrill committed
  20. 26 Oct, 2011 1 commit
    • Implement C++11 user-defined literals. · 3ce4f9e4
      libcpp/
      	* expr.c: (cpp_interpret_float_suffix, cpp_interpret_int_suffix,
      	cpp_userdef_string_remove_type, cpp_userdef_string_add_type,
      	cpp_userdef_char_remove_type, cpp_userdef_char_add_type,
      	cpp_userdef_string_p, cpp_userdef_char_p, cpp_get_userdef_suffix): New.
      	(cpp_classify_number): Classify unrecognized tokens as user-defined
      	literals.
      	* include/cpplib.h: Add new tokens for user-defined literals.
      	* init.c: Add new preprocessor flag (cxx11).
      	* lex.c: (lex_string, lex_raw_string): Handle user-defined literals
      	including concatenation and promotion with suffixes.
      c-family/
      	* c-common.c (build_userdef_literal): New.
      	* c-common.def: New tree code.
      	* c-common.h (tree_userdef_literal): New tree struct and accessors.
      	* c-lex.c (interpret_float): Add suffix parm.
      	(c_lex_with_flags): Build literal tokens.
      cp/
      	* cp-objcp-common.c: (cp_tree_size) Return size of USERDEF_LITERAL tree.
      	* cp-tree.h: (UDLIT_OP_*, UDLIT_OPER_P): Literal operator
      	name tools. New tree code for user-defined literals.
      	* cxx-pretty-print.h: (pp_cxx_userdef_literal) New.
      	* cxx-pretty-print.c: (pp_cxx_userdef_literal) New.
      	(pp_cxx_primary_expression, pp_cxx_expression): Use it.
      	* decl.c: (cp_tree_node_structure): Return new tree code.
      	(duplicate_decls): Check for raw vs. template operator conflicts.
      	(grokfndecl, grokdeclarator): New checks for literal operators.
      	* error.c: (dump_expr): Warn about user-defined literals
      	in C++98 mode. (dump_function_name): Pretty printing.
      	* mangle.c: (write_literal_operator_name): New.
      	(write_unqualified_id, write_unqualified_name): Use it.
      	* parser.c: (cp_parser_operator): Handle operator"".
      	(cp_parser_userdef_char_literal, cp_parser_userdef_numeric_literal,
      	cp_parser_userdef_string_literal): New.
      	(cp_parser_primary_expression): Handle new user-defined literal tokens
      	with new functions.
      	* semantics.c: (potential_constant_expression_1): Add
      	user-defined literals.
      	* typeck.c (check_raw_literal_operator,
      	check_literal_operator_args): New.
      
      From-SVN: r180536
      Ed Smith-Rowland committed
  21. 25 Oct, 2011 2 commits
    • Fix lookup of macro maps · 3bb0c8db
      	* line-map.c (linemap_macro_map_lookup): Fix logic.
      
      From-SVN: r180427
      Dodji Seketeli committed
    • 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
  22. 22 Oct, 2011 1 commit
  23. 20 Oct, 2011 1 commit
  24. 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
  25. 17 Oct, 2011 6 commits
    • Fix bootstrapping with --disable-checking · 411f92de
      libcpp/ChangeLog
      
      	* line-map.c (linemap_macro_map_loc_to_exp_point): Avoid setting a
      	variable without using it if ENABLE_CHECKING is not defined.  Mark
      	the LOCATION parameter as being unused.
      
      From-SVN: r180090
      Dodji Seketeli committed
    • Reduce memory waste due to non-power-of-2 allocs · b9bd6f74
      This patch basically arranges for the allocation size of line_map
      buffers to be as close as possible to a power of two.  This
      *significantly* decreases peak memory consumption as (macro) maps are
      numerous and stay live during all the compilation.
      
      The patch adds a new ggc_round_alloc_size interface to the ggc
      allocator.  In each of the two main allocator implementations ('page'
      and 'zone') the function has been extracted from the main allocation
      function code and returns the actual size of the allocated memory
      region, thus giving a chance to the caller to maximize the amount of
      memory it actually uses from the allocated memory region.  In the
      'none' allocator implementation (that uses xmalloc) the
      ggc_round_alloc_size just returns the requested allocation size.
      
      Co-Authored-By: Dodji Seketeli <dodji@redhat.com>
      
      From-SVN: r180086
      Tom Tromey committed
    • 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
    • Support -fdebug-cpp option · 847e697a
      This patch adds -fdebug-cpp option. When used with -E this dumps the
      relevant macro map before every single token. This clutters the output
      a lot but has proved to be invaluable in tracking some bugs during the
      development of the virtual location support.
      
      Co-Authored-By: Dodji Seketeli <dodji@redhat.com>
      
      From-SVN: r180084
      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
  26. 28 Aug, 2011 1 commit
    • Fix the use of linemap_add and remove unnecessary kludge · 892a371f
      libcpp/
      
      	* line-map.c (linemap_add): Assert that reason must not be
      	LC_RENAME when called for the first time on a "main input file".
      
      c-family/
      
      	* c-pch.c (c_common_read_pch): Call linemap_add with LC_ENTER as it's
      	the first time it's being called on this main TU.
      
      gcc/lto/
      
      	* lto-lang.c (lto_init): Likewise.  Also, avoid calling
      	linemap_add twice.
      
      gcc/fortran/
      
      	* scanner.c (load_file): Don't abuse LC_RENAME reason while
      	(indirectly) calling linemap_add.
      
      From-SVN: r178146
      Dodji Seketeli committed
  27. 22 Aug, 2011 1 commit
    • Add ability to force lexed tokens' source_locations. · e3dfef44
      Use it to force BUILTINS_LOCATION when declaring builtins instead of creating a <built-in> entry in the line_table which is wrong.
      
      	* c-opts.c (c_finish_options): Force BUILTINS_LOCATION for tokens
      	defined in cpp_init_builtins and c_cpp_builtins.
      
      	gcc/fortran/ChangeLog
      	* cpp.c (gfc_cpp_init): Force BUILTINS_LOCATION for tokens
      	defined in cpp_define_builtins.
      
      	libcpp/ChangeLog
      	* init.c (cpp_create_reader): Inititalize forced_token_location_p.
      	* internal.h (struct cpp_reader): Add field forced_token_location_p.
      	* lex.c (_cpp_lex_direct): Use forced_token_location_p.
      	(cpp_force_token_locations): New.
      	(cpp_stop_forcing_token_locations): New.
      
      From-SVN: r177973
      Gabriel Charette committed
  28. 18 Aug, 2011 2 commits