Commit Graph

120234 Commits

Author SHA1 Message Date
Dodji Seketeli 25ae50273a Instrument built-in memory access function calls
This patch instruments many memory access patterns through builtins.

Basically, for a call like:

     __builtin_memset (from, 0, n_bytes);

the patch would only instrument the accesses at the beginning and at
the end of the memory region [from, from + n_bytes].  This is the
strategy used by the llvm implementation of asan.

This instrumentation is done for all the memory access builtin
functions that expose a well specified memory region -- one that
explicitly states the number of bytes accessed in the region.

A special treatment is used for __builtin_strlen.  The patch
instruments the access to the first byte of its argument, as well as
the access to the byte (of the argument) at the offset returned by
strlen.

For the __sync_* and __atomic* calls the patch instruments the access
to the bytes pointed to by the argument.

While doing this, I have added a new parameter to build_check_stmt to
decide whether to insert the instrumentation code before or after the
statement iterator.  This allows us to do away with the
gsi_{next,prev} dance we were doing in the callers of this function.

Tested by running cc1 -fasan on variations of simple programs like:

    int
    foo ()
    {
      char foo[10] = {0};

      foo[0] = 't';
      foo[1] = 'e';
      foo[2] = 's';
      foo[3] = 't';
      int l = __builtin_strlen (foo);
      int n = sizeof (foo);
      __builtin_memset (&foo[4], 0, n - 4);
      __sync_fetch_and_add (&foo[11], 1);

      return l;
    }

and by starring at the gimple output which for this function is:

    ;; Function foo (foo, funcdef_no=0, decl_uid=1714, cgraph_uid=0)

    foo ()
    {
      int n;
      int l;
      char foo[10];
      int D.1725;
      char * D.1724;
      int D.1723;
      long unsigned int D.1722;
      int D.1721;
      long unsigned int D.1720;
      long unsigned int _1;
      int _4;
      long unsigned int _5;
      int _6;
      char * _7;
      int _8;
      char * _9;
      unsigned long _10;
      unsigned long _11;
      unsigned long _12;
      signed char * _13;
      signed char _14;
      _Bool _15;
      unsigned long _16;
      signed char _17;
      _Bool _18;
      _Bool _19;
      char * _20;
      unsigned long _21;
      unsigned long _22;
      unsigned long _23;
      signed char * _24;
      signed char _25;
      _Bool _26;
      unsigned long _27;
      signed char _28;
      _Bool _29;
      _Bool _30;
      char * _31;
      unsigned long _32;
      unsigned long _33;
      unsigned long _34;
      signed char * _35;
      signed char _36;
      _Bool _37;
      unsigned long _38;
      signed char _39;
      _Bool _40;
      _Bool _41;
      char * _42;
      unsigned long _43;
      unsigned long _44;
      unsigned long _45;
      signed char * _46;
      signed char _47;
      _Bool _48;
      unsigned long _49;
      signed char _50;
      _Bool _51;
      _Bool _52;
      char * _53;
      unsigned long _54;
      unsigned long _55;
      unsigned long _56;
      signed char * _57;
      signed char _58;
      _Bool _59;
      unsigned long _60;
      signed char _61;
      _Bool _62;
      _Bool _63;
      char[10] * _64;
      unsigned long _65;
      unsigned long _66;
      unsigned long _67;
      signed char * _68;
      signed char _69;
      _Bool _70;
      unsigned long _71;
      signed char _72;
      _Bool _73;
      _Bool _74;
      unsigned long _75;
      unsigned long _76;
      unsigned long _77;
      signed char * _78;
      signed char _79;
      _Bool _80;
      unsigned long _81;
      signed char _82;
      _Bool _83;
      _Bool _84;
      long unsigned int _85;
      long unsigned int _86;
      char * _87;
      char * _88;
      unsigned long _89;
      unsigned long _90;
      unsigned long _91;
      signed char * _92;
      signed char _93;
      _Bool _94;
      unsigned long _95;
      signed char _96;
      _Bool _97;
      _Bool _98;
      char * _99;
      unsigned long _100;
      unsigned long _101;
      unsigned long _102;
      signed char * _103;
      signed char _104;
      _Bool _105;
      unsigned long _106;
      signed char _107;
      _Bool _108;
      _Bool _109;

      <bb 2>:
      foo = {};
      _9 = &foo[0];
      _10 = (unsigned long) _9;
      _11 = _10 >> 3;
      _12 = _11 + 17592186044416;
      _13 = (signed char *) _12;
      _14 = *_13;
      _15 = _14 != 0;
      _16 = _10 & 7;
      _17 = (signed char) _16;
      _18 = _17 >= _14;
      _19 = _15 & _18;
      if (_19 != 0)
	goto <bb 5>;
      else
	goto <bb 4>;

      <bb 5>:
      __asan_report_store1 (_10);

      <bb 4>:
      foo[0] = 116;
      _20 = &foo[1];
      _21 = (unsigned long) _20;
      _22 = _21 >> 3;
      _23 = _22 + 17592186044416;
      _24 = (signed char *) _23;
      _25 = *_24;
      _26 = _25 != 0;
      _27 = _21 & 7;
      _28 = (signed char) _27;
      _29 = _28 >= _25;
      _30 = _26 & _29;
      if (_30 != 0)
	goto <bb 7>;
      else
	goto <bb 6>;

      <bb 7>:
      __asan_report_store1 (_21);

      <bb 6>:
      foo[1] = 101;
      _31 = &foo[2];
      _32 = (unsigned long) _31;
      _33 = _32 >> 3;
      _34 = _33 + 17592186044416;
      _35 = (signed char *) _34;
      _36 = *_35;
      _37 = _36 != 0;
      _38 = _32 & 7;
      _39 = (signed char) _38;
      _40 = _39 >= _36;
      _41 = _37 & _40;
      if (_41 != 0)
	goto <bb 9>;
      else
	goto <bb 8>;

      <bb 9>:
      __asan_report_store1 (_32);

      <bb 8>:
      foo[2] = 115;
      _42 = &foo[3];
      _43 = (unsigned long) _42;
      _44 = _43 >> 3;
      _45 = _44 + 17592186044416;
      _46 = (signed char *) _45;
      _47 = *_46;
      _48 = _47 != 0;
      _49 = _43 & 7;
      _50 = (signed char) _49;
      _51 = _50 >= _47;
      _52 = _48 & _51;
      if (_52 != 0)
	goto <bb 11>;
      else
	goto <bb 10>;

      <bb 11>:
      __asan_report_store1 (_43);

      <bb 10>:
      foo[3] = 116;
      _53 = (char *) &foo;
      _54 = (unsigned long) _53;
      _55 = _54 >> 3;
      _56 = _55 + 17592186044416;
      _57 = (signed char *) _56;
      _58 = *_57;
      _59 = _58 != 0;
      _60 = _54 & 7;
      _61 = (signed char) _60;
      _62 = _61 >= _58;
      _63 = _59 & _62;
      if (_63 != 0)
	goto <bb 13>;
      else
	goto <bb 12>;

      <bb 13>:
      __asan_report_load1 (_54);

      <bb 12>:
      _1 = __builtin_strlen (&foo);
      _64 = _53 + _1;
      _65 = (unsigned long) _64;
      _66 = _65 >> 3;
      _67 = _66 + 17592186044416;
      _68 = (signed char *) _67;
      _69 = *_68;
      _70 = _69 != 0;
      _71 = _65 & 7;
      _72 = (signed char) _71;
      _73 = _72 >= _69;
      _74 = _70 & _73;
      if (_74 != 0)
	goto <bb 15>;
      else
	goto <bb 14>;

      <bb 15>:
      __asan_report_load1 (_65);

      <bb 14>:
      l_2 = (int) _1;
      n_3 = 10;
      _4 = n_3 + -4;
      _5 = (long unsigned int) _4;
      _6 = l_2 + 1;
      _7 = &foo[_6];
      if (_5 != 0)
	goto <bb 17>;
      else
	goto <bb 16>;

      <bb 17>:
      _75 = (unsigned long) _7;
      _76 = _75 >> 3;
      _77 = _76 + 17592186044416;
      _78 = (signed char *) _77;
      _79 = *_78;
      _80 = _79 != 0;
      _81 = _75 & 7;
      _82 = (signed char) _81;
      _83 = _82 >= _79;
      _84 = _80 & _83;
      _85 = _5;
      _86 = _85 - 1;
      _87 = _7;
      _88 = _87 + _86;
      _89 = (unsigned long) _88;
      _90 = _89 >> 3;
      _91 = _90 + 17592186044416;
      _92 = (signed char *) _91;
      _93 = *_92;
      _94 = _93 != 0;
      _95 = _89 & 7;
      _96 = (signed char) _95;
      _97 = _96 >= _93;
      _98 = _94 & _97;
      if (_98 != 0)
	goto <bb 21>;
      else
	goto <bb 20>;

      <bb 21>:
      __asan_report_store1 (_89);

      <bb 20>:
      if (_84 != 0)
	goto <bb 19>;
      else
	goto <bb 18>;

      <bb 19>:
      __asan_report_store1 (_75);

      <bb 18>:

      <bb 16>:
      __builtin_memset (_7, 0, _5);
      _99 = &foo[11];
      _100 = (unsigned long) _99;
      _101 = _100 >> 3;
      _102 = _101 + 17592186044416;
      _103 = (signed char *) _102;
      _104 = *_103;
      _105 = _104 != 0;
      _106 = _100 & 7;
      _107 = (signed char) _106;
      _108 = _107 >= _104;
      _109 = _105 & _108;
      if (_109 != 0)
	goto <bb 23>;
      else
	goto <bb 22>;

      <bb 23>:
      __asan_report_store1 (_100);

      <bb 22>:
      __sync_fetch_and_add_1 (&foo[11], 1);
      _8 = l_2;
      foo ={v} {CLOBBER};

    <L1>:
      return _8;

    }

    ;; Function _GLOBAL__sub_I_00099_0_foo (_GLOBAL__sub_I_00099_0_foo, funcdef_no=1, decl_uid=1752, cgraph_uid=4)

    _GLOBAL__sub_I_00099_0_foo ()
    {
      <bb 2>:
      __asan_init ();
      return;

    }

gcc/
	* gimple.h (is_gimple_builtin_call): Declare ...
	* gimple.c (is_gimple_builtin_call): ... New public function.
	* asan.c (insert_if_then_before_iter, instrument_mem_region_access,
	instrument_strlen_call, maybe_instrument_builtin_call,
	instrument_call): New static functions.
	(create_cond_insert_point): Renamed
	create_cond_insert_point_before_iter into this.  Add a new
	parameter to decide whether to insert the condition before or
	after the statement iterator.
	(build_check_stmt): Adjust for the new create_cond_insert_point.
	Add a new parameter to decide whether to add the instrumentation
	code before or after the statement iterator.
	(instrument_assignment): Factorize from ...
	(transform_statements): ... here.  Use maybe_instrument_call to
	instrument builtin function calls as well.
	(instrument_derefs): Adjust for the new parameter of
	build_check_stmt.  Fix detection of bit-field access.

From-SVN: r193440
2012-11-12 16:53:25 +01:00
Dodji Seketeli 01452015d7 Factorize condition insertion code out of build_check_stmt
This patch splits a new create_cond_insert_point_before_iter function
out of build_check_stmt, to be used by a later patch.

Tested by running cc1 -fasan on the test program below with and
without the patch and by inspecting the gimple output to see that
there is no change.

void
foo ()
{
  char foo[1] = {0};

  foo[0] = 1;
}

gcc/

	* asan.c (create_cond_insert_point_before_iter): Factorize out of ...
	(build_check_stmt): ... here.

From-SVN: r193439
2012-11-12 16:53:12 +01:00
Dodji Seketeli dc29bf1eef Make build_check_stmt accept an SSA_NAME for its base
This patch makes build_check_stmt accept its memory access parameter
to be an SSA name.  This is useful for a subsequent patch that will
re-use.

Tested by running cc1 -fasan on the program below with and without the
patch and inspecting the gimple output to see that there is no change.

void
foo ()
{
  char foo[1] = {0};

  foo[0] = 1;
}

gcc/
	* asan.c (build_check_stmt): Accept the memory access to be
	represented by an SSA_NAME.

From-SVN: r193438
2012-11-12 16:52:56 +01:00
Jakub Jelinek 8240018b0c Implement protection of global variables
This patch implements the protection of global variables.  See the
comments appended to the beginning of the asan.c file.

	* varasm.c: Include asan.h.
	(assemble_noswitch_variable): Grow size by asan_red_zone_size
	if decl is asan protected.
	(place_block_symbol): Likewise.
	(assemble_variable): If decl is asan protected, increase
	DECL_ALIGN if needed, and for decls emitted using
	assemble_variable_contents append padding zeros after it.
	* Makefile.in (varasm.o): Depend on asan.h.
	* asan.c: Include output.h.
	(asan_pp, asan_pp_initialized, asan_ctor_statements): New variables.
	(asan_pp_initialize, asan_pp_string): New functions.
	(asan_emit_stack_protection): Use asan_pp{,_initialized}
	instead of local pp{,_initialized} vars, use asan_pp_initialize
	and asan_pp_string helpers.
	(asan_needs_local_alias, asan_protect_global,
	asan_global_struct, asan_add_global): New functions.
	(asan_finish_file): Protect global vars that can be protected. Use
	asan_ctor_statements instead of ctor_statements
	* asan.h (asan_protect_global): New prototype.
	(asan_red_zone_size): New inline function.

Co-Authored-By: Wei Mi <wmi@google.com>

From-SVN: r193437
2012-11-12 16:52:42 +01:00
Jakub Jelinek f3ddd6929a Implement protection of stack variables
This patch implements the protection of stack variables.

It lays out stack variables as well as the different red zones,
emits some prologue code to populate the shadow memory as to poison
(mark as non-accessible) the regions of the red zones and mark the
regions of stack variables as accessible, and emit some epilogue code
to un-poison (mark as accessible) the regions of red zones right
before the function exits.

	* Makefile.in (asan.o): Depend on $(EXPR_H) $(OPTABS_H).
	(cfgexpand.o): Depend on asan.h.
	* asan.c: Include expr.h and optabs.h.
	(asan_shadow_set): New variable.
	(asan_shadow_cst, asan_emit_stack_protection): New functions.
	(asan_init_shadow_ptr_types): Initialize also asan_shadow_set.
	* cfgexpand.c: Include asan.h.  Define HOST_WIDE_INT heap vector.
	(partition_stack_vars): If i is large alignment and j small
	alignment or vice versa, break out of the loop instead of continue,
	and put the test earlier.  If flag_asan, break out of the loop
	if for small alignment size is different.
	(struct stack_vars_data): New type.
	(expand_stack_vars): Add DATA argument.  Change PRED type to
	function taking size_t argument instead of tree.  Adjust pred
	calls.  Fill DATA in and add needed padding in between variables
	if -faddress-sanitizer.
	(defer_stack_allocation): Defer everything for flag_asan.
	(stack_protect_decl_phase_1, stack_protect_decl_phase_2): Take
	size_t index into stack_vars array instead of the decl directly.
	(asan_decl_phase_3): New function.
	(expand_used_vars): Return var destruction sequence.  Adjust
	expand_stack_vars calls, add another one for flag_asan.  Call
	asan_emit_stack_protection if expand_stack_vars added anything
	to the vectors.
	(expand_gimple_basic_block): Add disable_tail_calls argument.
	(gimple_expand_cfg): Pass true to it if expand_used_vars returned
	non-NULL.  Emit the sequence returned by expand_used_vars after
	return_label.
	* asan.h (asan_emit_stack_protection): New prototype.
	(asan_shadow_set): New decl.
	(ASAN_RED_ZONE_SIZE, ASAN_STACK_MAGIC_LEFT, ASAN_STACK_MAGIC_MIDDLE,
	ASAN_STACK_MAGIC_RIGHT, ASAN_STACK_FRAME_MAGIC): Define.
	(asan_protect_stack_decl): New inline.
	* toplev.c (process_options): Also disable -faddress-sanitizer on
	!FRAME_GROWS_DOWNWARDS targets.

From-SVN: r193436
2012-11-12 16:52:26 +01:00
Jakub Jelinek dfb9e332a5 Allow asan at -O0
This patch defines a new asan pass gate that is activated at -O0, in
addition to the pass that was initially activated at -O3 level The
patch also does some comment cleanups here and there.

	* asan.c (build_check_stmt): Rename join_bb variable to else_bb.
	(gate_asan_O0): New function.
	(pass_asan_O0): New variable.
	* passes.c (init_optimization_passes): Add pass_asan_O0.
	* tree-pass.h (pass_asan_O0): New declaration.

From-SVN: r193435
2012-11-12 16:52:09 +01:00
Jakub Jelinek f6d9848430 Emit GIMPLE directly instead of gimplifying GENERIC.
This patch cleanups the instrumentation code generation by emitting
GIMPLE directly, as opposed to emitting GENERIC tree and then
gimplifying them.  It also does some cleanups here and there

	* Makefile.in (GTFILES): Add $(srcdir)/asan.c.
	(asan.o): Update the dependencies of asan.o.
	* asan.c (tm.h, tree.h, tm_p.h, basic-block.h, flags.h
	function.h, tree-inline.h, tree-dump.h, diagnostic.h, demangle.h,
	langhooks.h, ggc.h, cgraph.h, gimple.h): Remove these unused but
	included headers.
	(shadow_ptr_types): New variable.
	(report_error_func): Change is_store argument to bool, don't append
	newline to function name.
	(PROB_VERY_UNLIKELY, PROB_ALWAYS): Define.
	(build_check_stmt): Change is_store argument to bool.  Emit GIMPLE
	directly instead of creating trees and gimplifying them.  Mark
	the error reporting function as very unlikely.
	(instrument_derefs): Change is_store argument to bool.  Use
	int_size_in_bytes to compute size_in_bytes, simplify size check.
	Use build_fold_addr_expr instead of build_addr.
	(transform_statements): Adjust instrument_derefs caller.
	Use gimple_assign_single_p as stmt test.  Don't look at MEM refs
	in rhs2.
	(asan_init_shadow_ptr_types): New function.
	(asan_instrument): Don't push/pop gimplify context.
	Call asan_init_shadow_ptr_types if not yet initialized.
	* asan.h (ASAN_SHADOW_SHIFT): Adjust comment.

Co-Authored-By: Dodji Seketeli <dodji@redhat.com>
Co-Authored-By: Xinliang David Li <davidxl@google.com>

From-SVN: r193434
2012-11-12 16:51:53 +01:00
Jakub Jelinek dfe06d3e7f Initial asan cleanups
This patch defines a new asan_shadow_offset target macro, instead of
having a mere macro in the asan.c file.  It becomes thus cleaner to
define the target macro for targets that supports asan, namely x86 for
now.  The ASAN_SHADOW_SHIFT (which, along with the asan_shadow_offset
constant, is used to compute the address of the shadow memory byte for
a given memory address) is defined in asan.h.

gcc/ChangeLog

	* toplev.c (process_options): Warn and turn off
	-faddress-sanitizer if not supported by target.
	* asan.c: Include target.h.
	(asan_scale, asan_offset_log_32, asan_offset_log_64,
	asan_offset_log): Removed.
	(build_check_stmt): Use ASAN_SHADOW_SHIFT and
	targetm.asan_shadow_offset ().
	(asan_instrument): Don't initialize asan_offset_log.
	* asan.h (ASAN_SHADOW_SHIFT): Define.
	* target.def (TARGET_ASAN_SHADOW_OFFSET): New hook.
	* doc/tm.texi.in (TARGET_ASAN_SHADOW_OFFSET): Add it.
	* doc/tm.texi: Regenerated.
	* Makefile.in (asan.o): Depend on $(TARGET_H).
	* config/i386/i386.c (ix86_asan_shadow_offset): New function.
	(TARGET_ASAN_SHADOW_OFFSET): Define.

From-SVN: r193433
2012-11-12 16:51:34 +01:00
Wei Mi 37d6f666ca Initial import of asan from the Google branch
This patch imports the initial state of asan as it was in the
Google branch.

It provides basic infrastructure for asan to instrument memory
accesses on the heap, at -O3.  Note that it supports neither stack nor
global variable protection.

The rest of the patches of the set is intended to further improve this
base.

gcc/ChangeLog

	* Makefile.in: Add asan.c and its dependencies.
	* common.opt: Add -faddress-sanitizer option.
	* invoke.texi: Document the new flag.
	* passes.c: Add the asan pass.
	* toplev.c (compile_file): Call asan_finish_file.
	* asan.c: New file.
	* asan.h: New file.
	* tree-pass.h: Declare pass_asan.

Co-Authored-By: Diego Novillo <dnovillo@google.com>
Co-Authored-By: Dodji Seketeli <dodji@redhat.com>

From-SVN: r193432
2012-11-12 16:51:13 +01:00
Tobias Burnus abfc73778e re PR fortran/55272 (ICE on passing coarray argument between files)
2012-11-12  Tobias Burnus  <burnus@net-b.de>

        PR fortran/55272
        * module.c (mio_array_spec): Correctly handle coarray
        scalars.

2012-11-12  Tobias Burnus  <burnus@net-b.de>

        PR fortran/55272
        * gfortran.dg/coarray_29_1.f90: New.
        * gfortran.dg/coarray_29_2.f90: New.

From-SVN: r193429
2012-11-12 12:03:42 +01:00
Tobias Burnus 3b4adfb357 diagnostic.c (diagnostic_append_note): Also call va_end when inhibit_notes_p is true.
2012-11-12  Tobias Burnus  <burnus@net-b.de>

        * diagnostic.c (diagnostic_append_note): Also call va_end when
        inhibit_notes_p is true.

From-SVN: r193428
2012-11-12 12:00:58 +01:00
Ed Smith-Rowland f27f1e9895 Index declspecs.locations by ds_typedef rather than ds_thread.
From-SVN: r193426
2012-11-12 05:35:05 +00:00
Bin Cheng 4b8181c587 gcse.c (struct bb_data): Add new fields, old_pressure, live_in and backup.
* gcse.c (struct bb_data): Add new fields, old_pressure, live_in
	and backup.
	(get_regno_pressure_class): Add prototype.
	(update_bb_reg_pressure): New.
	(should_hoist_expr_to_dom): Add new parameter from.
	Monitor the change of reg pressure and use it to drive hoisting.
	(hoist_code): Update LIVE and reg pressure information.
	(calculate_bb_reg_pressure): Initialize live_in and backup.

	* gcc.dg/hoist-register-pressure-3.c: New test.

From-SVN: r193425
2012-11-12 02:17:38 +00:00
Oleg Endo 6ba9e40135 md.texi (Standard Pattern Names For Generation): Fix swapped sine and cosine operands in the sincos description.
* doc/md.texi (Standard Pattern Names For Generation): Fix swapped
	sine and cosine operands in the sincos description.

From-SVN: r193424
2012-11-12 00:50:11 +00:00
Oleg Endo dfa228f028 re PR target/53512 (SH Target: Allow fsca and fsrra for non-SH4A)
PR target/53512
	* config/sh/sh.md (sincossf3): Fix swapped sin and cos operands.

From-SVN: r193423
2012-11-12 00:27:56 +00:00
GCC Administrator 578a9947ad Daily bump.
From-SVN: r193422
2012-11-12 00:17:22 +00:00
Oleg Endo 358ac8ff1c sh4a-fprun.c: Add test_sinf and test_cosf noinline wrappers around sinf and cosf.
* gcc.target/sh/sh4a-fprun.c: Add test_sinf and test_cosf noinline
	wrappers around sinf and cosf.

From-SVN: r193419
2012-11-11 23:58:06 +00:00
H.J. Lu ed15a7eeaa Remove "!" from riF->o alternative
* config/i386/i386.md (*movti_internal_rex64): Remove "!" from
	riF->o alternative.

From-SVN: r193418
2012-11-11 15:50:45 -08:00
Eric Botcazou 5b1efcb719 sparc.h (AS_NIAGARA3_FLAG): Tweak.
* config/sparc/sparc.h (AS_NIAGARA3_FLAG): Tweak.
	* config/sparc/sol2.h (TARGET_CPU_niagara4 support): Fix pasto.

From-SVN: r193416
2012-11-11 21:56:27 +00:00
Eric Botcazou 0207fa9006 re PR rtl-optimization/55247 (internal compiler error: Max. number of generated reload insns per insn is achieved (90))
PR rtl-optimization/55247
	PR middle-end/55259
	* emit-rtl.c (adjust_address_1): If POINTERS_EXTEND_UNSIGNED > 0,
	handle ZERO_EXTEND.
	* recog.c (offsettable_address_addr_space_p): Likewise.

From-SVN: r193415
2012-11-11 21:52:49 +00:00
Andreas Schwab 92eba4000d chapter.txml: Remove whitespace inside <keyword>.
* doc/xml/chapter.txml: Remove whitespace inside <keyword>.
* doc/xml/class.txml: Likewise.
* doc/xml/manual/abi.xml: Likewise.
* doc/xml/manual/algorithms.xml: Likewise.
* doc/xml/manual/allocator.xml: Likewise.
* doc/xml/manual/appendix_contributing.xml: Likewise.
* doc/xml/manual/appendix_free.xml: Likewise.
* doc/xml/manual/appendix_porting.xml: Likewise.
* doc/xml/manual/atomics.xml: Likewise.
* doc/xml/manual/auto_ptr.xml: Likewise.
* doc/xml/manual/backwards_compatibility.xml: Likewise.
* doc/xml/manual/bitmap_allocator.xml: Likewise.
* doc/xml/manual/build_hacking.xml: Likewise.
* doc/xml/manual/codecvt.xml: Likewise.
* doc/xml/manual/concurrency.xml: Likewise.
* doc/xml/manual/concurrency_extensions.xml: Likewise.
* doc/xml/manual/configure.xml: Likewise.
* doc/xml/manual/containers.xml: Likewise.
* doc/xml/manual/ctype.xml: Likewise.
* doc/xml/manual/debug.xml: Likewise.
* doc/xml/manual/debug_mode.xml: Likewise.
* doc/xml/manual/diagnostics.xml: Likewise.
* doc/xml/manual/extensions.xml: Likewise.
* doc/xml/manual/internals.xml: Likewise.
* doc/xml/manual/intro.xml: Likewise.
* doc/xml/manual/io.xml: Likewise.
* doc/xml/manual/iterators.xml: Likewise.
* doc/xml/manual/locale.xml: Likewise.
* doc/xml/manual/localization.xml: Likewise.
* doc/xml/manual/messages.xml: Likewise.
* doc/xml/manual/mt_allocator.xml: Likewise.
* doc/xml/manual/numerics.xml: Likewise.
* doc/xml/manual/parallel_mode.xml: Likewise.
* doc/xml/manual/policy_data_structures.xml: Likewise.
* doc/xml/manual/prerequisites.xml: Likewise.
* doc/xml/manual/profile_mode.xml: Likewise.
* doc/xml/manual/shared_ptr.xml: Likewise.
* doc/xml/manual/status_cxx1998.xml: Likewise.
* doc/xml/manual/status_cxx2011.xml: Likewise.
* doc/xml/manual/status_cxxtr1.xml: Likewise.
* doc/xml/manual/status_cxxtr24733.xml: Likewise.
* doc/xml/manual/strings.xml: Likewise.
* doc/xml/manual/support.xml: Likewise.
* doc/xml/manual/test.xml: Likewise.
* doc/xml/manual/using_exceptions.xml: Likewise.
* doc/xml/manual/utilities.xml: Likewise.
* doc/xml/spine.xml: Likewise.

From-SVN: r193414
2012-11-11 21:17:43 +00:00
Andreas Schwab 919bbe6e1e acinclude.m4 (GLIBCXX_CONFIGURE_DOCBOOK): Also check for /usr/share/xml/docbook/stylesheet/nwalsh5/current.
* acinclude.m4 (GLIBCXX_CONFIGURE_DOCBOOK): Also check for
/usr/share/xml/docbook/stylesheet/nwalsh5/current.
* configure: Regenerate.

From-SVN: r193413
2012-11-11 21:01:01 +00:00
Steven Bosscher 159520acf7 re PR middle-end/55263 (ICE: pre_and_rev_post_order_compute, at cfganal.c:875 with -O -fgcse-after-reload -fnon-call-exceptions)
gcc/
	PR middle-end/55263
	* postreload.c (rest_of_handle_postreload): With non-call exceptions,
	if edges are purged call cleanup_cfg to remove unreachable blocks.

testsuite/
	PR middle-end/55263
	* g++.dg/pr55263.C: New test.

From-SVN: r193412
2012-11-11 20:29:11 +00:00
Sandra Loosemore 18abab9fee extend.texi: Copy-edit to use "built-in function" instead of "builtin", per GCC coding standards.
2012-11-11  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* doc/extend.texi: Copy-edit to use "built-in function" instead
	of "builtin", per GCC coding standards.  Also use consistent
	capitalization in titles of sections describing built-in functions.

From-SVN: r193411
2012-11-11 14:47:00 -05:00
Martin Jambor 324e93f12e re PR tree-optimization/55238 (ICE in find_aggregate_values_for_callers_subset, at ipa-cp.c:2908 building zlib)
PR tree-optimization/55238
	* ipa-cp.c (agg_pass_through_permissible_p): New function.
	(propagate_aggs_accross_jump_function): Use it.
	(find_aggregate_values_for_callers_subset): Likewise and relax an
	assert.

	* testsuite/gcc.dg/torture/pr55238.c: New test.

From-SVN: r193410
2012-11-11 19:35:27 +00:00
Uros Bizjak ebbcbc2ed3 re PR target/47440 (Use LCM for vzeroupper insertion)
PR target/47440
	* config/i386/i386.c (check_avx256_stores): Remove.
	(ix86_check_avx256_register): New.
	(ix86_avx_u128_mode_needed): Use ix86_check_avx256_register.
	Check the whole RTX for 256bit registers using for_each_rtx.
	(ix86_check_avx_stores): New.
	(ix86_avx_u128_mode_after): Change mode of CALL RTX to AVX_U128_CLEAN
	if there are no 256bit registers used in the function return register.
	(ix86_avx_u128_mode_entry): Use ix86_check_avx256_register.
	(ix86_avx_u128_mode_exit): Ditto.

From-SVN: r193409
2012-11-11 20:17:17 +01:00
John David Anglin 2059f70d74 pr54920.c: Add "-fno-common" option on hppa*-*-hpux*.
* gcc.dg/torture/pr54920.c: Add "-fno-common" option on hppa*-*-hpux*.
	* c-c++-common/torture/vector-subscript-1.c: Likewise.
	* c-c++-common/torture/vector-subscript-2.c: Likewise.

From-SVN: r193408
2012-11-11 19:16:00 +00:00
Jan Hubicka 82bacf11f9 * gcc.dg/tree-ssa/cunroll-1.c: Fix bogus testcase.
From-SVN: r193407
2012-11-11 18:16:01 +00:00
Jan Hubicka 52843a4726 re PR fortran/48636 (Enable more inlining with -O2 and higher)
PR middle-end/48636
	* ipa-inline.c (want_inline_small_function_p): Take aray index hint.
	(edge_badness): Likewise.
	* ipa-inline.h (inline_hints_vals): Add array_index and comments.
	(inline_summary_: Add ARRAY_INDEX.
	* ipa-inline-analysis.c (dump_inline_hints): Dump array_index hint.
	(reset_inline_summary): Handle array_index hint.
	(inline_node_duplication_hook): Likewise.
	(dump_inline_summary): Likewise.
	(array_index_predicate): New function.
	(estimate_function_body_sizes): Use it.
	(estimate_node_size_and_time): Use array_index hint.
	(inline_merge_summary, inline_read_section): Likewise.

From-SVN: r193406
2012-11-11 18:14:35 +00:00
Gerald Pfeifer 6e7e4ca2e8 policy_data_structures.xml: Update reference for select.
* doc/xml/manual/policy_data_structures.xml: Update reference
	for select.

From-SVN: r193405
2012-11-11 09:57:14 +00:00
Sandra Loosemore 40cbe8d223 extend.texi: Copy-edit to use "bit-field" consistently instead of "bitfield" or "bit field".
2012-11-10  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* doc/extend.texi: Copy-edit to use "bit-field" consistently
	instead of "bitfield" or "bit field".

From-SVN: r193403
2012-11-10 21:51:47 -05:00
Sandra Loosemore 6f46cb6350 extend.texi: Copy-edit to fix incorrect hyphenation phrases involving "bit"...
2012-11-10  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* doc/extend.texi: Copy-edit to fix incorrect hyphenation phrases
	involving "bit", "byte", "word", "precision", and "floating"
	modifiers.

From-SVN: r193402
2012-11-10 21:27:05 -05:00
Jason Merrill c61e8502c1 cp-demangle.c (d_unqualified_name): Handle abi tags here.
* cp-demangle.c (d_unqualified_name): Handle abi tags here.
	(d_name): Not here.

From-SVN: r193401
2012-11-10 21:11:15 -05:00
Sandra Loosemore c417597c1f extend.texi: Copy-edit to fix incorrect uses of "which" and "that" throughout the file.
2012-11-10  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* doc/extend.texi: Copy-edit to fix incorrect uses of "which" 
	and "that" throughout the file.

From-SVN: r193400
2012-11-10 20:45:25 -05:00
GCC Administrator f47cf0ba24 Daily bump.
From-SVN: r193399
2012-11-11 00:17:48 +00:00
Ian Lance Taylor 7e03f00470 reflect: Fix bug comparing struct field types.
From-SVN: r193395
2012-11-10 20:24:04 +00:00
H.J. Lu c76b1db623 Compile pr55247.c with -mno-sse -mno-mmx
* gcc.target/i386/pr55247.c: Require maybe_x32 target.  Add
	-mno-sse -mno-mmx to dg-options.  Reformat.

From-SVN: r193394
2012-11-10 10:54:58 -08:00
Andrew Pinski 01a88d3557 re PR driver/55202 (Building a combined tree is broken for LTO)
2012-11-10  Andrew Pinski  <apinski@cavium.com>

        PR bootstrap/55202
        * configure.ac: Set PLUGIN_LD_SUFFIX to just "ld" if it was "ld-new"
        or "collect-ld".
        * configure: Regenerate.

From-SVN: r193393
2012-11-10 10:32:23 -08:00
Jason Merrill 734f50238f * many: Replace uses of __GXX_EXPERIMENTAL_CXX0X__ with __cplusplus.
From-SVN: r193392
2012-11-10 12:27:22 -05:00
Eric Botcazou 3467ad5ce6 expr.c (store_field): Remove TYPE parameter.
* expr.c (store_field): Remove TYPE parameter.  Remove block of code
	dealing with BLKmode in registers.  Reimplement this support using
	pseudo-registers and bit-field techniques.
	(store_constructor_field): Remove TYPE parameter and adjust calls to
	store_field.
	(expand_assignment): Adjust calls to store_field.  Add comment.
	(store_expr): Add comment.
	(store_constructor): Adjust calls to store_constructor_field.
	(expand_expr_real_2): Adjust call to store_field.

From-SVN: r193391
2012-11-10 15:32:32 +00:00
David Edelsohn 35b07bb39e unused1.C: Skip on AIX.
* g++.dg/other/unused1.C: Skip on AIX.
        * g++.dg/other/anon5.C: Allow Undefined to be capitalized. Ignore
        extra message on AIX.

From-SVN: r193390
2012-11-10 09:34:42 -05:00
David Edelsohn 65a08b07f2 scal-to-vec2.c: Ignore non-standard ABI message.
* c-c++-common/scal-to-vec2.c: Ignore non-standard ABI message.
        * c-c++-common/vector-compare-1.c: Same.
        * c-c++-common/vector-compare-2.c: Same.

From-SVN: r193389
2012-11-10 09:26:54 -05:00
Uros Bizjak d1bc38e623 re PR rtl-optimization/55247 (internal compiler error: Max. number of generated reload insns per insn is achieved (90))
PR target/55247
	* config/i386/i386.md (*movti_internal_rex64): Add "!" to riF->o
	alternative.

testsuite/ChangeLog:

	PR target/55247
	* gcc.target/i386/pr55247.c: New test.

From-SVN: r193388
2012-11-10 12:28:12 +01:00
Andrew Pinski a22e573980 20121108-1.c: New test.
2012-11-09  Andrew Pinski  <apinski@cavium.com>

	* gcc.c-torture/execute/20121108-1.c: New test.

From-SVN: r193386
2012-11-09 19:23:22 -08:00
GCC Administrator 6b5540a5d5 Daily bump.
From-SVN: r193385
2012-11-10 00:18:05 +00:00
Ed Smith-Rowland a4a0016d60 Implement a flag -fext-numeric-literals that allows control of whether GNU...
Implement a flag -fext-numeric-literals that allows control of whether GNU
numeric suffix extensions are parsed or passed to C++ as user-defined literals.

From-SVN: r193382
2012-11-10 00:08:49 +00:00
Eric Botcazou 97996ede57 * doc/install.texi (sparc64-x-solaris2): Mention MPC as well.
From-SVN: r193377
2012-11-09 21:52:29 +00:00
Eric Botcazou f7f78ad80a re PR other/52438 (Some files still GPLv2)
PR other/52438
	* s-taspri-lynxos.ads: Delete.
	* s-osinte-kfreebsd-gnu.ads: Change license to GPL V3+.
	* s-tpopsp-rtems.adb: Likewise.
	* s-osinte-rtems.adb: Likewise.

From-SVN: r193375
2012-11-09 21:42:02 +00:00
Siddhesh Poyarekar 52d1392f8d Warray-bounds-3.c (bar): Keep array access within bounds for ABDAY, DAY, ABMON, MON, AM_PM.
* gcc.dg/Warray-bounds-3.c (bar): Keep array access within
        bounds for ABDAY, DAY, ABMON, MON, AM_PM.
        * gcc.dg/vect/pr22506.c (foo): Reduce loop iterations to within
        array bounds.
        * gcc.dg/vect/pr34005.c (XdmcpUnwrap): Likewise.

From-SVN: r193373
2012-11-09 12:55:53 -07:00
Aldy Hernandez 96dd21067c + * g++.dg/tm/pr47530-2.C: Adjust for uninstrumented code path.
+       * g++.dg/tm/pr47530-2.C: Adjust for uninstrumented code path.
+       * g++.dg/tm/pr47530.C: Same.

From-SVN: r193372
2012-11-09 18:52:36 +00:00