Skip to content
Snippets Groups Projects
  1. Jan 14, 2013
  2. May 29, 2012
    • Joseph Myers's avatar
      directives.c: Fix typos. · 7d9641cc
      Joseph Myers authored
      	* directives.c: Fix typos.
      	* include/line-map.h: Fix typos.
      	* line-map.c: Fix typos.
      	* macro.c: Fix typos.
      
      From-SVN: r187966
      7d9641cc
    • Dodji Seketeli's avatar
      PR preprocessor/53229 - Fix diagnostics location when pasting tokens · 828a7f76
      Dodji Seketeli authored
      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
      828a7f76
  3. May 02, 2012
    • Dodji Seketeli's avatar
      Properly initialize cpp_context in destringize_and_run · 3ad64f53
      Dodji Seketeli authored
      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
      3ad64f53
  4. Apr 30, 2012
    • Dodji Seketeli's avatar
      Fix expansion point loc for macro-like tokens · 3600218c
      Dodji Seketeli authored
      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
      3600218c
    • Dodji Seketeli's avatar
      Fix token pasting with -ftrack-macro-expansion · 0ff2b8a0
      Dodji Seketeli authored
      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
      0ff2b8a0
    • Dodji Seketeli's avatar
      Fix cpp_sys_macro_p with -ftrack-macro-expansion · 4e65a470
      Dodji Seketeli authored
      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
      4e65a470
  5. Jan 09, 2012
    • Richard Guenther's avatar
      macro.c (_cpp_builtin_macro_text): Remove unused variable map. · 2c5cbc31
      Richard Guenther authored
      2012-01-09  Richard Guenther  <rguenther@suse.de>
      
      	* macro.c (_cpp_builtin_macro_text): Remove unused variable map.
      
      From-SVN: r183013
      2c5cbc31
    • Gary Funck's avatar
      re PR preprocessor/33919 (__BASE_FILE__ does not expand correctly when... · b492b686
      Gary Funck authored
      re PR preprocessor/33919 (__BASE_FILE__ does not expand correctly when included from the command line)
      
      libcpp/
      	PR preprocessor/33919
      	* files.c (_cpp_get_file_name): New. Implement file name
      	access function.
      	* internal.h (_cpp_get_file_name): New prototype.
      	* macro.c (_cpp_builtin_macro_text): Call _cpp_get_file_name()
      	to use pfile->main_file in lieu of traversing INCLUDED_FROM chain.
      
      gcc/testsuite/
      	PR preprocessor/33919
      	* gcc.dg/pr33919.c: New test.
      	* gcc.dg/pr33919-0.h: New test header file.
      	* gcc.dg/pr33919-1.h: Ditto.
      	* gcc.dg/pr33919-2.h: Ditto.
      
      From-SVN: r183003
      b492b686
  6. Dec 05, 2011
  7. Oct 18, 2011
    • Dodji Seketeli's avatar
      Fix bootstrap on !NO_IMPLICIT_EXTERN_C and ia32 targets · d17687f6
      Dodji Seketeli authored
      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
      d17687f6
  8. Oct 17, 2011
    • Tom Tromey's avatar
      Add line map statistics to -fmem-report output · 64a1a422
      Tom Tromey authored
      
      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: default avatarDodji Seketeli <dodji@redhat.com>
      
      From-SVN: r180085
      64a1a422
    • Tom Tromey's avatar
      Generate virtual locations for tokens · 92582b75
      Tom Tromey authored
      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: default avatarDodji Seketeli <dodji@redhat.com>
      
      From-SVN: r180082
      92582b75
    • Tom Tromey's avatar
      Linemap infrastructure for virtual locations · 46427374
      Tom Tromey authored
      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
      46427374
  9. Apr 20, 2011
    • Jim Meyering's avatar
      remove useless if-before-free tests · 04695783
      Jim Meyering authored
      Change "if (E) free (E);" to "free (E);" everywhere except in the
      libgo/, intl/, zlib/ and classpath/ directories.
      Also transform equivalent variants like
      "if (E != NULL) free (E);" and allow an extra cast on the
      argument to free.  Otherwise, the tested and freed "E"
      expressions must be identical, modulo white space.
      
      From-SVN: r172785
      04695783
  10. Sep 29, 2010
    • Joseph Myers's avatar
      optc-gen.awk: Generate global_options initializer instead of individual variables. · e3339d0f
      Joseph Myers authored
      gcc:
      	* optc-gen.awk: Generate global_options initializer instead of
      	individual variables.  Add x_ prefix to names of structure
      	members.
      	* opth-gen.awk: Generate gcc_options structure.  Add x_ prefix to
      	names of structure members.
      	* doc/tm.texi.in (HARD_FRAME_POINTER_IS_FRAME_POINTER,
      	HARD_FRAME_POINTER_IS_ARG_POINTER): Document.
      	* doc/tm.texi: Regenerate.
      	* alias.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
      	* builtins.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER.
      	* c-parser.c (disable_extension_diagnostics,
      	restore_extension_diagnostics): Update names of cpp_options
      	members.
      	* combine.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
      	* common.opt (fcompare-debug-second): Don't use Var.
      	* config/alpha/alpha.h (target_flags): Remove.
      	* config/arm/arm.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
      	HARD_FRAME_POINTER_IS_ARG_POINTER): Define.
      	* config/bfin/bfin.h (target_flags): Remove.
      	* config/cris/cris.h (target_flags): Remove.
      	* config/i386/i386-c.c (ix86_pragma_target_parse): Update names of
      	cl_target_option members.
      	* config/i386/i386.c (ix86_force_align_arg_pointer): Remove.
      	(ix86_function_specific_print, ix86_valid_target_attribute_tree,
      	ix86_can_inline_p): Update names of cl_target_option members.
      	* config/i386/i386.h (ix86_isa_flags): Remove.
      	* config/lm32/lm32.h (target_flags): Remove.
      	* config/mcore/mcore.h (mcore_stack_increment): Remove.
      	* config/mcore/mcore.md (addsi3): Remove extern declaration of
      	flag_omit_frame_pointer.
      	* config/mep/mep.h (target_flags): Remove.
      	* config/mips/mips.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
      	HARD_FRAME_POINTER_IS_ARG_POINTER): Define.
      	* config/mmix/mmix.h (target_flags): Remove.
      	* config/rs6000/rs6000.h (rs6000_xilinx_fpu, flag_pic,
      	flag_expensive_optimizations): Remove.
      	* config/s390/s390.h (flag_pic): Remove.
      	* config/score/score-conv.h (target_flags): Remove.
      	* config/sh/sh.h (sh_fixed_range_str): Remove.
      	* config/spu/spu.h (target_flags, spu_fixed_range_string): Remove.
      	* dbxout.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER
      	* df-scan.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
      	* diagnostic.c (diagnostic_initialize): Update names of
      	diagnostic_context members.
      	* diagnostic.h (diagnostic_context): Rename inhibit_warnings and
      	warn_system_headers.
      	(diagnostic_report_warnings_p): Update for new names.
      	* dwarf2out.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER
      	* emit-rtl.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER and
      	HARD_FRAME_POINTER_IS_ARG_POINTER.
      	* flags.h (flag_compare_debug): Declare.
      	* ira.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
      	* opts.c (flag_compare_debug): Define.
      	(common_handle_option): Update names of diagnostic_context
      	members.  Handle -fcompare-debug-second.
      	(fast_math_flags_struct_set_p): Update names of cl_optimization
      	members.
      	* reginfo.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
      	* regrename.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
      	* reload.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
      	* reload1.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
      	* resource.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
      	* rtl.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
      	HARD_FRAME_POINTER_IS_ARG_POINTER): Define and use.
      	* sel-sched.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
      	* stmt.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER.
      
      gcc/c-family:
      	* c-common.c (c_cpp_error): Update names of diagnostic_context
      	members.
      	* c-cppbuiltin.c (c_cpp_builtins_optimize_pragma): Update names of
      	cl_optimization members.
      	* c-opts.c (warning_as_error_callback, c_common_handle_option,
      	sanitize_cpp_opts, finish_options): Update names of cpp_options
      	members.
      
      gcc/fortran:
      	* cpp.c (cpp_define_builtins): Update names of gfc_option_t
      	members.
      	(gfc_cpp_post_options): Update names of cpp_options members.
      	(cb_cpp_error): Update names of diagnostic_context members.
      	* f95-lang.c (gfc_init_builtin_functions): Update names of
      	gfc_option_t members.
      	* gfortran.h (gfc_option_t): Rename warn_conversion and
      	flag_openmp.
      	* intrinsic.c (gfc_convert_type_warn): Update names of
      	gfc_option_t members.
      	* options.c (gfc_init_options, gfc_post_options, set_Wall,
      	gfc_handle_option): Update names of gfc_option_t members.
      	* parse.c (next_free, next_fixed): Update names of gfc_option_t
      	members.
      	* scanner.c (pedantic): Remove extern declaration.
      	(skip_free_comments, skip_fixed_comments, include_line): Update
      	names of gfc_option_t members.
      	* trans-decl.c (gfc_generate_function_code): Update names of
      	gfc_option_t members.
      
      gcc/java:
      	* java-tree.h (flag_filelist_file, flag_assert, flag_jni,
      	flag_force_classes_archive_check, flag_redundant, flag_newer,
      	flag_use_divide_subroutine, flag_use_atomic_builtins,
      	flag_use_boehm_gc, flag_hash_synchronization,
      	flag_check_references, flag_optimize_sci, flag_indirect_classes,
      	flag_indirect_dispatch, flag_store_check,
      	flag_reduced_reflection): Remove.
      	* jcf-dump.c (flag_newer): Remove.
      	* jcf.h (quiet_flag): Remove.
      	* parse.h (quiet_flag): Remove.
      
      libcpp:
      	* include/cpplib.h (cpp_options): Rename warn_deprecated,
      	warn_traditional, warn_long_long and pedantic.
      	* directives.c (directive_diagnostics, _cpp_handle_directive):
      	Update names of cpp_options members.
      	* expr.c (cpp_classify_number, eval_token): Update names of
      	cpp_options members.
      	* init.c (cpp_create_reader, post_options): Update names of
      	cpp_options members.
      	* internal.h (CPP_PEDANTIC, CPP_WTRADITIONAL): Update names of
      	cpp_options members.
      	* macro.c (parse_params): Update names of cpp_options members.
      
      From-SVN: r164723
      e3339d0f
  11. Jun 11, 2010
    • Jakub Jelinek's avatar
      cpplib.h (struct cpp_callbacks): Add user_builtin_macro callback. · 8e680db5
      Jakub Jelinek authored
      	* include/cpplib.h (struct cpp_callbacks): Add user_builtin_macro
      	callback.
      	(enum cpp_builtin_type): Add BT_FIRST_USER and BT_LAST_USER.
      	(cpp_macro_definition): Remove const qual from second argument.
      	* macro.c (enter_macro_context): Call user_builtin_macro callback for
      	NODE_BUILTIN !NODE_USED macros.
      	(warn_of_redefinition): Likewise.  Remove const qual from second
      	argument.
      	(cpp_macro_definition): Likewise.
      	* pch.c (write_macdef, save_macros): Call user_builtin_macro callback
      	for NODE_BUILTIN !NODE_USED macros.
      
      	* c-family/c-cppbuiltin.c: Include cpp-id-data.h.
      	(lazy_hex_fp_values, lazy_hex_fp_value_count): New variables.
      	(lazy_hex_fp_value): New function.
      	(builtin_define_with_hex_fp_value): Provide definitions lazily.
      	* Makefile.in (c-family/c-cppbuiltin.o): Depend on $(CPP_ID_DATA_H).
      
      From-SVN: r160626
      8e680db5
  12. Apr 07, 2010
    • Simon Baldwin's avatar
      diagnostic.h (diagnostic_override_option_index): New macro to set a diagnostic's option_index. · 87cf0651
      Simon Baldwin authored
      	* diagnostic.h (diagnostic_override_option_index): New macro to
      	set a diagnostic's option_index.
      	* c-tree.h (c_cpp_error): Add warning reason argument.
      	* opts.c (_warning_as_error_callback): New.
      	(register_warning_as_error_callback): Store callback for
      	warnings enabled via enable_warning_as_error.
      	(enable_warning_as_error): Call callback, minor code tidy.
      	* opts.h (register_warning_as_error_callback): Declare.
      	* c-opts.c (warning_as_error_callback): New, set cpp_opts flag in
      	response to -Werror=.
      	(c_common_init_options): Register warning_as_error_callback in opts.c.
      	* common.opt: Add -Wno-cpp option.
      	* c-common.c (struct reason_option_codes_t): Map cpp warning
      	reason codes to gcc option indexes.
      	* (c_option_controlling_cpp_error): New function, lookup the gcc
      	option index for a cpp warning reason code.
      	* (c_cpp_error): Add warning reason argument, call
      	c_option_controlling_cpp_error for diagnostic_override_option_index.
      	* doc/invoke.texi: Document -Wno-cpp.
      
      	* cpp.c (cb_cpp_error): Add warning reason argument, set a value
      	for diagnostic_override_option_index if CPP_W_WARNING_DIRECTIVE.
      
      	* directives.c (do_diagnostic): Add warning reason argument,
      	call appropriate error reporting function for code.
      	(directive_diagnostics): Call specific warning functions with
      	warning reason where appropriate.
      	(do_error, do_warning, do_pragma_dependency): Add warning reason
      	argument to do_diagnostic calls.
      	* macro.c (_cpp_warn_if_unused_macro, enter_macro_context,
      	_cpp_create_definition): Call specific warning functions with
              warning reason where appropriate.
      	* Makefile.in: Add new diagnostic functions to gettext translations.
      	* include/cpplib.h (struct cpp_callbacks): Add warning reason code
      	to error callback.
      	(CPP_DL_WARNING, CPP_DL_WARNING_SYSHDR, CPP_DL_PEDWARN, CPP_DL_ERROR,
      	CPP_DL_ICE, CPP_DL_NOTE, CPP_DL_FATAL): Replace macros with enums.
      	(CPP_W_NONE, CPP_W_DEPRECATED, CPP_W_COMMENTS,
      	CPP_W_MISSING_INCLUDE_DIRS, CPP_W_TRIGRAPHS, CPP_W_MULTICHAR,
      	CPP_W_TRADITIONAL, CPP_W_LONG_LONG, CPP_W_ENDIF_LABELS,
      	CPP_W_NUM_SIGN_CHANGE, CPP_W_VARIADIC_MACROS,
      	CPP_W_BUILTIN_MACRO_REDEFINED, CPP_W_DOLLARS, CPP_W_UNDEF,
      	CPP_W_UNUSED_MACROS, CPP_W_CXX_OPERATOR_NAMES, CPP_W_NORMALIZE,
      	CPP_W_INVALID_PCH, CPP_W_WARNING_DIRECTIVE): New enums for cpp
      	warning reason codes.
      	(cpp_warning, cpp_pedwarning, cpp_warning_syshdr,
      	cpp_warning_with_line, cpp_pedwarning_with_line,
      	cpp_warning_with_line_syshdr): New specific error reporting functions.
      	* pch.c (cpp_valid_state): Call specific warning functions with
              warning reason where appropriate.
      	* errors.c (cpp_diagnostic, cpp_diagnostic_with_line): New central
      	diagnostic handlers.
      	(cpp_warning, cpp_pedwarning, cpp_warning_syshdr,
      	cpp_warning_with_line, cpp_pedwarning_with_line,
      	cpp_warning_with_line_syshdr): New specific error reporting functions.
      	* expr.c (cpp_classify_number, eval_token, num_unary_op): Call
      	specific warning functions with warning reason where appropriate.
      	* lex.c (_cpp_process_line_notes, _cpp_skip_block_comment,
      	warn_about_normalization, lex_identifier_intern, lex_identifier,
      	_cpp_lex_direct): Ditto.
      	* charset.c (_cpp_valid_ucn, convert_hex, convert_escape,
      	narrow_str_to_charconst): Ditto.
      
      	* gcc.dg/cpp/warn-undef-2.c: New.
      	* gcc.dg/cpp/warn-traditional-2.c: New.
      	* gcc.dg/cpp/warn-comments-2.c: New.
      	* gcc.dg/cpp/warning-directive-1.c: New.
      	* gcc.dg/cpp/warn-long-long.c: New.
      	* gcc.dg/cpp/warn-traditional.c: New.
      	* gcc.dg/cpp/warn-variadic-2.c: New.
      	* gcc.dg/cpp/warn-undef.c: New.
      	* gcc.dg/cpp/warn-normalized-1.c: New.
      	* gcc.dg/cpp/warning-directive-2.c: New.
      	* gcc.dg/cpp/warn-long-long-2.c: New.
      	* gcc.dg/cpp/warn-variadic.c: New.
      	* gcc.dg/cpp/warn-normalized-2.c: New.
      	* gcc.dg/cpp/warning-directive-3.c: New.
      	* gcc.dg/cpp/warn-deprecated-2.c: New.
      	* gcc.dg/cpp/warn-trigraphs-1.c: New.
      	* gcc.dg/cpp/warn-multichar-2.c: New.
      	* gcc.dg/cpp/warn-normalized-3.c: New.
      	* gcc.dg/cpp/warning-directive-4.c: New.
      	* gcc.dg/cpp/warn-unused-macros.c: New.
      	* gcc.dg/cpp/warn-trigraphs-2.c: New.
      	* gcc.dg/cpp/warn-cxx-compat-2.c: New.
      	* gcc.dg/cpp/warn-cxx-compat.c: New.
      	* gcc.dg/cpp/warn-redefined.c: New.
      	* gcc.dg/cpp/warn-trigraphs-3.c: New.
      	* gcc.dg/cpp/warn-unused-macros-2.c: New.
      	* gcc.dg/cpp/warn-deprecated.c: New.
      	* gcc.dg/cpp/warn-trigraphs-4.c: New.
      	* gcc.dg/cpp/warn-redefined-2.c: New.
      	* gcc.dg/cpp/warn-comments.c: New.
      	* gcc.dg/cpp/warn-multichar.c: New.
      	* g++.dg/cpp/warning-directive-1.C: New.
      	* g++.dg/cpp/warning-directive-2.C: New.
      	* g++.dg/cpp/warning-directive-3.C: New.
      	* g++.dg/cpp/warning-directive-4.C: New.
      	* gfortran.dg/warning-directive-1.F90: New.
      	* gfortran.dg/warning-directive-3.F90: New.
      	* gfortran.dg/warning-directive-2.F90: New.
      	* gfortran.dg/warning-directive-4.F90: New.
      
      From-SVN: r158079
      87cf0651
  13. Nov 20, 2009
  14. Oct 19, 2009
    • Jakub Jelinek's avatar
      charset.c (cpp_init_iconv): Initialize utf8_cset_desc. · 2c6e3f55
      Jakub Jelinek authored
      	* charset.c (cpp_init_iconv): Initialize utf8_cset_desc.
      	(_cpp_destroy_iconv): Destroy utf8_cset_desc, char16_cset_desc
      	and char32_cset_desc.
      	(converter_for_type): Handle CPP_UTF8STRING.
      	(cpp_interpret_string): Handle CPP_UTF8STRING and raw-strings.
      	* directives.c (get__Pragma_string): Handle CPP_UTF8STRING.
      	(parse_include): Reject raw strings.
      	* include/cpplib.h (CPP_UTF8STRING): New token type.
      	* internal.h (struct cpp_reader): Add utf8_cset_desc field.
      	* lex.c (lex_raw_string): New function.
      	(lex_string): Handle u8 string literals, call lex_raw_string
      	for raw string literals.
      	(_cpp_lex_direct): Call lex_string even for u8" and {,u,U,L,u8}R"
      	sequences.
      	* macro.c (stringify_arg): Handle CPP_UTF8STRING.
      
      	* c-common.c (c_parse_error): Handle CPP_UTF8STRING.
      	* c-lex.c (c_lex_with_flags): Likewise.  Test C_LEX_STRING_NO_JOIN
      	instead of C_LEX_RAW_STRINGS.
      	(lex_string): Handle CPP_UTF8STRING.
      	* c-parser.c (c_parser_postfix_expression): Likewise.
      	* c-pragma.h (C_LEX_RAW_STRINGS): Rename to ...
      	(C_LEX_STRING_NO_JOIN): ... this.
      
      	* parser.c (cp_lexer_print_token, cp_parser_is_string_literal,
      	cp_parser_string_literal, cp_parser_primary_expression): Likewise.
      	(cp_lexer_get_preprocessor_token): Use C_LEX_STRING_JOIN instead
      	of C_LEX_RAW_STRINGS.
      
      	* gcc.dg/raw-string-1.c: New test.
      	* gcc.dg/raw-string-2.c: New test.
      	* gcc.dg/raw-string-3.c: New test.
      	* gcc.dg/raw-string-4.c: New test.
      	* gcc.dg/raw-string-5.c: New test.
      	* gcc.dg/raw-string-6.c: New test.
      	* gcc.dg/raw-string-7.c: New test.
      	* gcc.dg/utf8-1.c: New test.
      	* gcc.dg/utf8-2.c: New test.
      	* gcc.dg/utf-badconcat2.c: New test.
      	* gcc.dg/utf-dflt2.c: New test.
      	* gcc.dg/cpp/include6.c: New test.
      	* g++.dg/ext/raw-string-1.C: New test.
      	* g++.dg/ext/raw-string-2.C: New test.
      	* g++.dg/ext/raw-string-3.C: New test.
      	* g++.dg/ext/raw-string-4.C: New test.
      	* g++.dg/ext/raw-string-5.C: New test.
      	* g++.dg/ext/raw-string-6.C: New test.
      	* g++.dg/ext/raw-string-7.C: New test.
      	* g++.dg/ext/utf8-1.C: New test.
      	* g++.dg/ext/utf8-2.C: New test.
      	* g++.dg/ext/utf-badconcat2.C: New test.
      	* g++.dg/ext/utf-dflt2.C: New test.
      
      From-SVN: r152995
      2c6e3f55
  15. Sep 02, 2009
  16. May 10, 2009
    • Joseph Myers's avatar
      c-lex.c (c_lex_with_flags): Expect cpp_hashnode in tok->val.node.node. · 9a0c6187
      Joseph Myers authored
      gcc:
      	* c-lex.c (c_lex_with_flags): Expect cpp_hashnode in
      	tok->val.node.node.
      
      libcpp:
      	* include/cpplib.h (enum cpp_token_fld_kind): Add
      	CPP_TOKEN_FLD_TOKEN_NO.
      	(struct cpp_macro_arg, struct cpp_identifier): Define.
      	(union cpp_token_u): Use struct cpp_identifier for identifiers.
      	Use struct cpp_macro_arg for macro arguments.  Add token_no for
      	CPP_PASTE token numbers.
      	* directives.c (_cpp_handle_directive, lex_macro_node, do_pragma,
      	do_pragma_poison, parse_assertion): Use val.node.node in place of
      	val.node.
      	* expr.c (parse_defined, eval_token): Use val.node.node in place
      	of val.node.
      	* lex.c (cpp_ideq, _cpp_lex_direct, cpp_token_len,
      	cpp_spell_token, cpp_output_token, _cpp_equiv_tokens,
      	cpp_token_val_index): Use val.macro_arg.arg_no or val.token_no in
      	place of val.arg_no.  Use val.node.node in place of val.node.
      	* macro.c (replace_args, cpp_get_token, parse_params,
      	lex_expansion_token, create_iso_definition, cpp_macro_definition):
      	Use val.macro_arg.arg_no or val.token_no in place of val.arg_no.
      	Use val.node.node in place of val.node.
      
      From-SVN: r147341
      9a0c6187
  17. Apr 19, 2009
    • Joseph Myers's avatar
      re PR preprocessor/20078 (Gcc doesn't complain about non-benign macro definitions) · aa508502
      Joseph Myers authored
      libcpp:
      	PR preprocessor/20078
      	* include/cpp-id-data.h (struct cpp_macro): Add extra_tokens
      	field.
      	* include/cpplib.h (SP_DIGRAPH, SP_PREV_WHITE): Define.
      	(struct cpp_token): Change flags to unsigned short.
      	* lex.c (_cpp_lex_direct): Initialize arg_no for CPP_PASTE tokens.
      	(_cpp_equiv_tokens): Check arg_no for CPP_PASTE tokens.
      	(cpp_token_val_index): Return CPP_TOKEN_FLD_ARG_NO for CPP_PASTE
      	tokens.
      	* macro.c (macro_real_token_count): New.
      	(enter_macro_context, replace_args): Use macro_real_token_count.
      	(create_iso_definition): Record whitespace surrounding and digraph
      	spelling of # and ## tokens using SP_PREV_WHITE and SP_DIGRAPH.
      	Set extra_tokens and save CPP_PASTE tokens with arg_no set for
      	multiple consecutive ## tokens.
      	(_cpp_create_definition): Initialize extra_tokens.
      	(cpp_macro_definition): Use macro_real_token_count.
      
      gcc/testsuite:
      	* gcc.dg/cpp/paste16.c, gcc.dg/cpp/redef4.c: New tests.
      
      From-SVN: r146352
      aa508502
  18. Apr 12, 2009
    • Joseph Myers's avatar
      re PR preprocessor/31869 (stringifying empty macros) · 18f41a1b
      Joseph Myers authored
      libcpp:
      	PR preprocessor/31869
      	* macro.c (stringify_arg): Handle NULL source token in padding
      	token where previous padding token did not have source token with
      	preceding whitespace.
      
      gcc/testsuite:
      	* gcc.dg/cpp/strify5.c: New test.
      
      From-SVN: r145989
      18f41a1b
  19. Apr 09, 2009
  20. Mar 30, 2009
  21. Mar 29, 2009
    • Joseph Myers's avatar
      re PR preprocessor/34695 (Preprocessor warning->error conversion from -Werror is silent) · 148e4216
      Joseph Myers authored
      	PR preprocessor/34695
      
      gcc:
      	* Makefile.in (c-opts.o): Depend on c-tree.h.
      	* c-common.c: Move down include of diagnostic.h.
      	(done_lexing, c_cpp_error): New.
      	* c-common.h (done_lexing): Declare.
      	* c-decl.c (c_write_global_declarations): Don't check cpp_errors
      	(parse_in).
      	* c-opts.c: Include c-tree.h.
      	(c_common_init_options): Set preprocessor error callback.
      	(c_common_handle_option): Do not set preprocessor
      	inhibit_warnings, warnings_are_errors, warn_system_headers,
      	pedantic_errors or inhibit_warnings flags.
      	(c_common_post_options): Do not check cpp_errors (parse_in).
      	(c_common_finish): Do not output dependencies if there were
      	errors.  Do not check return value of cpp_finish.
      	* c-ppoutput.c (pp_file_change): Set input_location.
      	* c-tree.h (c_cpp_error): Declare.
      	* diagnostic.c (diagnostic_set_info_translated): Also initialize
      	override_column.
      	(diagnostic_build_prefix): Check override_column.
      	* diagnostic.h (diagnostic_info): Add override_column field.
      	(diagnostic_override_column): Define.
      
      gcc/cp:
      	* cp-tree.h (cp_cpp_error): Remove.
      	* error.c (cp_cpp_error): Remove.
      	* parser.c (cp_lexer_new_main): Set done_lexing instead of
      	client_diagnostic and error callback.
      
      gcc/fortran:
      	* cpp.c (cb_cpp_error): New.
      	(gfc_cpp_post_options): Don't set cpp_option->inhibit_warnings.
      	Don't check cpp_errors (cpp_in).
      	(gfc_cpp_init_0): Set cb->error.
      
      gcc/testsuite:
      	* gcc.dg/builtin-redefine.c, gcc.dg/cpp/redef2.c,
      	gcc.dg/cpp/redef3.c, gcc.dg/cpp/trad/redef2.c: Use dg-message
      	instead of dg-warning for "previous definition" messages.
      	* gcc.dg/cpp/Wvariadic-1.c, gcc.dg/cpp/Wvariadic-3.c: Expect
      	"warnings being treated as errors" message.
      	* gcc.dg/fltconst-1.c: Use -fshow-column.
      
      libcpp:
      	* makedepend.c: Remove.
      	* Makefile.in (makedepend_OBJS, makedepend$(EXEEXT)): Remove.
      	(all, clean, TAGS_SOURCES, include): Remove makedepend handling.
      	* directives.c (cpp_errors): Remove.
      	* errors.c (print_location, _cpp_begin_message, v_message):
      	Remove.
      	(cpp_error, cpp_error_with_line): Always use error callback.
      	(cpp_error, cpp_error_with_line, cpp_errno): Return bool.
      	* include/cpplib.h (cpp_options): Remove pedantic_errors,
      	inhibit_warnings, warn_system_headers, inhibit_errors,
      	warnings_are_errors, client_diagnostic.
      	(cpp_callbacks): Add extra arguments to error callback; make it
      	return bool.
      	(cpp_finish): Return void.
      	(cpp_destroy): Remove inaccurate comment about return value.
      	(cpp_errors, CPP_DL_EXTRACT, CPP_DL_WARNING_P): Remove.
      	(CPP_DL_NOTE): Define.
      	* include/line-map.h (linemap_print_containing_files): Remove.
      	* init.c (cpp_finish): Do not check for or return number of
      	errors.
      	* internal.h (cpp_reader): Remove errors field.
      	* line-map.c (linemap_print_containing_files): Remove.
      	* macro.c (_cpp_create_definition): Use CPP_DL_NOTE for message
      	about previous definition.  Only emit it if previous diagnostic
      	was emitted.
      
      From-SVN: r145263
      148e4216
  22. Sep 18, 2008
    • Simon Baldwin's avatar
      cpplib.h (struct cpp_options): Add new boolean flag warn_builtin_macro_redefined. · c047ce93
      Simon Baldwin authored
      	* include/cpplib.h (struct cpp_options): Add new boolean flag
      	warn_builtin_macro_redefined.
      	* init.c (cpp_create_reader): Initialize warn_builtin_macro_redefined.
      	* (struct builtin_operator): Split out from previous struct builtin,
      	enhance extra const correctness.
      	* (struct builtin_macro): Split out from previous struct builtin, add
      	new always_warn_if_redefined flag, enhance const correctness.
      	* (mark_named_operators): Use struct builtin_operator.
      	* (cpp_init_special_builtins): Use struct builtin_macro, add NODE_WARN
      	to builtins selectively.
      	* macro.c (warn_of_redefinition): Return false if a builtin macro
      	is not flagged with NODE_WARN.
      
      	* c-opts.c (c_common_handle_option): Add handling for
      	-Wbuiltin-macro-redefined command line option.
      	* c.opt: Added builtin-macro-redefined option.
      	* doc/invoke.texi (Warning Options): Add -Wbuiltin-macro-redefined
      	documentation.
      
      	* gcc.dg/builtin-redefine.c: New.
      
      From-SVN: r140461
      c047ce93
  23. Jul 21, 2008
    • Manuel López-Ibáñez's avatar
      line-map.h (linenum_type): New typedef. · 1bb64668
      Manuel López-Ibáñez authored
      2008-07-21  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
      
      	* include/line-map.h (linenum_type): New typedef.
      	(struct line_map): Use it.
      	(SOURCE_LINE): Second arguments is a LOCATION not a LINE.
      	(SOURCE_COLUMN): Likewise.
      	* macro.c (_cpp_builtin_macro_text): Use linenum_type. Don't store
      	source_location values in a variable of type linenum_type.
      	* directives.c (struct if_stack): Use linenum_type.
      	(strtoul_for_line): Rename as strtolinenum.
      	(do_line): Use linenum_type.
      	(do_linemarker): Use linenum_type and strtolinenum.
      	(_cpp_do_file_change): Use linenum_t.
      	* line-map.c (linemap_add): Likewise.
      	(linemap_line_start): Likewise.
      	* traditional.c (struct fun_macro): 'line' is a source_location.
      	* errors.c (print_location): Use linenum_type.
      	* directives-only.c (_cpp_preprocess_dir_only): Likewise.
      	* internal.h (CPP_INCREMENT_LINE): Likewise.
      	* lex.c (_cpp_skip_block_comment): Use source_location.
      
      From-SVN: r138026
      1bb64668
  24. Jul 14, 2008
    • Ben Elliston's avatar
      cpplib.h (NODE_CONDITIONAL): New. · 5950c3c9
      Ben Elliston authored
      libcpp/
      	* include/cpplib.h (NODE_CONDITIONAL): New.
      	(struct cpp_callbacks): New macro_to_expand field.
      	(struct cpp_hashnode): Adjust size of flags and type fields.
      	(cpp_peek_token): Prototype.
      	* lex.c (cpp_peek_token): New function.
      	(_cpp_temp_token): Protect pre-existing lookaheads.
      	* macro.c (cpp_get_token): Expand any conditional macros.
      	(_cpp_backup_tokens_direct): New.
      	(_cpp_backup_tokens): Call _cpp_backup_tokens_direct.
      	(warn_of_redefinition): Silently allow redefined conditional
      	macros.
      	(_cpp_create_definition): Remove the conditional flag when a user
      	defines one of the conditional macros.
      	* internal.h (_cpp_backup_tokens_direct): New prototype.
      
      gcc/
      	* c-common.h (C_CPP_HASHNODE): New macro.
      	* coretypes.h (struct cpp_token): Forward declare.
      	* doc/extend.texi (PowerPC AltiVec Built-in Functions): Document
      	the context-sensitive keyword method.
      	* config/rs6000/rs6000-c.c (__vector_keyword, vector_keyword,
      	__pixel_keyword, pixel_keyword, __bool_keyword, bool_keyword,
      	expand_bool_pixel): New.
      	(altivec_categorize_keyword): New function.
      	(init_vector_keywords): New function.
      	(rs6000_macro_to_expand): Likewise.
      	(rs6000_cpu_cpp_builtins): Enable context-sensitive macros if not
      	compiling an ISO C dialect.
      
      gcc/testsuite/
      	* gcc.target/powerpc/altivec-macros.c: New test.
      	* gcc.target/powerpc/altviec-26.c: Likewise.
      	* gcc.dg/vmx/1b-06.c: Remove bool variable.
      	* gcc.dg/vmx/1b-07.c: Likewise.
      	* gcc.dg/vmx/1b-06-ansi.c: New test for the pre-define method.
      	* gcc.dg/vmx/1b-07-ansi.c: Likewise.
      
      From-SVN: r137775
      5950c3c9
  25. Jul 03, 2008
  26. Apr 18, 2008
    • Kris Van Hees's avatar
      cpp-id-data.h (UC): Was U, conflicts with U... · b6baa67d
      Kris Van Hees authored
      libcpp/ChangeLog:
      2008-04-14  Kris Van Hees <kris.van.hees@oracle.com>
      
      * include/cpp-id-data.h (UC): Was U, conflicts with U... literal.
      * include/cpplib.h (CHAR16, CHAR32, STRING16, STRING32): New tokens.
      (struct cpp_options): Added uliterals.
      (cpp_interpret_string): Update prototype.
      (cpp_interpret_string_notranslate): Idem.
      * charset.c (init_iconv_desc): New width member in cset_converter.
      (cpp_init_iconv): Add support for char{16,32}_cset_desc.
      (convert_ucn): Idem.
      (emit_numeric_escape): Idem.
      (convert_hex): Idem.
      (convert_oct): Idem.
      (convert_escape): Idem.
      (converter_for_type): New function.
      (cpp_interpret_string): Use converter_for_type, support u and U prefix.
      (cpp_interpret_string_notranslate): Match changed prototype.
      (wide_str_to_charconst): Use converter_for_type.
      (cpp_interpret_charconst): Add support for CPP_CHAR{16,32}.
      * directives.c (linemarker_dir): Macro U changed to UC.
      (parse_include): Idem.
      (register_pragma_1): Idem.
      (restore_registered_pragmas): Idem.
      (get__Pragma_string): Support CPP_STRING{16,32}.
      * expr.c (eval_token): Support CPP_CHAR{16,32}.
      * init.c (struct lang_flags): Added uliterals.
      (lang_defaults): Idem.
      * internal.h (struct cset_converter) <width>: New field.
      (struct cpp_reader) <char16_cset_desc>: Idem.
      (struct cpp_reader) <char32_cset_desc>: Idem.
      * lex.c (digraph_spellings): Macro U changed to UC.
      (OP, TK): Idem.
      (lex_string): Add support for u'...', U'...', u... and U....
      (_cpp_lex_direct): Idem.
      * macro.c (_cpp_builtin_macro_text): Macro U changed to UC.
      (stringify_arg): Support CPP_CHAR{16,32} and CPP_STRING{16,32}.
      
      gcc/ChangeLog:
      2008-04-14  Kris Van Hees <kris.van.hees@oracle.com>
        
      * c-common.c (CHAR16_TYPE, CHAR32_TYPE): New macros.
      (fname_as_string): Match updated cpp_interpret_string prototype.
      (fix_string_type): Support char16_t* and char32_t*.
      (c_common_nodes_and_builtins): Add char16_t and char32_t (and
      derivative) nodes.  Register as builtin if C++0x.
      (c_parse_error): Support CPP_CHAR{16,32}.
      * c-common.h (RID_CHAR16, RID_CHAR32): New elements. 
      (enum c_tree_index) <CTI_CHAR16_TYPE, CTI_SIGNED_CHAR16_TYPE,
      CTI_UNSIGNED_CHAR16_TYPE, CTI_CHAR32_TYPE, CTI_SIGNED_CHAR32_TYPE,
      CTI_UNSIGNED_CHAR32_TYPE, CTI_CHAR16_ARRAY_TYPE,
      CTI_CHAR32_ARRAY_TYPE>: New elements.
      (char16_type_node, signed_char16_type_node, unsigned_char16_type_node,
      char32_type_node, signed_char32_type_node, char16_array_type_node,
      char32_array_type_node): New defines.
      * c-lex.c (cb_ident): Match updated cpp_interpret_string prototype.
      (c_lex_with_flags): Support CPP_CHAR{16,32} and CPP_STRING{16,32}.
      (lex_string): Support CPP_STRING{16,32}, match updated
      cpp_interpret_string and cpp_interpret_string_notranslate prototypes.
      (lex_charconst): Support CPP_CHAR{16,32}.
      * c-parser.c (c_parser_postfix_expression): Support CPP_CHAR{16,32}
      and CPP_STRING{16,32}.
      
      gcc/cp/ChangeLog:
      2008-04-14  Kris Van Hees <kris.van.hees@oracle.com>
      
      * cvt.c (type_promotes_to): Support char16_t and char32_t.
      * decl.c (grokdeclarator): Disallow signed/unsigned/short/long on
      char16_t and char32_t.
      * lex.c (reswords): Add char16_t and char32_t (for c++0x).
      * mangle.c (write_builtin_type): Mangle char16_t/char32_t as vendor
      extended builtin type u8char32_t.
      * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Support
      RID_CHAR{16,32}.
      (cp_lexer_print_token): Support CPP_STRING{16,32}.
      (cp_parser_is_string_literal): Idem.
      (cp_parser_string_literal): Idem.
      (cp_parser_primary_expression): Support CPP_CHAR{16,32} and
      CPP_STRING{16,32}.
      (cp_parser_simple_type_specifier): Support RID_CHAR{16,32}. 
      * tree.c (char_type_p): Support char16_t and char32_t as char types.
      * typeck.c (string_conv_p): Support char16_t and char32_t.
      
      gcc/testsuite/ChangeLog:
      2008-04-14  Kris Van Hees <kris.van.hees@oracle.com>
      
      Tests for char16_t and char32_t support.
      * g++.dg/ext/utf-cvt.C: New
      * g++.dg/ext/utf-cxx0x.C: New
      * g++.dg/ext/utf-cxx98.C: New
      * g++.dg/ext/utf-dflt.C: New
      * g++.dg/ext/utf-gnuxx0x.C: New
      * g++.dg/ext/utf-gnuxx98.C: New
      * g++.dg/ext/utf-mangle.C: New
      * g++.dg/ext/utf-typedef-cxx0x.C: New
      * g++.dg/ext/utf-typedef-
      * g++.dg/ext/utf-typespec.C: New
      * g++.dg/ext/utf16-1.C: New
      * g++.dg/ext/utf16-2.C: New
      * g++.dg/ext/utf16-3.C: New
      * g++.dg/ext/utf16-4.C: New
      * g++.dg/ext/utf32-1.C: New
      * g++.dg/ext/utf32-2.C: New
      * g++.dg/ext/utf32-3.C: New
      * g++.dg/ext/utf32-4.C: New
      * gcc.dg/utf-cvt.c: New
      * gcc.dg/utf-dflt.c: New
      * gcc.dg/utf16-1.c: New
      * gcc.dg/utf16-2.c: New
      * gcc.dg/utf16-3.c: New
      * gcc.dg/utf16-4.c: New
      * gcc.dg/utf32-1.c: New
      * gcc.dg/utf32-2.c: New
      * gcc.dg/utf32-3.c: New
      * gcc.dg/utf32-4.c: New
      
      libiberty/ChangeLog:
      2008-04-14  Kris Van Hees <kris.van.hees@oracle.com>
      
      * testsuite/demangle-expected: Added tests for char16_t and char32_t.
      
      From-SVN: r134438
      b6baa67d
  27. Apr 02, 2008
    • Joseph Myers's avatar
      cppopts.texi (-dU): Document. · 93d45d9e
      Joseph Myers authored
      gcc:
      	* doc/cppopts.texi (-dU): Document.
      	* c-common.h (flag_dump_macros): Update comment.
      	* c-opts.c (handle_OPT_d): Handle -dU.
      	* c-ppoutput.c (macro_queue, define_queue, undef_queue,
      	dump_queued_macros, cb_used_define, cb_used_undef): New.
      	(init_pp_output): Handle -dU.
      	(cb_line_change): Call dump_queued_macros.
      	* toplev.c (decode_d_option): Accept -dU as preprocessor option.
      
      gcc/testsuite:
      	* 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: New tests.
      
      libcpp:
      	* include/cpplib.h (struct cpp_callbacks): Add used_define,
      	used_undef and before_define.
      	(NODE_USED): Define.
      	* directives.c (do_define, do_undef, undefine_macros, do_ifdef,
      	do_ifndef, cpp_pop_definition): Handle new flag and use new
      	callbacks.
      	* expr.c (parse_defined): Handle new flag and use new callbacks.
      	* macro.c (enter_macro_context, _cpp_free_definition): Handle new
      	flag and use new callbacks.
      
      From-SVN: r133847
      93d45d9e
  28. Jan 25, 2008
    • Jakub Jelinek's avatar
      re PR preprocessor/34692 (Internal error with pragma in macro) · 765d600a
      Jakub Jelinek authored
      	PR preprocessor/34692
      	* macro.c (collect_args): Add pragma_buff argument.  Push
      	CPP_PRAGMA ... CPP_PRAGMA_EOL tokens to *pragma_buff, rather
      	than into arguments.  Reset prevent_expansion and parsing_args
      	state at CPP_PRAGMA_EOL/CPP_EOF.
      	(funlike_invocation_p): Add pragma_buff argument, pass it through
      	to collect_args.
      	(enter_macro_context): Add result argument.  Adjust
      	funlike_invocation_p caller.  Emit all deferred pragma tokens
      	gathered during collect_args before the expansion, add a padding
      	token.  Return 2 instead of 1 if any pragma tokens were prepended.
      	(cpp_get_token): If enter_macro_context returns 2, don't return
      	a padding token, instead cycle to grab CPP_PRAGMA token.
      	* directives.c (_cpp_handle_directive): If was_parsing_args
      	in deferred pragma, leave parsing_args and prevent_expansion as is.
      
      	* gcc.dg/cpp/pr34692.c: New test.
      	* gcc.dg/gomp/pr34692.c: New test.
      
      From-SVN: r131819
      765d600a
  29. Jan 22, 2008
  30. Nov 30, 2007
  31. Nov 01, 2007
  32. Oct 31, 2007
    • Tom Tromey's avatar
      re PR preprocessor/30786 (ICE on _Pragma at end of file) · 5b9a40df
      Tom Tromey authored
      gcc/testsuite
      	PR preprocessor/30786:
      	* gcc.dg/cpp/pr30786.c: New file.
      libcpp
      	PR preprocessor/30786:
      	* macro.c (builtin_macro): Return result of _cpp_do__Pragma.
      	* directives.c (_cpp_do__Pragma): Return error status.
      	* internal.h (_cpp_do__Pragma): Update.
      	* directives.c (get__Pragma_string): Back up if EOF seen.
      
      From-SVN: r129800
      5b9a40df
  33. Sep 06, 2007
    • Tom Tromey's avatar
      tree-cfg.c (remove_bb): Only warn if line is non-zero. · 5ffeb913
      Tom Tromey authored
      gcc:
      	* tree-cfg.c (remove_bb): Only warn if line is non-zero.
      	* c-pch.c (c_common_read_pch): Restore current location after
      	reading PCH file.
      	* tree.c (expand_location): Update.
      	(expr_filename): Changed return type.  Unified the two cases.
      	(expr_lineno): Likewise.
      	(annotate_with_file_line): Don't use EXPR_LINENO and EXPR_FILENAME
      	as lvalues.
      	* toplev.c (line_table): Changed type.
      	(general_init): Update.
      	(realloc_for_line_map): New function.
      	(general_init): Allocate line_table using GC.
      	* fix-header.c (line_table): Changed type.
      	(read_scan_file): Update.
      	(read_scan_file): Update.
      	* c-ppoutput.c (maybe_print_line): Update.
      	(print_line): Update.
      	(cb_line_change): Update.
      	(cb_define): Update.
      	(pp_file_change): Update.
      	* c-opts.c (c_common_init_options): Update.
      	(finish_options): Update.
      	(push_command_line_include): Update.
      	* c-lex.c (cb_line_change): Update.
      	(cb_def_pragma): Update.
      	(cb_define): Update.
      	(cb_undef): Update.
      	(c_lex_with_flags): Use cpp_get_token_with_location.
      	* input.h (line_table): Changed type.
      	(location_from_locus): New macro.
      	* tree.h (EXPR_FILENAME): No longer an lvalue.
      	(EXPR_LINENO): Likewise.
      	(expr_locus, set_expr_locus): Declare separately for
      	USE_MAPPED_LOCATION.
      	(expr_filename, expr_lineno): Changed return type.
      	* gimplify.c (tree_to_gimple_tuple): Use SET_EXPR_LOCUS.
      	* cfgexpand.c (expand_gimple_cond_expr): Use location_from_locus.
      	(expand_gimple_basic_block): Likewise.
      	* final.c (final_scan_insn): Use expanded_location.
      gcc/cp:
      	* decl.c (finish_function): Put return's location on line zero of
      	file.
      gcc/fortran:
      	* scanner.c (get_file): Update.
      	(load_file): Update.
      	(gfc_next_char_literal): Use gfc_linebuf_linenum.
      	* f95-lang.c (gfc_init): Update.
      	* gfortran.h (gfc_linebuf_linenum): New macro.
      gcc/java:
      	* lang.c (java_post_options): Update.
      	* jcf-parse.c (set_source_filename): Update.
      	(give_name_to_class): Update.
      	(jcf_parse): Update.
      	(duplicate_class_warning): Update.
      	(parse_class_file): Update.
      	(java_parse_file): Update.
      	* expr.c (expand_byte_code): Update.
      gcc/testsuite:
      	* lib/g++.exp (g++_target_compile): Use -fno-show-column.
      gcc/treelang:
      	* tree1.c (treelang_init): Update.
      	(treelang_parse_file): Update.
      	(treelang_parse_file): Update.
      	(treelang_parse_file): Update.
      	* lex.l: Update.
      	(update_lineno_charno): Likewise.
      libcpp:
      	* internal.h (struct cpp_reader) <invocation_location>: New
      	field.
      	(struct cpp_reader) <set_invocation_location>: Likewise.
      	* init.c (cpp_set_line_map): New function.
      	* line-map.c (linemap_add): Use linemap's allocator.
      	* include/line-map.h (GTY): Define.
      	(line_map_realloc): New typedef.
      	(struct line_map): Mark with GTY.
      	(struct line_maps): Likewise.
      	(struct line_maps) <maps>: Likewise.
      	(struct line_maps) <reallocator>: New field.
      	* include/symtab.h (GTY): Conditionally define.
      	* include/cpplib.h (cpp_set_line_map): Declare.
      	(cpp_get_token_with_location): Declare.
      	* macro.c (cpp_get_token): Set invocation_location on the reader.
      	(cpp_get_token_with_location): New function.
      
      From-SVN: r128190
      5ffeb913
  34. Jul 30, 2007
    • Ollie Wild's avatar
      directives-only.c: New file. · ccfc4c91
      Ollie Wild authored
      	libcpp/
      	* directives-only.c: New file.
      	* internal.h (struct _cpp_dir_only_callbacks): New.
      	(_cpp_preprocess_dir_only): New function.
      	* directives.c (_cpp_handle_directive): Check directives_only before
      	disabling execution of indented directives.
      	* files.c (_cpp_stack_file): Add directives_only check.
      	* include/cpplib.h (struct cpp_options): Add directives_only.
      	(cpp_init_special_builtins): New function.
      	* init.c (cpp_init_special_builtins): New function.
      	(cpp_init_builtins): Move builtin_array initialization to
      	cpp_init_special_builtins.
      	(post_options): Check directives_only before setting
      	pfile->state.prevent_expansion = 1.
      	* macro.c (_cpp_builtin_macro_text): Print an error if __COUNTER__
      	is expanded inside a directive while -fdirectives-only is enabled.
      	* Makefile.in (libcpp_a_OBJS): Add directives-only.o.
      	(libcpp_a_SOURCES): Add directives-only.c.
      
      	gcc/
      	* c-ppoutput.c (print_lines_directives_only): New function.
      	(scan_translation_unit_directives_only): New function.
      	(preprocess_file): Add call to scan_translation_unit_directives_only.
      	* c-opts.c (c_common_handle_option): Add OPT_fdirectives_only.
      	(sanitize_cpp_opts): Add default flag_dump_macros setting for
      	-fdirectives-only.  Add errors for -fdirectives-only conflict with
      	-Wunused-macros and -traditional.
      	(finish_options): Add builtin macro initialization for
      	-fdirectives-only + -fpreprocessed.
      	* c.opt (fdirectives-only): New.
      	* doc/cppopts.texi (fdirectives-only): New.
      
      	gcc/testsuite/
      	* gcc.dg/cpp/counter-2.c: New test.
      	* gcc.dg/cpp/counter-3.c: New test.
      	* gcc.dg/cpp/dir-only-1.c: New test.
      	* gcc.dg/cpp/dir-only-1.h: New file.
      	* gcc.dg/cpp/dir-only-2.c: New test.
      	* gcc.dg/cpp/dir-only-3.c: New test.
      	* gcc.dg/cpp/dir-only-3a.h: New file.
      	* gcc.dg/cpp/dir-only-3b.h: New file.
      	* gcc.dg/cpp/dir-only-4.c: New test.
      	* gcc.dg/cpp/dir-only-5.c: New test.
      	* gcc.dg/cpp/dir-only-6.c: New test.
      
      From-SVN: r127066
      ccfc4c91
Loading