[Bug bootstrap/53468] debian/ubuntu changed the location of libraries on the disk which broke bootstrap

2012-08-07 Thread doko at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53468

--- Comment #3 from Matthias Klose  2012-08-07 
10:29:45 UTC ---
Comment on attachment 27825
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27825
multiarch-2012-07-08

>2012-06-25  Matthias Klose  
>
>   * doc/invoke.texi: Document -print-multiarch.
>   * doc/install.texi: Document --enable-multiarch.
>   * doc/fragments.texi: Document MULTILIB_OSDIRNAMES, MULTIARCH_DIRNAME.
>   * configure.ac: Add --enable-multiarch option.
>   * configure.in: Regenerate.
>   * Makefile.in (s-mlib): Pass MULTIARCH_DIRNAME to genmultilib.
>   enable_multiarch, with_float: New macros.
>   if_multiarch: New macro, define in terms of enable_multiarch.
>   * genmultilib: Add new argument for the multiarch name.
>   * gcc.c (multiarch_dir): Define.
>   (for_each_path): Search for multiarch suffixes.
>   (driver_handle_option): Handle multiarch option.
>   (do_spec_1): Pass -imultiarch if defined.
>   (main): Print multiarch.
>   (set_multilib_dir): Separate multilib and multiarch names
>   from multilib_select.
>   (print_multilib_info): Ignore multiarch names in multilib_select.
>   * incpath.c (add_standard_paths): Search the multiarch include dirs.
>   * cppdeault.h (default_include): Document multiarch in multilib
>   member.
>   * cppdefault.c: [LOCAL_INCLUDE_DIR, STANDARD_INCLUDE_DIR] Add an
>include directory for multiarch directories.
>   * common.opt: New options --print-multiarch and -imultilib.
>   * config.gcc  (tmake_file):
>   Include i386/t-linux.
>(tmake_file):
>   Include i386/t-kfreebsd.
>(tmake_file): Include i386/t-gnu.
>   * config/i386/t-linux64: Add multiarch names in
>   MULTILIB_OSDIRNAMES, define MULTIARCH_DIRNAME.
>   * config/i386/t-gnu: New file.
>   * config/i386/t-kfreebsd: Likewise.
>   * config/i386/t-linux: Likewise.
>
>
>Index: configure.ac
>===
>--- configure.ac   (revision 188931)
>+++ configure.ac   (working copy)
>@@ -623,6 +623,21 @@
> [], [enable_multilib=yes])
> AC_SUBST(enable_multilib)
> 
>+# Determine whether or not multiarch is enabled.
>+AC_ARG_ENABLE(multiarch,
>+[AS_HELP_STRING([--enable-multiarch],
>+  [enable support for multiarch paths])],
>+[case "${withval}" in
>+yes|no|auto-detect) enable_multiarch=$withval;;
>+*) AC_MSG_ERROR(bad value ${withval} given for --enable-multiarch option) ;;
>+esac], [enable_multiarch=auto-detect])
>+AC_MSG_CHECKING(for multiarch configuration)
>+AC_SUBST(enable_multiarch)
>+AC_MSG_RESULT($enable_multiarch)
>+
>+# needed for setting the multiarch name on ARM
>+AC_SUBST(with_float)
>+
> # Enable __cxa_atexit for C++.
> AC_ARG_ENABLE(__cxa_atexit,
> [AS_HELP_STRING([--enable-__cxa_atexit], [enable __cxa_atexit for C++])],
>Index: cppdefault.c
>===
>--- cppdefault.c   (revision 188931)
>+++ cppdefault.c   (working copy)
>@@ -63,6 +63,7 @@
> #endif
> #ifdef LOCAL_INCLUDE_DIR
> /* /usr/local/include comes before the fixincluded header files.  */
>+{ LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
> { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
> #endif
> #ifdef PREFIX_INCLUDE_DIR
>@@ -90,6 +91,7 @@
> #endif
> #ifdef NATIVE_SYSTEM_HEADER_DIR
> /* /usr/include comes dead last.  */
>+{ NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 2 },
> { NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 0 },
> #endif
> { 0, 0, 0, 0, 0, 0 }
>Index: cppdefault.h
>===
>--- cppdefault.h   (revision 188931)
>+++ cppdefault.h   (working copy)
>@@ -43,9 +43,11 @@
>  C++.  */
>   const char add_sysroot; /* FNAME should be prefixed by
>  cpp_SYSROOT.  */
>-  const char multilib;/* FNAME should have the multilib path
>- specified with -imultilib
>- appended.  */
>+  const char multilib;/* FNAME should have appended
>+ - the multilib path specified with -imultilib
>+   when 1 is passed,
>+ - the multiarch path specified with
>+   -imultiarch, when 2 is passed.  */
> };
> 
> extern const struct default_include cpp_include_defaults[];
>Index: Makefile.in
>===
>--- Makefile.in(revision 188931)
>+++ Makefile.in(working copy)
>@@ -350,6 +350,17 @@
> 
> enable_plugin = @enable_plugin@
> 
>+# Multiarch support
>+enable_multiarch = @enable_multiarch@
>+with_float = @with_float@
>+ifeq ($(enable_multiarch),yes)
>+  if_multiarch = $(1)
>+else ifeq ($(enable_m

[Bug c++/54191] New: [C++11] SFINAE does not handle conversion to inaccessible base

2012-08-07 Thread ai.azuma at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54191

 Bug #: 54191
   Summary: [C++11] SFINAE does not handle conversion to
inaccessible base
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: minor
  Priority: P3
 Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: ai.az...@gmail.com


The attached code includes some test cases for SFINAE on expressions
necessitating conversion from (a pointer to) an object of a derived class to (a
pointer to) an object of an inaccessible base class, or inverse of such
conversion. All the static_asserts in the attached code should be well-formed
according to the specification, but fail with GCC 4.8.0 20120805.

I think this PR is closely related to PR51213.


[Bug c++/54191] [C++11] SFINAE does not handle conversion to inaccessible base

2012-08-07 Thread ai.azuma at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54191

--- Comment #1 from Ai Azuma  2012-08-07 11:19:03 
UTC ---
Created attachment 27955
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27955
Some test cases for SFINAE on conversion to inaccessible base


[Bug c++/54191] [C++11] SFINAE does not handle conversion to inaccessible base

2012-08-07 Thread ai.azuma at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54191

--- Comment #2 from Ai Azuma  2012-08-07 11:21:36 
UTC ---
Created attachment 27956
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27956
Output of -v option


[Bug tree-optimization/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

Richard Guenther  changed:

   What|Removed |Added

 CC||jamborm at gcc dot gnu.org

--- Comment #27 from Richard Guenther  2012-08-07 
11:59:07 UTC ---
Martin, can you look at comment #14 and the patch?  I think what we want to
do in flatten_function is before

  inline_call (e, true, NULL, NULL);

reset the edge predicates so that inline_merge_summary becomes very cheap.
Unfortunately that beast seems to have no early out (but instead uses
true_predicate () ...).  Can we speed it up for the case where we just
want "fast" operation rather than precise accounting of sizes/time in the
inlined-to caller?


[Bug c++/54191] [C++11] SFINAE does not handle conversion to inaccessible base

2012-08-07 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54191

Paolo Carlini  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-08-07
 CC||jason at gcc dot gnu.org
 Ever Confirmed|0   |1

--- Comment #3 from Paolo Carlini  2012-08-07 
12:22:58 UTC ---
Ok, thanks. Interestingly, 4.7 (which doesn't have the 51213 changes) behaves
exactly in the same way.

Some of the tests actually produces access control diagnostics, some just fail
the assertion, thus looks like simply we haven't been doing access control at
all (-> I'm afraid fully implementing the correct behavior for access control
under SFINAE may also require fixing long standing cases where we aren't doing
access control with templates, issues beyond access control under SFINAE
proper. But at least the cases where we actually produce the diagnostics now,
should be easy to fix. I'm adding Jason in CC, I'd like to hear him about my
more general considerations)


[Bug c++/54191] [C++11] SFINAE does not handle conversion to inaccessible base

2012-08-07 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54191

Paolo Carlini  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 AssignedTo|unassigned at gcc dot   |paolo.carlini at oracle dot
   |gnu.org |com
   Target Milestone|--- |4.8.0
   Severity|minor   |normal

--- Comment #4 from Paolo Carlini  2012-08-07 
12:27:31 UTC ---
Looking into this.


[Bug other/54182] -fPIE -pie shouldn't disable -fvisibility=hidden

2012-08-07 Thread wbrana at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54182

wbrana  changed:

   What|Removed |Added

   Keywords|build   |
Summary|enable -fvisibility=hidden  |-fPIE -pie shouldn't
   |with -fPIE -pie |disable -fvisibility=hidden

--- Comment #5 from wbrana  2012-08-07 12:34:36 UTC ---
updated


[Bug c/54192] New: -fno-trapping-math by default?

2012-08-07 Thread glisse at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54192

 Bug #: 54192
   Summary: -fno-trapping-math by default?
Classification: Unclassified
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: gli...@gcc.gnu.org


Hello,

I am not sure about the "component" (I am actually more interested in the C++
behavior, but I assume C and C++ will remain the same), or about posting this
to bugzilla instead of the mailing-list.

I would like to know people's opinion about making -fno-trapping-math the
default. One strong argument in favor is that -fno-rounding-math is the
default. The 2 options are quite similar. They both affect "special" use of
maths, they both inhibit a number of optimizations, and they both have bugs
(not trying to offend anyone here, it is already great that the options are as
far as they are).

As someone who needs -frounding-math and for whom -fno-trapping-math is safe
and helps performance, you can see why I'd like to change it ;-)


[Bug c/54192] -fno-trapping-math by default?

2012-08-07 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54192

--- Comment #1 from Richard Guenther  2012-08-07 
12:50:16 UTC ---
The current reasoning is that the C standard allows the implementation to
say that only round-to-nearest is supported but not that the trapping parts
of IEEE are not honored.  The default should always be standard conformant
behavior.


[Bug c/54192] -fno-trapping-math by default?

2012-08-07 Thread glisse at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54192

--- Comment #2 from Marc Glisse  2012-08-07 13:13:46 
UTC ---
Don't you need to tell the compiler (with the FENV_ACCESS pragma) that you are
going to look at flags, just like you tell it that you are going to use
non-default rounding modes?

"In general, if the state of FENV_ACCESS is ‘‘off’’, the translator can assume
that default modes are in effect and the flags are not tested."

The compiler would also need to #undef FE_DOWNWARD in fenv.h if it wants to
pretend that it only supports round-to-nearest (there is an "if and only if" in
the standard).

I think I see what you mean: if there is only one rounding-mode, then the
pragma has no effect on rounding so you can pretend that it is on. But then the
same applies to trapping, since the standard explicitly allows for
FE_ALL_EXCEPT==0.


[Bug middle-end/54193] New: dump_gimple_assign raw can't handle 4 operands

2012-08-07 Thread glisse at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54193

 Bug #: 54193
   Summary: dump_gimple_assign raw can't handle 4 operands
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: minor
  Priority: P3
 Component: middle-end
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: gli...@gcc.gnu.org


#include 

__m128d
f (__m128d x)
{
  __m128i m = {0, 1};
  return __builtin_shuffle (x, m);
}

$ gcc sh.c -c -fdump-tree-optimized-raw
sh.c: In function 'f':
sh.c:4:1: internal compiler error: in dump_gimple_assign, at
gimple-pretty-print.c:485
 f (__m128d x)
 ^
Please submit a full bug report,

which is fairly natural with code like:

  if (gimple_num_ops (gs) == 2)
last = NULL_TREE;
  else if (gimple_num_ops (gs) == 3)
last = gimple_assign_rhs2 (gs);
  else
gcc_unreachable ();

(the non-raw version below goes up to 4)

I guess the -raw option doesn't see much use these days. I was trying it
because sometimes it isn't obvious what tree code is meant by the C-like
representation.


[Bug c++/54191] [C++11] SFINAE does not handle conversion to inaccessible base

2012-08-07 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54191

--- Comment #5 from Paolo Carlini  2012-08-07 
14:36:19 UTC ---
For the cases where we are producing inaccessible base diagnostics in SFINAE
context, the issue is that lookup_base is called by functions getting a
complain argument always in the same way irrespective of complain.

Not sure at the moment if simply changing the callers to pass what they are
currently passing | ba_quiet whenever !(complain & tf_error) is enough or there
are subtleties.


[Bug middle-end/54193] dump_gimple_assign raw can't handle 4 operands

2012-08-07 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54193

Richard Guenther  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-08-07
 Ever Confirmed|0   |1

--- Comment #1 from Richard Guenther  2012-08-07 
15:12:54 UTC ---
Confirmed (patches welcome ;))


[Bug c++/54194] New: GCC 4.8 gives misleading suggestion about arithmetic in operand of '|'

2012-08-07 Thread csaba_22 at yahoo dot co.uk
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54194

 Bug #: 54194
   Summary: GCC 4.8 gives misleading suggestion about arithmetic
in operand of '|'
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: minor
  Priority: P3
 Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: csaba...@yahoo.co.uk


Using gcc version 4.8.0 20120806 (experimental) (GCC),
Target: x86_64-unknown-linux-gnu

to compile the following code:

int main()
{
char in[4]={0}, out[6];
out[1] = in[1] & 0x0F | ((in[3] & 0x3C) << 2);
}

results in a misleading warning (misplaced caret):

$ g++-48 -c -Wall -Werror w.cc
w.cc: In function 'int main()':
w.cc:4:45: error: suggest parentheses around arithmetic in operand of '|'
[-Werror=parentheses]
 out[1] = in[1] & 0x0F | ((in[3] & 0x3C) << 2);
 ^

The problematic operand is the left operand of '|', but the caret appears to be
pointing at the right operand.

For example, clang version 3.2 (trunk 161319) gives
$ clang++ -c -Wall -Werror w.cc
w.cc:4:16: error: '&' within '|' [-Werror,-Wbitwise-op-parentheses]
out[1] = in[1] & 0x0F | ((in[3] & 0x3C) << 2);
 ~~^~ ~
w.cc:4:16: note: place parentheses around the '&' expression to silence this
warning
out[1] = in[1] & 0x0F | ((in[3] & 0x3C) << 2);
   ^
 (   )


[Bug c++/54194] GCC 4.8 gives misleading suggestion about arithmetic in operand of '|'

2012-08-07 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54194

Jonathan Wakely  changed:

   What|Removed |Added

   Keywords||diagnostic
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-08-07
 CC||manu at gcc dot gnu.org
 Ever Confirmed|0   |1

--- Comment #1 from Jonathan Wakely  2012-08-07 
15:34:53 UTC ---
Confirmed.

Manu, is there anything that can be done without huge changes?


[Bug fortran/54195] New: [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

 Bug #: 54195
   Summary: [4.8 Regression][OOP] IMPORT fails with GENERIC TBP:
"is already present in the interface"
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Keywords: rejects-valid
  Severity: normal
  Priority: P3
 Component: fortran
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: bur...@gcc.gnu.org
CC: dam...@rouson.net, ja...@gcc.gnu.org


Reported by Damian at http://gcc.gnu.org/ml/fortran/2012-08/msg00041.html

The following program fails with:
generic :: operator(-) => unary
 1
Error: Entity 'unary' at (1) is already present in the interface

It works if one replaces "IMPORT :: foo" by "IMPORT".


module import_clashes_with_generic
  type ,abstract :: foo
  contains
procedure :: unary
generic :: operator(-) => unary
  end type

  abstract interface
integer function bar()
  import :: foo
end function
  end interface
contains
  integer function unary(rhs)
class(foo) ,intent(in) :: rhs
  end function
end module


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

Tobias Burnus  changed:

   What|Removed |Added

 CC||burnus at gcc dot gnu.org
   Target Milestone|--- |4.8.0


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

janus at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-08-07
 Ever Confirmed|0   |1

--- Comment #1 from janus at gcc dot gnu.org 2012-08-07 16:44:48 UTC ---
First guess:

http://gcc.gnu.org/viewcvs?view=revision&revision=189022


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

--- Comment #2 from Tobias Burnus  2012-08-07 
16:47:10 UTC ---
It works with the snapshot GCC 4.8.0 20120624 and fails with the one from
20120701.

The changelog lists only one entry in that period, namely:

Author: janus
Date: Wed Jun 27 17:38:00 2012
New Revision: 189022

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=189022
Log:
2012-06-27  Janus Weil  

PR fortran/41951
PR fortran/49591
* interface.c (check_new_interface): Rename, add 'loc' argument,
make non-static.
(gfc_add_interface): Rename 'check_new_interface'
* gfortran.h (gfc_check_new_interface): Add prototype.
* resolve.c (resolve_typebound_intrinsic_op): Add typebound operator
targets to non-typebound operator list.


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

--- Comment #3 from janus at gcc dot gnu.org 2012-08-07 18:12:07 UTC ---
(In reply to comment #2)
> The changelog lists only one entry in that period, namely:
> 
> Author: janus
> Date: Wed Jun 27 17:38:00 2012
> New Revision: 189022

Yeah, I knew it ;)

I just verified that reverting the resolve.c part of this commit makes the
error go away.


[Bug debug/53135] [4.7/4.8 Regression] internal compiler error: in value_format, at dwarf2out.c:8010

2012-08-07 Thread aoliva at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53135

--- Comment #8 from Alexandre Oliva  2012-08-07 
18:47:16 UTC ---
For those running into the problem, analternative to patching GCC isto reduce
the maximum expression depth for var-traking with --param
max-vartrack-expr-depth=11


[Bug c++/54196] New: gcc doesn't find incompatible exception specification for operator

2012-08-07 Thread mib.bugzilla at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54196

 Bug #: 54196
   Summary: gcc doesn't find incompatible exception specification
for operator
Classification: Unclassified
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: mib.bugzi...@gmail.com


It look like g++ emit error for regular functions but not for new.  Here is the
example: 
For following test case g++ emit error for foo but not for operator new. 


class bad_alloc 
{ 
  public: 
bad_alloc() throw() { } 
}; 
struct nothrow_t { }; 
extern const nothrow_t nothrow; 
typedef unsigned long size_t; 
//void* operator new(size_t) noexcept; 
void* operator new(size_t, const nothrow_t&); 

void foo(); 
int main(int argc, char *argv[]) 
{ 
  void* (*pf)(size_t) throw (bad_alloc) = operator new; 
  void* (*pf1)() throw (bad_alloc) = foo; 
}


[Bug c++/54197] New: [4.7/4.8 regression] Lifetime of reference not properly extended

2012-08-07 Thread ppluzhnikov at google dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54197

 Bug #: 54197
   Summary: [4.7/4.8 regression] Lifetime of reference not
properly extended
Classification: Unclassified
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: ppluzhni...@google.com


We've noticed this with 4.7 branch, confirmed present in current trunk (rev.
190209).

When calling a static member function returning an object (string below)
through an unnamed function pointer, and binding the result to a reference, the
lifetime of the returned temporary is not properly extended.

--- cut ---
#include 
#include 
#include 

struct string {
  string(const char *s) {
s_ = strdup(s);
  }
  ~string() {
memset((void*)s_, 'a', strlen(s_));
  }
  string(const string& rhs) {
s_ = strdup(rhs.s_);
  }
  string& operator=(const string& rhs) {
if (&rhs != this) {
  free((void*)s_);
  s_ = strdup(rhs.s_);
}
return *this;
  }
  const char *c_str() const { return s_; }

  const char *s_;
};

struct Foo {
  static string foo() { return "abcd"; }
};

Foo foo_g;

struct scoped_ptr {
  Foo* operator->() const { return &foo_g; }
  Foo* get() const { return &foo_g; }
};

Foo *get() { return &foo_g; }

int main()
{
  scoped_ptr f;
  const string& ref1 = f->foo();   // BAD
  const string& ref2 = f.get()->foo(); // BAD
  const string& ref3 = get()->foo();   // BAD
  const string& ref4 = Foo::foo(); // OK
  Foo *pf = f.get();
  const string& ref5 = pf->foo();  // OK


  printf("ref1: %p (%s)\n", ref1.c_str(), ref1.c_str());
  printf("ref2: %p (%s)\n", ref2.c_str(), ref2.c_str());
  printf("ref3: %p (%s)\n", ref3.c_str(), ref3.c_str());
  printf("ref4: %p (%s)\n", ref4.c_str(), ref4.c_str());
  printf("ref5: %p (%s)\n", ref5.c_str(), ref5.c_str());
}
--- cut ---

Result from gcc-4.6:

ref1: 0x5a8030 (abcd)
ref2: 0x5a8070 (abcd)
ref3: 0x5a80b0 (abcd)
ref4: 0x5a80d0 (abcd)
ref5: 0x5a80f0 (abcd)


Result from gcc-4.7 / 4.8

ref1: 0xe18010 ()  << BUG
ref2: 0xe18030 ()  << BUG
ref3: 0xe18050 ()  << BUG
ref4: 0xe18070 (abcd)
ref5: 0xe18090 (abcd)

Changing Foo::foo to be non-static (and commenting out ref4), the bug
disappears:

ref1: 0x1eb3010 (abcd)
ref2: 0x1eb3030 (abcd)
ref3: 0x1eb3050 (abcd)
ref5: 0x1eb3070 (abcd)


Google ref: b/6946758


[Bug c++/54196] gcc doesn't find incompatible exception specification for operator

2012-08-07 Thread mib.bugzilla at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54196

--- Comment #1 from mib.bugzilla at gmail dot com 2012-08-07 18:57:28 UTC ---
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/site/spt/rdrive/ref/gcc/4.7.0/efi2/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.7.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /home/myuser/d/gcc_src/gcc-4.7.0/configure
--prefix=/rdrive/ref/gcc/4.7.0/efi2 --enable-languages=c,c++,objc,fortran
--disable-multilib --enable-bootstrap --target=x86_64-unknown-linux-gnu
--disable-bootstrap --enable-decimal-float
--with-gmp=/home/myuser/d/gcc_src/lib/efi2
--with-mpfr=/home/myuser/d/gcc_src/lib/efi2
--with-mpc=/home/myuser/d/gcc_src/lib/efi2
Thread model: posix
gcc version 4.7.0 (GCC)


g++ -c fubar.cpp
fubar.cpp: In function âint main(int, char**)â:
fubar.cpp:16:40: error: invalid conversion from âvoid (*)()â to âvoid* (*)()â
[-fpermissive]


[Bug c++/54194] GCC 4.8 gives misleading suggestion about arithmetic in operand of '|'

2012-08-07 Thread manu at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54194

--- Comment #2 from Manuel López-Ibáñez  2012-08-07 
19:35:45 UTC ---
Use warning_at and pass down the correct location of the operator if possible,
otherwise input_location?

Of course, it would be nice to have ranges but I have given up on that.


[Bug c++/54197] [4.7/4.8 regression] Lifetime of reference not properly extended

2012-08-07 Thread hjl.tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54197

H.J. Lu  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-08-07
 CC||jason at redhat dot com
 Ever Confirmed|0   |1

--- Comment #1 from H.J. Lu  2012-08-07 19:55:37 
UTC ---
It is caused by revision 180944:

http://gcc.gnu.org/ml/gcc-cvs/2011-11/msg00230.html


[Bug tree-optimization/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

--- Comment #28 from Steven Bosscher  2012-08-07 
19:58:00 UTC ---
To illustrate the rewrite_into_closed_loop_ssa problem, consider this test
case:

extern void use1 (int);
extern void use2 (int);
extern int confuse_loop (void);

void
foo (void)
{
  int i, j, k;

  for (i = 0; i < 100; i++)
{
  for (j = 0; j < 100; j++)
{
  k = i + j;
  if (j > 2)
use1 (k);
  if (confuse_loop ())
break;
}
  use2 (k);
}
}

The only PHI needed for loop-closed SSA is one for k before "use2(k)". 

One problem is that GCC ends up inserting two PHI nodes (one on the exit after
confuse_loop(), which is wasteful if the exit block is empty. So problem 1 is
that too many PHIs are inserted.

The second problem is that with multiple loop exits, a large part of the CFG is
walked in compute_global_livein. The CFG for the test case (compiled with
-fno-tree-ch) looks like this:

 +---< 14 --<-+
E   /  \  E
N  /\ X
T -> 2 -  9 --> 3 --> 4 --> 5 -> 11 --> 7 -> 8 -> I
R  / \ / \ /  T
Y /   +-> 10 -+   +-> 6 -> 13 ->--+
  \   /
   +<-- 12 --<---+

And the following blocks are visited (with a patch I will attach in a minute --
without the patch even more blocks are visited). Block 3 is the block
containing the def, so the CFG walk ends there.

XXX visiting block 7
XXX visiting block 13
XXX visiting block 6
XXX visiting block 5
XXX visiting block 4
XXX visiting block 10
XXX visiting block 11
;; Created LCSSA PHI: k_4 = PHI 
;; Created LCSSA PHI: k_8 = PHI 

;; Resulting GIMPLE function IR:

foo ()
{
  int k;
  int j;
  int i;
  int D.1727;

  :
  goto ;

  :

  :
  # j_29 = PHI 
  k_14 = i_28 + j_29;
  if (j_29 > 2)
goto ;
  else
goto ;

  :
  goto ;

  :
  use1 (k_14);

  :
  D.1727_17 = confuse_loop ();
  if (D.1727_17 != 0)
goto ;
  else
goto ;

  :
  # k_4 = PHI 
  goto ;

  :
  j_18 = j_29 + 1;
  if (j_18 <= 99)
goto ;
  else
goto ;

  :
  # k_8 = PHI 

  :
  # k_21 = PHI 
  use2 (k_21);
  i_20 = i_28 + 1;
  if (i_20 <= 99)
goto ;
  else
goto ;

  :
  return;

  :

  :
  # i_28 = PHI 
  goto ;

}


[Bug debug/54177] [4.8 Regression]: Segfault in cselib_lookup due to NULL_RTX passed from vt_add_function_parameter

2012-08-07 Thread aoliva at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54177

--- Comment #3 from Alexandre Oliva  2012-08-07 
20:08:27 UTC ---
Having reviewed teh other uses of var_lowpart, I hereby approve the patch if it
passes regstrap.  Thanks!


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

--- Comment #4 from janus at gcc dot gnu.org 2012-08-07 20:23:26 UTC ---
My first attempt to fix it would be something like this:

Index: gcc/fortran/resolve.c
===
--- gcc/fortran/resolve.c   (revision 190186)
+++ gcc/fortran/resolve.c   (working copy)
@@ -11448,7 +11448,7 @@

   /* Add target to non-typebound operator list.  */
   if (!target->specific->deferred && !derived->attr.use_assoc
- && p->access != ACCESS_PRIVATE)
+ && !derived->attr.imported && p->access != ACCESS_PRIVATE)
{
  gfc_interface *head, *intr;
  if (gfc_check_new_interface (derived->ns->op[op], target_proc,

This indeed makes the error in comment #0 go away, and does not seem to
introduce any regressions in the typebound_* test cases.

However: Witout the patch, the code guarded by the IF statement above is called
twice (which leads to the error). But with the patch, it is not called at all
any more (while it should be called once!). So the patch can not be fully
correct.

What I do not understand is: The symbol 'foo' exists in the module namespace,
as well as in the namespace of 'bar'. But in both it has the 'imported'
attribute, which sounds wrong to me (or at least contra-intuitive).


[Bug middle-end/54114] [4.8 Regression] variable-tracking performance regression from 4.8-20120610 to 4.8-20120701

2012-08-07 Thread aoliva at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54114

--- Comment #4 from Alexandre Oliva  2012-08-07 
20:28:05 UTC ---
It seems quite clear to me that the new cost arises due to
clobber_overlapping_mems, a relatively expensive operation that fixes a debug
info correctness bug and that we just didn't do before.  I'm afraid I can't
think of a way to do it in a way that is significantly more efficient, so we'll
have to choose between this additional cost, or living with debug locations
that are no longer valid due to overlapping stores :-(

I'm tempted to mark this as WONTFIX, but I thought I'd leave this open for a
bit in case anyone else wants to give it a try.


[Bug libstdc++/53579] libstdc++ configure atomicity tests use CXXFLAGS instead of CXXFLAGS_FOR_TARGET

2012-08-07 Thread bkoz at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53579

Benjamin Kosnik  changed:

   What|Removed |Added

 CC||bkoz at gcc dot gnu.org

--- Comment #1 from Benjamin Kosnik  2012-08-07 
20:53:26 UTC ---

Some notes.

src/Makefile.am does not export CXXFLAGS_FOR_TARGET, only CFLAGS_FOR_TARGET. 

The problem is that configure CXXFLAGS ends up being different than build
CXXFLAGS. And configure flags don't play with CXXFLAGS_FOR_TARGET (but build
flags do.)

gcc/Makefile.in has the pass down for target libs:
EXTRA_TARGET_FLAGS = \
'AR=$$(AR_FOR_TARGET)' \
'AS=$(COMPILER_AS_FOR_TARGET)' \
'CC=$$(CC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
'CFLAGS=$$(CFLAGS_FOR_TARGET)' \
'CXX=$$(CXX_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \

This is what is expected and needed for build, but for configure the situation
is not working in an equivalent manner.

config/mt-gnu:
CXXFLAGS_FOR_TARGET = $(CXXFLAGS) -D_GNU_SOURCE

configure.ac:
if test "x$CXXFLAGS_FOR_TARGET" = x; then
  CXXFLAGS_FOR_TARGET=$CXXFLAGS
  case " $CXXFLAGS " in
*" -O2 "*) ;;
*) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS_FOR_TARGET" ;;
  esac
  case " $CXXFLAGS " in
*" -g "* | *" -g3 "*) ;;
*) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS_FOR_TARGET" ;;
  esac
fi
AC_SUBST(CXXFLAGS_FOR_TARGET)

ie, CXXFLAGS_FOR_TARGET is what should be used, not CXXFLAGS

There are a lot of C++ configure tests in libstdc++ (and other target libs!)
that use CXXFLAGS assuming it's the real thing used to build the library. Not
just atomicity. A consistent solution would be nice here. 

Possible solutions:

1) Setup GLIBCXX_CONFIGURE to export GLIBCXX_CXXFLAGS, which is then used
consistently during configure only, and incorporates CXXFLAGS_FOR_TARGET.
(Makefiles still use CXXFLAGS).

2) use CFLAGS_FOR_TARGET in libstdc++ config

3) like one, but have something like CXXFLAGS_EXTRA_FOR_TARGET which (unlike
CXXFLAGS_FOR_TARGET) is not supposed to replace CXXFLAGS, but instead is always
added to CXXFLAGS, not substituted for it.


[Bug c++/54196] gcc doesn't find incompatible exception specification for operator

2012-08-07 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54196

--- Comment #2 from Jonathan Wakely  2012-08-07 
20:55:36 UTC ---
N.B. there are various overloads of operator new that are implicitly declared
in every translation unit, including (in C++03)

void* operator new(std::size_t) throw(std::bad_alloc)

which would be ok except for the std:: qualification


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

janus at gcc dot gnu.org changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 AssignedTo|unassigned at gcc dot   |janus at gcc dot gnu.org
   |gnu.org |

--- Comment #5 from janus at gcc dot gnu.org 2012-08-07 20:57:47 UTC ---
Second attempt:

Index: gcc/fortran/resolve.c
===
--- gcc/fortran/resolve.c(revision 190186)
+++ gcc/fortran/resolve.c(working copy)
@@ -11448,7 +11448,7 @@ resolve_typebound_intrinsic_op (gfc_symbol* derive

   /* Add target to non-typebound operator list.  */
   if (!target->specific->deferred && !derived->attr.use_assoc
-  && p->access != ACCESS_PRIVATE)
+  && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
 {
   gfc_interface *head, *intr;
   if (gfc_check_new_interface (derived->ns->op[op], target_proc,


As the first attempt, it fixes the error in comment 0 and survives the
typebound_* test cases, but it also results in the code in question being
called exactly once for the test case in comment 0.

Will start a full regtest now ...


[Bug debug/54177] [4.8 Regression]: Segfault in cselib_lookup due to NULL_RTX passed from vt_add_function_parameter

2012-08-07 Thread ubizjak at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54177

--- Comment #4 from Uros Bizjak  2012-08-07 21:07:53 
UTC ---
Author: uros
Date: Tue Aug  7 20:57:56 2012
New Revision: 190212

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190212
Log:
* var-tracking.c (var_lowpart): Exit early for matched modes.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/var-tracking.c


[Bug debug/54177] [4.8 Regression]: Segfault in cselib_lookup due to NULL_RTX passed from vt_add_function_parameter

2012-08-07 Thread ubizjak at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54177

Uros Bizjak  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
URL||http://gcc.gnu.org/ml/gcc-p
   ||atches/2012-08/msg00387.htm
   ||l
 Resolution||FIXED

--- Comment #5 from Uros Bizjak  2012-08-07 21:09:07 
UTC ---
Fixed.


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

--- Comment #6 from janus at gcc dot gnu.org 2012-08-07 21:21:23 UTC ---
(In reply to comment #4)
> However: Witout the patch, the code guarded by the IF statement above is 
> called
> twice (which leads to the error). But with the patch, it is not called at all
> any more (while it should be called once!). So the patch can not be fully
> correct.
> 
> What I do not understand is: The symbol 'foo' exists in the module namespace,
> as well as in the namespace of 'bar'. But in both it has the 'imported'
> attribute, which sounds wrong to me (or at least contra-intuitive).

As I just learned from Tobias, this problem is probably related to PR53537.


[Bug fortran/54195] [4.8 Regression][OOP] IMPORT fails with GENERIC TBP: "is already present in the interface"

2012-08-07 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54195

--- Comment #7 from janus at gcc dot gnu.org 2012-08-07 22:05:49 UTC ---
(In reply to comment #5)
> Will start a full regtest now ...

Completed successfully.


[Bug tree-optimization/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

--- Comment #29 from Steven Bosscher  2012-08-07 
22:28:11 UTC ---
Created attachment 27957
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27957
Do not traverse sibling loops

The idea here is to note that for a nested loop we know for sure that the loop
exits into a common loop father must all need PHI nodes, because we have have
loop pre-headers. I'm not sure what the effect of this is on irreducible loops,
and I haven't tested this much yet. Comments sought...


[Bug c++/53661] [gcc-4.7/4.8 regression] Wrong narrowing conversion warning with -std=c++11

2012-08-07 Thread tmsriram at google dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53661

Sriraman Tallam  changed:

   What|Removed |Added

  Component|c   |c++
Summary|Wrong narrowing conversion  |[gcc-4.7/4.8 regression]
   |warning with -std=c++11 |Wrong narrowing conversion
   ||warning with -std=c++11

--- Comment #1 from Sriraman Tallam  2012-08-07 
22:33:58 UTC ---
Tip of trunk still fails.


[Bug tree-optimization/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

--- Comment #30 from Steven Bosscher  2012-08-07 
22:36:30 UTC ---
> Created attachment 27957 [details]

With the attachment, time spent in rewrite_into_loop_closed_ssa is almost 0
(and that includes the time in the verifier). Compile time for the test case
(still with only "check();") is now 924s wall time. Top spenders:

integrated RA   : 224.26 (24%)
tree SSA incremental:  75.07 ( 8%)
df live&initialized regs:  69.58 ( 8%)
df live regs:  66.19 ( 7%)
remove unused locals:  53.43 ( 6%)
out of ssa  :  51.93 ( 6%)


[Bug libstdc++/54005] Use __atomic_always_lock_free in libstdc++ is_lock_free instead of __atomic_is_lock_free

2012-08-07 Thread bkoz at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54005

--- Comment #1 from Benjamin Kosnik  2012-08-07 
23:04:05 UTC ---
Author: bkoz
Date: Tue Aug  7 23:03:55 2012
New Revision: 190216

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190216
Log:
2012-08-07  Benjamin Kosnik  

PR libstdc++/54005
* include/std/atomic: Use __atomic_always_lock_free.
* include/bits/atomic_base.h: Same.

Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/include/bits/atomic_base.h
trunk/libstdc++-v3/include/std/atomic


[Bug tree-optimization/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

--- Comment #31 from Steven Bosscher  2012-08-08 
06:28:16 UTC ---
Author: steven
Date: Wed Aug  8 06:28:10 2012
New Revision: 190222

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190222
Log:
PR middle-end/54146
* ifcvt.c: Include pointer-set.h.
(cond_move_process_if_block): Change type of then_regs and
else_regs from alloca'd array to pointer_sets.
(check_cond_move_block): Update for this change.
(cond_move_convert_if_block): Likewise.
* Makefile.in: Fix dependencies for ifcvt.o.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/Makefile.in
trunk/gcc/ifcvt.c


[Bug tree-optimization/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

--- Comment #31 from Steven Bosscher  2012-08-08 
06:28:16 UTC ---
Author: steven
Date: Wed Aug  8 06:28:10 2012
New Revision: 190222

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190222
Log:
PR middle-end/54146
* ifcvt.c: Include pointer-set.h.
(cond_move_process_if_block): Change type of then_regs and
else_regs from alloca'd array to pointer_sets.
(check_cond_move_block): Update for this change.
(cond_move_convert_if_block): Likewise.
* Makefile.in: Fix dependencies for ifcvt.o.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/Makefile.in
trunk/gcc/ifcvt.c

--- Comment #32 from Steven Bosscher  2012-08-08 
06:29:16 UTC ---
Author: steven
Date: Wed Aug  8 06:29:12 2012
New Revision: 190223

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190223
Log:
PR middle-end/54146
* ira.c (init_live_subregs): Take live_subregs_used as a bitmap.
(build_insn_chain): Make live_subregs_used a bitmap.
Use SBITMAP_SIZE to ignore the paradoxical bytes of subregs.
Use sbitmap_free to free the live_subreg sbitmaps.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/ira.c


[Bug middle-end/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

Steven Bosscher  changed:

   What|Removed |Added

  Component|tree-optimization   |middle-end

--- Comment #31 from Steven Bosscher  2012-08-08 
06:28:16 UTC ---
Author: steven
Date: Wed Aug  8 06:28:10 2012
New Revision: 190222

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190222
Log:
PR middle-end/54146
* ifcvt.c: Include pointer-set.h.
(cond_move_process_if_block): Change type of then_regs and
else_regs from alloca'd array to pointer_sets.
(check_cond_move_block): Update for this change.
(cond_move_convert_if_block): Likewise.
* Makefile.in: Fix dependencies for ifcvt.o.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/Makefile.in
trunk/gcc/ifcvt.c

--- Comment #32 from Steven Bosscher  2012-08-08 
06:29:16 UTC ---
Author: steven
Date: Wed Aug  8 06:29:12 2012
New Revision: 190223

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190223
Log:
PR middle-end/54146
* ira.c (init_live_subregs): Take live_subregs_used as a bitmap.
(build_insn_chain): Make live_subregs_used a bitmap.
Use SBITMAP_SIZE to ignore the paradoxical bytes of subregs.
Use sbitmap_free to free the live_subreg sbitmaps.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/ira.c


[Bug middle-end/54146] Very slow compile with attribute((flatten))

2012-08-07 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146

Steven Bosscher  changed:

   What|Removed |Added

  Component|tree-optimization   |middle-end

--- Comment #32 from Steven Bosscher  2012-08-08 
06:29:16 UTC ---
Author: steven
Date: Wed Aug  8 06:29:12 2012
New Revision: 190223

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190223
Log:
PR middle-end/54146
* ira.c (init_live_subregs): Take live_subregs_used as a bitmap.
(build_insn_chain): Make live_subregs_used a bitmap.
Use SBITMAP_SIZE to ignore the paradoxical bytes of subregs.
Use sbitmap_free to free the live_subreg sbitmaps.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/ira.c