[Bug c++/54348] confusing error reported for type mismatch in conditional expression : "error: no match for ternary 'operator?:' in 'false ?"

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

--- Comment #9 from Jonathan Wakely  2012-08-22 
07:37:18 UTC ---
(In reply to comment #5)
>   strct s  struct_strct( items, myItems, name, myName ) ;
> }
> 
> 
> This works!

Only because NULL can be converted to std::string - but it would crash at
runtime if that branch was taken.


(In reply to comment #7)
> > void f()
> > {
> > false ? a : b;
> > }
> 
> but this is not the same. surely ? the above is not a valid statement -

It's exactly the same. It's not valid because the types are incompatible, just
like your example. e.g. this is fine:

  false ? a : a;

> I was saying:
> 
>   some_type some_object = false ? a : b;

As I said previously, the fact the conditional expression is used as an
initializer is irrelevant to the error.


(In reply to comment #8)
> All I'm suggesting is that g++ should try to find the most basic error, 

Exactly. And the error is in the conditional expression, it has nothing to do
with the object being initialized.


> which is that different type objects are returned as the result of a
> conditional expression, and not  "no match for ternary 'operator?:'" -
> what does this mean, it was searching namespace std:: for string::operator::?:
> ?
> then this succeeded, and it found it could not apply it because the types
> were different - shouldn't it complain about the root cause, that the types
> were different, rather than the symptom of not being able to satisfy
> operator std::string::?:() ?

It *is* complaining that the types are different (just not very clearly.)
The error has nothing to do with the type being initialized.

Here's a simpler form of your original which might convince you of that:

#include 
#include 
using namespace std;
void f()
{
  list  myItems;
  string myName;
  false ? myItems : myName;
}

This still gives the same error. Understand now?


[Bug rtl-optimization/54269] [4.8 Regression] memory usage too large when optimizing

2012-08-22 Thread Joost.VandeVondele at mat dot ethz.ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54269

Joost VandeVondele  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||FIXED

--- Comment #6 from Joost VandeVondele  
2012-08-22 07:40:26 UTC ---
Fixed for current trunk, maybe a dup of PR54332


[Bug rtl-optimization/54269] [4.8 Regression] memory usage too large when optimizing

2012-08-22 Thread Joost.VandeVondele at mat dot ethz.ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54269

--- Comment #7 from Joost VandeVondele  
2012-08-22 07:43:30 UTC ---
Fixed for current trunk, maybe a dup of PR54332


[Bug c/52991] attribute packed broken on mingw32?

2012-08-22 Thread mikpe at it dot uu.se
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991

--- Comment #5 from Mikael Pettersson  2012-08-22 
08:34:46 UTC ---
The following variation of the test case was compiled with both gcc-4.7.1 and
MS Visual Studio 2008:

#include 

#if defined(__GNUC__)
struct A1 {
short s;
struct { int i; } x;
} __attribute__((__packed__));
#endif

#pragma pack(1)
struct A2 {
short s;
struct { int i; } x;
};
#pragma pack()

int main(void)
{
#if defined(__GNUC__)
printf("sizeof(struct A1) == %u\n", (unsigned)sizeof(struct A1));
#endif
printf("sizeof(struct A2) == %u\n", (unsigned)sizeof(struct A2));
return 0;
}

Note that structs A1 and A2 are identical, except A1 is packed (when compiled
by gcc) using the attribute syntax and A2 is packed using the #pragma syntax.

Compiling this with gcc-4.7.1 (target x86_64-w64-mingw32) with -mms-bitfields
(which is the default) gives:

sizeof(struct A1) == 8
sizeof(struct A2) == 6

proving that attribute packed doesn't work.  With -mno-ms-bitfields both
structs are reported as being 6 bytes.

Compiling with Visual Studio 2008 gives:

sizeof(struct A2) == 6

as expected.


[Bug middle-end/53676] [4.7 regression] empty loop is not always removed now

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

--- Comment #13 from Richard Guenther  2012-08-22 
08:46:54 UTC ---
(In reply to comment #12)
> I've been doing research into LLVM 3.1 and other GCC versions. LLVM 3.1
> correctly eliminate the (near) empty loop, and their current trunk does not
> regress like 4.7 has.
> 
> Is the trunk patch coupled to other changes that are too invasive for 4.7? I'm
> confused and curious about what optimization regressions are serious enough to
> warrant a back port, if any.

No, it's only the commit referenced in this PR.  No optimization regressions
warrant a backport as they always come with the risk of regressing something
worse than performance.  Trivial restoring of old behavior might be worth
backporting but the patch introduces a completely new non-trivial transform
into a core analysis engine that is shared among many passes.


[Bug middle-end/53676] [4.7 regression] empty loop is not always removed now

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

Steven Bosscher  changed:

   What|Removed |Added

 CC||steven at gcc dot gnu.org

--- Comment #14 from Steven Bosscher  2012-08-22 
08:55:05 UTC ---
(In reply to comment #13)
> No, it's only the commit referenced in this PR.  No optimization regressions
> warrant a backport as they always come with the risk of regressing something
> worse than performance.  Trivial restoring of old behavior might be worth
> backporting but the patch introduces a completely new non-trivial transform
> into a core analysis engine that is shared among many passes.

FWIW, it seems to me that small patches, even non-trivial ones, should be
candidates for back-porting after they've been on the trunk or on a later
release branch for a reasonable period of time. E.g. after 3 months on the GCC
4.8 trunk and with no resulting bugs reported, this patch should be considered
for back-porting IMHO.


[Bug rtl-optimization/54269] [4.8 Regression] memory usage too large when optimizing

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

Steven Bosscher  changed:

   What|Removed |Added

 Resolution|FIXED   |DUPLICATE

--- Comment #8 from Steven Bosscher  2012-08-22 
08:59:04 UTC ---
No question, this was a dup.

*** This bug has been marked as a duplicate of bug 54332 ***


[Bug middle-end/54332] [4.8 Regression] 481.wrf in SPEC CPU 2006 takes > 10GB memory to compile

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

Steven Bosscher  changed:

   What|Removed |Added

 CC||Joost.VandeVondele at mat
   ||dot ethz.ch

--- Comment #28 from Steven Bosscher  2012-08-22 
08:59:04 UTC ---
*** Bug 54269 has been marked as a duplicate of this bug. ***


[Bug middle-end/53676] [4.7 regression] empty loop is not always removed now

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

--- Comment #15 from Richard Guenther  2012-08-22 
09:17:10 UTC ---
(In reply to comment #14)
> (In reply to comment #13)
> > No, it's only the commit referenced in this PR.  No optimization regressions
> > warrant a backport as they always come with the risk of regressing something
> > worse than performance.  Trivial restoring of old behavior might be worth
> > backporting but the patch introduces a completely new non-trivial transform
> > into a core analysis engine that is shared among many passes.
> 
> FWIW, it seems to me that small patches, even non-trivial ones, should be
> candidates for back-porting after they've been on the trunk or on a later
> release branch for a reasonable period of time. E.g. after 3 months on the GCC
> 4.8 trunk and with no resulting bugs reported, this patch should be considered
> for back-porting IMHO.

Testing coverage during stage1 isn't very good IMHO, so we should wait at
least until we enter stage3.  But again, patch size isn't a good metric, it is
the coverage that counts - for this patch, changing SCEV analysis in a
non-trivial way is very intrusive.


[Bug rtl-optimization/54343] RTL postreload leaks DF memory

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

--- Comment #4 from Richard Guenther  2012-08-22 
09:32:13 UTC ---
(In reply to comment #3)
> HJ's fix for PR 54332 will probably fix this one, too.  Could you re-test?
> 
> Thanks.

Doesn't fix it.

==18936== 3,984 bytes in 249 blocks are definitely lost in loss record 28,126
of 29,883
==18936==at 0x4C29ADD: malloc (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==18936==by 0xCE2D27: xmalloc (xmalloc.c:147)
==18936==by 0x6B05FD: df_refs_add_to_chains(df_collection_rec*,
basic_block_def*, rtx_def*) (df-scan.c:2669)
==18936==by 0x6B50B4: df_bb_refs_record(int, bool) (df-scan.c:3644)
==18936==by 0x6B51BC: df_scan_blocks() (df-scan.c:678)
==18936==by 0x7B6C1D: rest_of_handle_reload() (ira.c:4390)
==18936==by 0x818CEA: execute_one_pass(opt_pass*) (passes.c:2157)
==18936==by 0x819034: execute_pass_list(opt_pass*) (passes.c:2212)
==18936==by 0x819046: execute_pass_list(opt_pass*) (passes.c:2213)
==18936==by 0x68F533: expand_function(cgraph_node*) (cgraphunit.c:1609)
==18936==by 0x690998: compile() (cgraphunit.c:1714)
==18936==by 0x690F14: finalize_compilation_unit() (cgraphunit.c:2089)


[Bug middle-end/53695] [4.8 Regression] ICE: in dfs_enumerate_from, at cfganal.c:1221 with -O2 -ftracer and labels/gotos

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

--- Comment #5 from Richard Guenther  2012-08-22 
09:36:10 UTC ---
Patch that was posted (no comments yet):

http://gcc.gnu.org/ml/gcc-patches/2012-06/msg01754.html


[Bug debug/53671] [4.8 Regression] Many guality test failures

2012-08-22 Thread izamyatin at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53671

Igor Zamyatin  changed:

   What|Removed |Added

 CC||izamyatin at gmail dot com

--- Comment #11 from Igor Zamyatin  2012-08-22 
10:13:03 UTC ---
For r190586:

FAIL: gfortran.dg/guality/pr41558.f90  -O0  line 7 s == 'foo'
FAIL: gfortran.dg/guality/pr41558.f90  -O1  line 7 s == 'foo'
FAIL: gfortran.dg/guality/pr41558.f90  -O2  line 7 s == 'foo'
FAIL: gfortran.dg/guality/pr41558.f90  -O3 -fomit-frame-pointer  line 7 s ==
'foo'
FAIL: gfortran.dg/guality/pr41558.f90  -O3 -fomit-frame-pointer -funroll-loops 
line 7 s == 'foo'
FAIL: gfortran.dg/guality/pr41558.f90  -O3 -fomit-frame-pointer
-funroll-all-loops -finline-functions  line 7 s == 'foo'
FAIL: gfortran.dg/guality/pr41558.f90  -O3 -g  line 7 s == 'foo'
FAIL: gfortran.dg/guality/pr41558.f90  -Os  line 7 s == 'foo'


[Bug debug/53671] [4.8 Regression] Many guality test failures

2012-08-22 Thread jakub at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53671

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org,
   ||mark at gcc dot gnu.org

--- Comment #12 from Jakub Jelinek  2012-08-22 
10:39:22 UTC ---
The last one is an unrelated issue, caused by
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190543
(you'll notice also that all of the C and C++ guality testing is not performed
any longer).  The issue is that with the above change one needs to use GDB 7.5
or later (or at least have the constant class DW_AT_high_pc support patch
backported to GDB 7.4.*).  Mark, can you point to the commit with the fix?


[Bug debug/53671] [4.8 Regression] Many guality test failures

2012-08-22 Thread mark at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53671

--- Comment #13 from Mark Wielaard  2012-08-22 
11:10:21 UTC ---
[PATCH] gdb: dwarf2read.c handle DW_AT_high_pc constant form for DWARF 4+.
http://sourceware.org/ml/gdb-patches/2012-04/msg00982.html


[Bug debug/53671] [4.8 Regression] Many guality test failures

2012-08-22 Thread izamyatin at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53671

--- Comment #14 from Igor Zamyatin  2012-08-22 
11:24:17 UTC ---
Thanks!


[Bug tree-optimization/46590] [4.6/4.7/4.8 Regression] long compile time with -O2 and many loops

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

--- Comment #27 from Richard Guenther  2012-08-22 
11:39:56 UTC ---
The issue with loop header copying is that we use incremental SSA updating
with PHI insertion for each individual loop header copied.  That computes
dominance frontiers which is always for the whole function.

I thought that loop header copying wouldn't need to insert new PHI nodes
and thus can do with TODO_update_ssa_no_phi if we are in loop-closed SSA form,
but appearantly that is not the case (I didn't inverstigate further here,
but possibly that's just because virtual operands are not in loop-closed
SSA form).


[Bug tree-optimization/53852] [4.8 Regression] -ftree-loop-linear: large compile time / memory usage

2012-08-22 Thread Joost.VandeVondele at mat dot ethz.ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53852

--- Comment #5 from Joost VandeVondele  
2012-08-22 11:58:00 UTC ---
simplified testcase and some analysis:

SUBROUTINE  build_d_tensor_gks(d5f,v,d5)
INTEGER, PARAMETER :: dp=8
REAL(KIND=dp),  DIMENSION(3, 3, 3, 3, 3), &
  INTENT(OUT) :: d5f
REAL(KIND=dp), DIMENSION(3), INTENT(IN)  :: v
REAL(KIND=dp), INTENT(IN) :: d5
INTEGER   :: k1, k2, k3, k4, k5
REAL(KIND=dp) :: w

d5f = 0.0_dp
DO k1=1,3
   DO k2=1,3
  DO k3=1,3
 DO k4=1,3
DO k5=1,3
   d5f(k5,k4,k3,k2,k1)=d5f(k5,k4,k3,k2,k1)+ &
  v(k1)*v(k2)*v(k3)*v(k4)*v(k5)*d5
ENDDO
w=v(k1)*v(k2)*v(k3)*d4
d5f(k1,k2,k3,k4,k4)=d5f(k1,k2,k3,k4,k4)+w
d5f(k1,k2,k4,k3,k4)=d5f(k1,k2,k4,k3,k4)+w
d5f(k1,k4,k2,k3,k4)=d5f(k1,k4,k2,k3,k4)+w
d5f(k4,k1,k2,k3,k4)=d5f(k4,k1,k2,k3,k4)+w
d5f(k1,k2,k4,k4,k3)=d5f(k1,k2,k4,k4,k3)+w
 !  d5f(k1,k4,k2,k4,k3)=d5f(k1,k4,k2,k4,k3)+w
 !  d5f(k4,k1,k2,k4,k3)=d5f(k4,k1,k2,k4,k3)+w
 !  d5f(k1,k4,k4,k2,k3)=d5f(k1,k4,k4,k2,k3)+w
 !  d5f(k4,k1,k4,k2,k3)=d5f(k4,k1,k4,k2,k3)+w
 !  d5f(k4,k4,k1,k2,k3)=d5f(k4,k4,k1,k2,k3)+w
 ENDDO
  ENDDO
   ENDDO
ENDDO
  END SUBROUTINE build_d_tensor_gks


the issue is that the compile time grows exponentially in the number of
uncommented lines of the d5f=d5f+w type:

1 0m1.112s
2 0m4.448s
3 0m11.513s
4 0m21.514s
5 0m35.529s


[Bug tree-optimization/54317] [4.8 Regression] FAIL: c45532m c45532n c45532o c45532p

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

--- Comment #4 from Marc Glisse  2012-08-22 12:29:34 
UTC ---
Author: glisse
Date: Wed Aug 22 12:29:23 2012
New Revision: 190591

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190591
Log:
2012-08-22  Marc Glisse  

PR tree-optimization/54317

gcc/
* tree-vrp.c (extract_range_from_binary_expr_1): Test for
double_int overflow.
Remove dead tests.

gcc/testsuite/
* gcc.dg/tree-ssa/vrp79.c: New testcase.


Added:
trunk/gcc/testsuite/gcc.dg/tree-ssa/vrp79.c   (with props)
Modified:
trunk/gcc/ChangeLog
trunk/gcc/testsuite/ChangeLog
trunk/gcc/tree-vrp.c

Propchange: trunk/gcc/testsuite/gcc.dg/tree-ssa/vrp79.c
('svn:eol-style' added)

Propchange: trunk/gcc/testsuite/gcc.dg/tree-ssa/vrp79.c
('svn:keywords' added)


[Bug tree-optimization/54317] [4.8 Regression] FAIL: c45532m c45532n c45532o c45532p

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

--- Comment #5 from Marc Glisse  2012-08-22 12:38:36 
UTC ---
Hello,

I have no idea if the last commit helped, feel free to reconfirm the bug.


[Bug rtl-optimization/54343] RTL postreload leaks DF memory

2012-08-22 Thread dnovillo at google dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54343

--- Comment #5 from dnovillo at google dot com  
2012-08-22 12:43:02 UTC ---
On 2012-08-22 05:32 , rguenth at gcc dot gnu.org wrote:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54343
>
> --- Comment #4 from Richard Guenther  2012-08-22 
> 09:32:13 UTC ---
> (In reply to comment #3)
>> HJ's fix for PR 54332 will probably fix this one, too.  Could you re-test?
>>
>> Thanks.
>
> Doesn't fix it.

OK, then it wasn't related.  Do you know if this started happening with 
rev 190402?


Diego.


[Bug rtl-optimization/54343] RTL postreload leaks DF memory

2012-08-22 Thread rguenther at suse dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54343

--- Comment #6 from rguenther at suse dot de  
2012-08-22 13:01:53 UTC ---
On Wed, 22 Aug 2012, dnovillo at google dot com wrote:

> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54343
> 
> --- Comment #5 from dnovillo at google dot com  
> 2012-08-22 12:43:02 UTC ---
> On 2012-08-22 05:32 , rguenth at gcc dot gnu.org wrote:
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54343
> >
> > --- Comment #4 from Richard Guenther  
> > 2012-08-22 09:32:13 UTC ---
> > (In reply to comment #3)
> >> HJ's fix for PR 54332 will probably fix this one, too.  Could you re-test?
> >>
> >> Thanks.
> >
> > Doesn't fix it.
> 
> OK, then it wasn't related.  Do you know if this started happening with 
> rev 190402?

I don't and I don't believe it did.


[Bug tree-optimization/46590] [4.6/4.7/4.8 Regression] long compile time with -O2 and many loops

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

--- Comment #28 from Richard Guenther  2012-08-22 
13:17:42 UTC ---
Author: rguenth
Date: Wed Aug 22 13:17:26 2012
New Revision: 190594

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190594
Log:
2012-08-22  Richard Guenther  

PR tree-optimization/46590
* tree-ssa-alias.h (get_continuation_for_phi): Add alias query
counter output argument.
(walk_non_aliased_vuses): Add alias query counter argument
to the walker callback.
* tree-ssa-alias.c (maybe_skip_until): Add alias query counter
output argument and count alias queries.
(get_continuation_for_phi_1): Likewise.
(get_continuation_for_phi): Likewise.
(walk_non_aliased_vuses): Add alias query counter argument
to the walker callback and allow it to abort the walk by
returning -1.
* tree-ssa-pre.c (translate_vuse_through_block): Adjust.
* tree-ssa-sccvn.c (vn_reference_lookup_2): Add alias query
counter parmeter, abort walk if that is bigger than
--param sccvn-max-alias-queries-per-access.
* params.def (sccvn-max-alias-queries-per-access): New param.
* doc/invoke.texi (sccvn-max-alias-queries-per-access): Document.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/doc/invoke.texi
trunk/gcc/params.def
trunk/gcc/tree-ssa-alias.c
trunk/gcc/tree-ssa-alias.h
trunk/gcc/tree-ssa-pre.c
trunk/gcc/tree-ssa-sccvn.c


[Bug target/54347] REAL_VALUE_TO_TARGET_LONG_DOUBLE shouldn't be used with XFmode

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

H.J. Lu  changed:

   What|Removed |Added

   Target Milestone|--- |4.8.0

--- Comment #1 from H.J. Lu  2012-08-22 13:56:00 
UTC ---
This is similar to PR 15290.


[Bug target/54349] New: _mm_cvtsi128_si64 unnecessary stores value at stack

2012-08-22 Thread neleai at seznam dot cz
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54349

 Bug #: 54349
   Summary: _mm_cvtsi128_si64 unnecessary stores value at stack
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: nel...@seznam.cz


Consider following program:

#include 
#include 
int64_t foo(__m128i a){return  _mm_cvtsi128_si64(a);}
int64_t bar(double b){ return *((int64_t*)&b);}

A _mm_cvtsi128_si64 does unnecesary store into stack instead moving to register
directly. Same problem is present when interpreting double as integer.

  .file "e.c"
  .text
  .p2align 4,,15
  .globl  foo
  .type foo, @function
foo:
.LFB517:
  .cfi_startproc
  movq  %xmm0, -16(%rsp)
  movq  -16(%rsp), %rax
  ret
  .cfi_endproc
.LFE517:
  .size foo, .-foo
  .p2align 4,,15
  .globl  bar
  .type bar, @function
bar:
.LFB518:
  .cfi_startproc
  movsd %xmm0, -8(%rsp)
  movq  -8(%rsp), %rax
  ret
  .cfi_endproc
.LFE518:
  .size bar, .-bar
  .ident  "GCC: (Debian 20120820-1) 4.8.0 20120820 (experimental) [trunk
revision 190537]"
  .section  .note.GNU-stack,"",@progbits


[Bug target/54349] _mm_cvtsi128_si64 unnecessary stores value at stack

2012-08-22 Thread jakub at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54349

Jakub Jelinek  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 CC||jakub at gcc dot gnu.org
 Resolution||INVALID

--- Comment #1 from Jakub Jelinek  2012-08-22 
14:57:54 UTC ---
Not a bug.  You need to tune for a CPU where inter-unit moves are desirable. 
The default is generic tuning, which is a compromise between Intel CPUs (where
they are desirable) and AMD CPUs (where they are undesirable).  In this
particular case the generic tuning doesn't do inter-unit moves as part of the
compromise.  If you -mtune=corei7 or similar, you'll get an inter-unit move in
both cases.


[Bug target/47440] Use LCM for vzeroupper insertion

2012-08-22 Thread vbyakovl23 at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47440

Vladimir Yakovlev  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED

--- Comment #3 from Vladimir Yakovlev  2012-08-22 
15:25:54 UTC ---
I implemented vzeroupper insertion using mode switching technique.
http://gcc.gnu.org/ml/gcc-patches/2012-08/msg01429.html


[Bug debug/13111] g++ debuginfo incorrect for verify.cc

2012-08-22 Thread tromey at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13111

Tom Tromey  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED

--- Comment #3 from Tom Tromey  2012-08-22 15:42:54 
UTC ---
I tried this today and it all seems to work ok.
I didn't look to see if the bug was in gcc or gdb.


[Bug fortran/54350] New: [4.8 Regression] FAIL: gfortran.dg/realloc_on_assign_*.f90 -O (internal compiler error) at r190586

2012-08-22 Thread dominiq at lps dot ens.fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54350

 Bug #: 54350
   Summary: [4.8 Regression] FAIL:
gfortran.dg/realloc_on_assign_*.f90  -O  (internal
compiler error) at r190586
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: domi...@lps.ens.fr
CC: bur...@net-b.de, hjl.to...@gmail.com


Revision 190586 caused several failures in the gfortran test suite:

FAIL: gfortran.dg/realloc_on_assign_14.f90  -O  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_14.f90  -O  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_14.f90  -O  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_14.f90  -O  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O0  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O0  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O0  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O0  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O1  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O1  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O1  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O1  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O2  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O2  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O2  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O2  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer  (internal
compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer  (internal
compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer  (test for
excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer  (test for
excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-all-loops -finline-functions  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-all-loops -finline-functions  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-all-loops -finline-functions  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-all-loops -finline-functions  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-loops  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-loops  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-loops  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -fomit-frame-pointer
-funroll-loops  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -g  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -g  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -g  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -O3 -g  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -Os  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -Os  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -Os  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_15.f90  -Os  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O0  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O0  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O0  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O0  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O1  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O1  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O1  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O1  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O2  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O2  (internal compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O2  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O2  (test for excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O3 -fomit-frame-pointer  (internal
compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O3 -fomit-frame-pointer  (internal
compiler error)
FAIL: gfortran.dg/realloc_on_assign_2.f03  -O3 -fomit-frame-pointer  (test for
excess errors)
FAIL: gfortran.dg/realloc_on_assign_2.

[Bug libgcj/51498] make dejagnu work in libjava testsuite with cross-build

2012-08-22 Thread jojelino at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51498

gee  changed:

   What|Removed |Added

 Status|WAITING |RESOLVED
 Resolution||WONTFIX

--- Comment #11 from gee  2012-08-22 17:04:43 UTC ---
(In reply to comment #8)
> Oh, and why is this a regression?

dejagnu failed to detect the built gcj compiler in canadian cross. and
dejagnu.am of automake is responsible for not exporting makefile variables CC,
CXX, GCJ,... etc to shell. so the cause is not gcc. and this bug isn't
applicable to gcc bugzilla.
so i'm closing the bug.


[Bug tree-optimization/46590] [4.6/4.7/4.8 Regression] long compile time with -O2 and many loops

2012-08-22 Thread stevenb.gcc at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46590

--- Comment #29 from stevenb.gcc at gmail dot com  2012-08-22 17:33:00 UTC ---
> I thought that loop header copying wouldn't need to insert new PHI nodes
> and thus can do with TODO_update_ssa_no_phi if we are in loop-closed SSA form,
> but appearantly that is not the case (I didn't inverstigate further here,
> but possibly that's just because virtual operands are not in loop-closed
> SSA form).

I'll experiment with VOPs in LC-SSA.


[Bug libstdc++/54351] New: ~unique_ptr() should not set __p to null

2012-08-22 Thread gromer at google dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54351

 Bug #: 54351
   Summary: ~unique_ptr() should not set __p to null
Classification: Unclassified
   Product: gcc
   Version: 4.7.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: gro...@google.com


libstdc++'s unique_ptr destructor is currently implemented as:

~unique_ptr() noexcept { reset(); }

This has the effect of resetting the stored pointer to null, and then invoking
the deleter on the formerly-stored pointer. I believe this is inconsistent with
the language standard, which specifies the destructor as "If get() == nullptr
there are no effects. Otherwise get_deleter()(get())." (note no mention of any
side effects on the value of the stored pointer). This is a problem because
this implementation will break code that (legitimately, AFAICT) relies on being
able to continue to invoke operations on the scoped_ptr while the destructor is
executing.

The fix is to reimplement the destructor (in both the base template and the
array specialization) as

~unique_ptr() noexcept {
 if (__p != pointer())
   get_deleter()(__p);
}

If the intent is to zero out __p to help catch use-after-destruction errors, I
believe it would be permissible to set __p to null after the call to
get_deleter(), because at that point the change would no longer be visible to
conforming code.

To make this concrete, here's an example: the following program prints "bad"
under libstdc++, but I believe a standard-conforming implementation is required
to print "good":

=
#include 
#include 

using std::cout;
using std::endl;
using std::unique_ptr;

struct A;

struct B {
 unique_ptr a;
};

struct A {
 B* b;
 ~A() {
   if (b->a == nullptr) {
 cout << "bad" << endl;
   } else {
 cout << "good" << endl;
   }
 }
};

int main(int argc, char** argv) {
 B b;
 b.a.reset(new A);
 b.a->b = &b;
}
===

As a point of comparison, MSVC++ 2010 prints "good" on this example program.


[Bug libstdc++/54351] ~unique_ptr() should not set __p to null

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

--- Comment #1 from Jonathan Wakely  2012-08-22 
18:43:47 UTC ---
Hmm, the behaviour was probalby correct prior to fixing PR 43183, as the old
implementation of reset() did exactly what is required of the destructor.

However, the lifetime of the unique_ptr ends when the destructor starts
([basic.life]/1) so I don't believe it is legitimate to access it at that
point.


[Bug libstdc++/54351] ~unique_ptr() should not set __p to null

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

--- Comment #2 from Jonathan Wakely  2012-08-22 
18:47:07 UTC ---
That said, whether the testcase is valid or not, I don't see any harm in making
the change.


[Bug libstdc++/54351] ~unique_ptr() should not set __p to null

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

Jonathan Wakely  changed:

   What|Removed |Added

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

--- Comment #3 from Jonathan Wakely  2012-08-22 
18:51:27 UTC ---
Looking more closely, [basic.life]/5 and [class.cdtor]/1 do seem to allow your
testcase. So confirmed.


[Bug libstdc++/54351] ~unique_ptr() should not set __p to null

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

--- Comment #4 from Jonathan Wakely  2012-08-22 
18:58:22 UTC ---
I'll test this change:

@@ -169,7 +169,13 @@
 #endif

   // Destructor.
-  ~unique_ptr() noexcept { reset(); }
+  ~unique_ptr() noexcept
+  {
+   auto& __ptr = std::get<0>(_M_t);
+   if (__ptr != pointer())
+ get_deleter()(__ptr);
+   __ptr = pointer();
+  }

   // Assignment.
   unique_ptr&


[Bug libstdc++/54351] ~unique_ptr() should not set __p to null

2012-08-22 Thread gromer at google dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54351

--- Comment #5 from Geoff Romer  2012-08-22 19:11:17 
UTC ---
Don't forget the array specialization.

Doesn't the first line of your new destructor shadow the __p member with a __p
local variable? Why is that line needed at all?


[Bug libstdc++/51823] [DR 198] reverse iterator returns uninitialized values

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

Jonathan Wakely  changed:

   What|Removed |Added

   Keywords||ABI

--- Comment #12 from Jonathan Wakely  2012-08-22 
19:19:15 UTC ---
setting ABI keyword as this can't be properly fixed without an incompatible
change


[Bug libstdc++/49204] [C++0x] remaining issues in

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

Jonathan Wakely  changed:

   What|Removed |Added

   Keywords||ABI

--- Comment #9 from Jonathan Wakely  2012-08-22 
19:20:19 UTC ---
(In reply to comment #7)
> timed waiting functions do nto return future_status::deferred if the shared
> state contains a deferred function (requires an additional virtual function to
> be added to the vtable)

setting ABI keyword as this can't be properly fixed without an incompatible
change


[Bug middle-end/53695] [4.8 Regression] ICE: in dfs_enumerate_from, at cfganal.c:1221 with -O2 -ftracer and labels/gotos

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

Steven Bosscher  changed:

   What|Removed |Added

 CC||steven at gcc dot gnu.org

--- Comment #6 from Steven Bosscher  2012-08-22 
19:26:03 UTC ---
(In reply to comment #4)

Wouldn't this patch disable all loop detection for loops with exceptions and so
on in them? That seems a rather big hammer to this problem. It should be enough
to check only for EH_ABNORMAL.

What caused the ICE to appear anyway? There is a problem I can see in
dfs_enumerate_from that could cause it to ICE.

At the point of the ICE, we have the following CFG (cc1 -O2 -ftracer):

(gdb) p current_pass->name
$5 = 0x13195b0 "local-pure-const"
(gdb) p brief_dump_cfg(stderr,-1)
;; basic block 2, loop depth 0, count 0, freq 6667, maybe hot
;;  prev block 0, next block 3, flags: (NEW, REACHABLE)
;;  pred:   ENTRY [100.0%]  (FALLTHRU,EXECUTABLE)
;;  succ:   3 [100.0%]  (FALLTHRU,EXECUTABLE)
;; basic block 3, loop depth 0, count 0, freq 6667, maybe hot
;;  prev block 2, next block 4, flags: (NEW, REACHABLE, IRREDUCIBLE_LOOP)
;;  pred:   2 [100.0%]  (FALLTHRU,EXECUTABLE)
;;  succ:   5 [100.0%]  (FALLTHRU,IRREDUCIBLE_LOOP,EXECUTABLE)
;; basic block 4, loop depth 0, count 0, freq 0
;; Invalid sum of incoming frequencies , should be 0
;;  prev block 3, next block 5, flags: (NEW, REACHABLE, IRREDUCIBLE_LOOP)
;;  pred:   5 [33.3%]  (ABNORMAL,IRREDUCIBLE_LOOP,EXECUTABLE)
;;  succ:   5 [100.0%]  (FALLTHRU,DFS_BACK,IRREDUCIBLE_LOOP,EXECUTABLE)
;; basic block 5, loop depth 1, count 0, freq 1, maybe hot
;;  prev block 4, next block 6, flags: (NEW, REACHABLE)
;;  pred:   4 [100.0%]  (FALLTHRU,DFS_BACK,IRREDUCIBLE_LOOP,EXECUTABLE)
;;  6 [100.0%]  (FALLTHRU,DFS_BACK,EXECUTABLE)
;;  3 [100.0%]  (FALLTHRU,IRREDUCIBLE_LOOP,EXECUTABLE)
;;  succ:   4 [33.3%]  (ABNORMAL,IRREDUCIBLE_LOOP,EXECUTABLE)
;;  6 [33.3%]  (ABNORMAL,EXECUTABLE)
;;  7 [33.3%]  (ABNORMAL,EXECUTABLE)
;; basic block 6, loop depth 1, count 0, freq , maybe hot
;;  prev block 5, next block 7, flags: (NEW, REACHABLE)
;;  pred:   5 [33.3%]  (ABNORMAL,EXECUTABLE)
;;  succ:   5 [100.0%]  (FALLTHRU,DFS_BACK,EXECUTABLE)
;; basic block 7, loop depth 0, count 0, freq , maybe hot
;;  prev block 6, next block 1, flags: (NEW, REACHABLE)
;;  pred:   5 [33.3%]  (ABNORMAL,EXECUTABLE)
;;  succ:   EXIT [100.0%]

Or in human-readable form:

   ENTRY
 |
 V
 |
2(0)
 |
 |
 V
 |
3(0)
 |
 \
  \
   \
\
 \
  \
+-->--+   |   +--<---+
|  \  V  /   |
|   \ | /|
+-4(1)-<-5(1)->-6(1)-+
  (a) |  (a)
  |
  |(a)
  |
 7(0)
  |
 EXIT

where "(a)" denotes abnormal edge, of course, and (0) or (1) is the loop depth
at this point.

The loop detected here is the region with the abnormal edges, for blocks 4, 5,
and 6. The detected "loop" has header bb 5 and latch bb 6, which is not clearly
wrong: this is just two loops with the same header. But this confuses
dfs_enumerate_from, which does a reverse DFS from basic block 5 with predicate
glb_enum_p. The DFS visits block 5, 4, and 6, but dfs_enumerate_from is told to
expect to visit only 2 basic blocks, not 3. The reason it sees 3 is that
glb_enum_p is this:

/* Enumeration predicate for get_loop_body_with_size.  */
static bool
glb_enum_p (const_basic_block bb, const void *glb_loop)
{
  const struct loop *const loop = (const struct loop *) glb_loop;
  return (bb != loop->header
  && dominated_by_p (CDI_DOMINATORS, bb, loop->header));
}

called with loop->header == bb5, and called with bb==4 and bb==6. And since bb5
dominates both bb4 and bb6, the predicate returns true for both, and
dfs_enumerate_from ends up visiting 3 basic blocks. So why is it told to expect
two blocks in the first place, instead of 3?

dfs_enumerate_from is called, via get_loop_body_with_size, from get_loop_body:

tv = get_loop_body_with_size (loop, body, loop->num_nodes);

The natural loop 1 has only two nodes, namely bb5 and bb6. So where does bb4
come from? That's tracer at work.

So the root cause here, is that tracer should either update the loop tree or
refrain from duplicating blocks if it results in a single loop header
dominating two separate loops.

Irreducibility and updating the loop tree are the key to fixing this bug, not
the big hammer patch of comment #4.


[Bug libstdc++/54351] ~unique_ptr() should not set __p to null

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

--- Comment #6 from Jonathan Wakely  2012-08-22 
19:28:15 UTC ---
(In reply to comment #5)
> Don't forget the array specialization.

I won't :-)

> Doesn't the first line of your new destructor shadow the __p member with a __p
> local variable? Why is that line needed at all?

There is no __p member.


[Bug target/54347] REAL_VALUE_TO_TARGET_LONG_DOUBLE shouldn't be used with XFmode

2012-08-22 Thread hjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54347

--- Comment #2 from hjl at gcc dot gnu.org  2012-08-22 
19:44:04 UTC ---
Author: hjl
Date: Wed Aug 22 19:43:58 2012
New Revision: 190598

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190598
Log:
Replace REAL_VALUE_TO_TARGET_LONG_DOUBLE with real_to_target

PR target/54347
* config/i386/i386.c (ix86_split_to_parts): Replace
REAL_VALUE_TO_TARGET_LONG_DOUBLE with real_to_target.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/i386.c


[Bug libstdc++/49561] [C++0x] std::list::size complexity

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

Jonathan Wakely  changed:

   What|Removed |Added

   Keywords||ABI

--- Comment #18 from Jonathan Wakely  2012-08-22 
19:47:03 UTC ---
setting ABI keyword as this can't be properly fixed without an incompatible
change


[Bug libstdc++/54351] ~unique_ptr() should not set stored pointer to null

2012-08-22 Thread gromer at google dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54351

--- Comment #7 from Geoff Romer  2012-08-22 19:49:28 
UTC ---
(In reply to comment #6)
> (In reply to comment #5)
> > Don't forget the array specialization.
> 
> I won't :-)
> 
> > Doesn't the first line of your new destructor shadow the __p member with a 
> > __p
> > local variable? Why is that line needed at all?
> 
> There is no __p member.

Ah, sorry, I was evidently misreading something. I've corrected the bug
description.


[Bug fortran/54350] [4.8 Regression] FAIL: gfortran.dg/realloc_on_assign_*.f90 -O (internal compiler error) at r190586

2012-08-22 Thread hp at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54350

Hans-Peter Nilsson  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-08-22
 CC||burnus at gcc dot gnu.org,
   ||hp at gcc dot gnu.org
 Ever Confirmed|0   |1

--- Comment #1 from Hans-Peter Nilsson  2012-08-22 
19:59:16 UTC ---
Seeing something like this for cris-elf too, specifically a regression for

gfortran.sum gfortran.dg/realloc_on_assign_14.f90
gfortran.sum gfortran.dg/realloc_on_assign_15.f90
gfortran.sum gfortran.dg/realloc_on_assign_2.f03

for exactly r190586 except in my case (cross from x86_64-linux to cris-elf) the
ICE message is the less specific:
/tmp/hpautotest-gcc0/gcc/gcc/testsuite/gfortran.dg/realloc_on_assign_14.f90: In
function 'MAIN__':
/tmp/hpautotest-gcc0/gcc/gcc/testsuite/gfortran.dg/realloc_on_assign_14.f90:31:0:
internal compiler error: Segmentation fault

Adding committers' @gcc.gnu.org address to CC.


[Bug libstdc++/46906] istreambuf_iterator is late?

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

Marc Glisse  changed:

   What|Removed |Added

   Keywords||ABI
 CC||glisse at gcc dot gnu.org

--- Comment #12 from Marc Glisse  2012-08-22 
20:00:11 UTC ---
Adding keyword ABI following Paolo's comment.
(not a bug, according to Daniel, but that's orthogonal to being ABI-related)


[Bug middle-end/53695] [4.8 Regression] ICE: in dfs_enumerate_from, at cfganal.c:1221 with -O2 -ftracer and labels/gotos

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

--- Comment #7 from Steven Bosscher  2012-08-22 
20:13:32 UTC ---
Before tracer we have this CFG:

   ENTRY
 |
 V
 |
2(0)
 |
 |
 V
 |(a)
 |   +-<-+
 V  /|   
 | / /   (a)
 3(1)->-4(1)-->--5(1)-+
   /\ |
  /  +-<--+
 /
|
V(a)
|
   6(0)
|
   EXIT

and (BASIC_BLOCK(3)->flags & IRREDUCIBLE_LOOP) is true. The IRREDUCIBLE_LOOP
flags appear to be out-of-date because the flag is not set on BASIC_BLOCK(4)
but it's set on all edges out of it so that's good enough.

Tracer goes to work on this and finds the following traces:

Trace seed 4 [1],4 [1],3 [6667] forward 2 [6667],3 [6667],4 [1]
Duplicated 3 as 7 [6667]
 covered now 66.7

Trace seed 6 [] forward 6 []
 covered now 100.0

The resulting flow graph was already shown in comment #6, but now with the
basic block numbers before the CFG is cleaned up:

   ENTRY
 |
 V
 |
2(0)
 |
 |
 V
 |
7(0)
 |
 \
  \
   \
\
 \
  \
+-->--+   |   +--<---+
|  \  V  /   |
|   \ | /|
+-3(1)-<-4(1)->-5(1)-+
  (a) |  (a)
  |
  |(a)
  |
 6(0)
  |
 EXIT


[Bug middle-end/53695] [4.8 Regression] ICE: in dfs_enumerate_from, at cfganal.c:1221 with -O2 -ftracer and labels/gotos

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

--- Comment #8 from Steven Bosscher  2012-08-22 
20:20:22 UTC ---
FWIW, GCC handles loops with one header and multiple latches just fine:

void do_something_1 (void);
void do_something_2 (void);
int some_cond (void);

void
foo (void)
{
  while (1)
{
  switch (some_cond ())
{
case 1:
  do_something_1 ();
  continue;
case 2:
  do_something_2 ();
  continue;
default:
  return;
}
}
}

;; 2 loops found
;;
;; Loop 0
;;  header 0, latch 1
;;  depth 0, outer -1
;;  nodes: 0 1 2 3 4 5 6 7
;;
;; Loop 1
;;  header 4, latch 3
;;  depth 1, outer 0
;;  nodes: 4 3 6 5
;; 2 succs { 4 }
;; 3 succs { 4 }
;; 4 succs { 7 5 6 }
;; 5 succs { 3 }
;; 6 succs { 3 }
;; 7 succs { 1 }

foo ()
{
  int _4;

  :
  goto ;

  :

  :
  _4 = some_cond ();
  switch (_4) , case 1: , case 2: >

:
  do_something_1 ();
  goto ;

:
  do_something_2 ();
  goto ;

:
  return;

}

Note the single latch.


[Bug libstdc++/51653] More compact std::tuple

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

Marc Glisse  changed:

   What|Removed |Added

   Keywords||ABI
 CC||glisse at gcc dot gnu.org

--- Comment #3 from Marc Glisse  2012-08-22 20:23:46 
UTC ---
The suggestion in this PR is quite wild, but the fact that
sizeof(tuple)==20 is a real issue that could
probably be solved with less trouble (still ABI-breaking). Maybe I should have
split the PR...


[Bug libstdc++/54352] New: relaxed data race rules for ~condition_variable_any

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

 Bug #: 54352
   Summary: relaxed data race rules for ~condition_variable_any
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Keywords: ABI
  Severity: normal
  Priority: P3
 Component: libstdc++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: r...@gcc.gnu.org


(related to PR 54185, but for condition_variable_any)

As Howard pointed out in c++std-lib-32966 this should work:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

template 
class locked_list
{
std::mutex   mut_;
std::list list_;
public:
typedef typename std::list::iterator iterator;
typedef typename T::key key;

template 
void emplace_back(Args&& ...args)
{list_.emplace_back(std::forward(args)...);}

iterator find(const key& k)
{
std::unique_lock lk(mut_);
while (true)
{
iterator ep = std::find(list_.begin(), list_.end(), k);
if (ep == list_.end())
return ep;
if (!ep->busy())
{
ep->set_busy();
return ep;
}
ep->wait(lk);
}
}

void erase(iterator i)
{
std::lock_guard _(mut_);
assert(i->busy());
i->notify_all();
list_.erase(i);
}

iterator end() {return list_.end();}
};

template 
class elt
{
Key key_;
std::condition_variable_any notbusy_;
bool busy_;
public:
typedef Key key;

explicit elt(const Key& k) : key_(k), busy_(false) {}

bool busy() const {return busy_;}
void set_busy() {busy_ = true;}
void unset_busy() {busy_ = false;}
template 
void wait(Lock& lk) {notbusy_.wait(lk);}
void notify_all() {notbusy_.notify_all();}

bool operator==(const Key& k) const {return key_ == k;}
};

void
f1(locked_list>& list)
{
auto i = list.find(1);
assert(i != list.end());
std::this_thread::sleep_for(std::chrono::milliseconds(500));
list.erase(i);
}

void
f2(locked_list>& list)
{
auto i = list.find(1);
assert(i == list.end());
}

int main()
{
locked_list> list;
list.emplace_back(1);
std::thread t1 = std::thread(f1, std::ref(list));
std::this_thread::sleep_for(std::chrono::milliseconds(250));
std::thread t2 = std::thread(f2, std::ref(list));
t1.join();
t2.join();
}

This test doesn't actually crash with libstdc++, but valgrind shows it's
faulty.

Fixing this involves replacing std::condition_variable_any::_M_mutex with a 
std::shared_ptr


[Bug bootstrap/54353] New: bootstrap-debug-ckovw bootstrap fails because of -fcompare-debug-not-overridden

2012-08-22 Thread edo88 at email dot it
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54353

 Bug #: 54353
   Summary: bootstrap-debug-ckovw bootstrap fails because of
-fcompare-debug-not-overridden
Classification: Unclassified
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: bootstrap
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: ed...@email.it


I tried to bootstrap with GCC 4.7 branch with the options indicated below, but
it fails when it configures the 2nd stage for libgcc. I don't have the
config.log but it says as error:

error: unrecognised command line option ‘-fcompare-debug-not-overridden’

configuration:

../gccsrc/configure --enable-languages=c,c++ --prefix=$HOME/buildgcc
--program-suffix=-4.7-svn --with-build-config='bootstrap-debug-lean
bootstrap-debug-lib bootstrap-debug-ckovw'

probably the fault is the gccsrc/config/bootstrap-debug-ckovw.mk file:

FORCE_COMPARE_DEBUG = \
GCC_COMPARE_DEBUG=$${GCC_COMPARE_DEBUG--fcompare-debug-not-overridden}; \
export GCC_COMPARE_DEBUG;
POSTSTAGE1_HOST_EXPORTS += $(FORCE_COMPARE_DEBUG)
BASE_TARGET_EXPORTS += $(FORCE_COMPARE_DEBUG)

I can't verify this for the other versions.

>From what I heard in chat it seems that option was never tested it in these
years.


[Bug libstdc++/54352] relaxed data race rules for ~condition_variable_any

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

--- Comment #1 from Jonathan Wakely  2012-08-22 
20:43:34 UTC ---
Created attachment 28066
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28066
patch against 4.8 trunk


[Bug c++/28656] duplicated null argument warning on memcpy()

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

Paolo Carlini  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution||FIXED
   Target Milestone|--- |4.8.0

--- Comment #8 from Paolo Carlini  2012-08-22 
20:45:25 UTC ---
I guess we can close this as fixed for 4.8.0.


[Bug fortran/54350] [4.8 Regression] FAIL: gfortran.dg/realloc_on_assign_*.f90 -O (internal compiler error) at r190586

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

Tobias Burnus  changed:

   What|Removed |Added

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

--- Comment #2 from Tobias Burnus  2012-08-22 
20:49:08 UTC ---
Yes, that's a side-effect of my recent patch - sorry. I know about the issue
since this morning, but I didn't manage to fix it as quickly as I had hoped
for. Debugging memory leaks and understanding the scalarizer took longer than
anticipated.

The simplest is to revert
  http://gcc.gnu.org/ml/fortran/2012-08/msg00120.html
Some issues and a possible approach to fix them is given in
  http://gcc.gnu.org/ml/fortran/2012-08/msg00131.html
and the reply
  http://gcc.gnu.org/ml/fortran/2012-08/msg00133.html

I have a patch which is currently building, but with build fixes, other
changes, and regtesting it will probably take a while until it is ready.


[Bug c++/32197] ICE when compiling with gcov options

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

Paolo Carlini  changed:

   What|Removed |Added

 CC|gcc-bugs at gcc dot gnu.org |

--- Comment #2 from Paolo Carlini  2012-08-22 
20:52:24 UTC ---
Is this still an issue?


[Bug c++/32658] Supposedly illegal conversion compiles without errors

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

Paolo Carlini  changed:

   What|Removed |Added

 CC|gcc-bugs at gcc dot gnu.org |

--- Comment #11 from Paolo Carlini  2012-08-22 
20:56:01 UTC ---
Nathan, shall we close this?


[Bug libstdc++/54352] relaxed data race rules for ~condition_variable_any

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

--- Comment #2 from Jonathan Wakely  2012-08-22 
20:58:10 UTC ---
(In reply to comment #1)
> Created attachment 28066 [details]
> patch against 4.8 trunk

That patch needs some additional exports:

_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policy*;
_ZNKSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policy*;
_ZT[ISV]St16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE;


[Bug c++/33255] A warning for "unused" typedefs?

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

Paolo Carlini  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 CC|gcc-bugs at gcc dot gnu.org |
 Resolution||FIXED
   Target Milestone|--- |4.8.0

--- Comment #29 from Paolo Carlini  2012-08-22 
21:00:06 UTC ---
I suppose we can close this, right? In case there are issues with the
implementation, belong to new, separate PRs.


[Bug target/53291] Code generated for xtest is wrong

2012-08-22 Thread eraman at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53291

--- Comment #11 from eraman at gcc dot gnu.org 2012-08-22 21:07:39 UTC ---
Author: eraman
Date: Wed Aug 22 21:07:30 2012
New Revision: 190601

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190601
Log:
2012-08-22   Easwaran Raman  
Backport r187387 and r187477 from trunk.

r187387:
2012-05-11  Uros Bizjak  
PR target/53291
* config/i386/i386.md (xtest): Use NE condition in ix86_expand_setcc.

r187477:
2012-05-14  Andrew Pinski  
H.J. Lu  
Jakub Jelinek  
PR target/53315
* config/i386/i386.md (xbegin_1): Use + in constraint and
match_dup.
(xbegin): Updated.

gcc/testsuite/ChangeLog.google-4_7:
2012-08-22   Easwaran Raman  
Backport r187477 from trunk:

2012-05-14  Andi Kleen 
Jakub Jelinek  

PR target/53315
* gcc.target/i386/i386.exp (check_effective_target_rtm): New.
* gcc.target/i386/rtm-check.h: New file.
* gcc.target/i386/pr53315.c: New test.


Added:
branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/pr53315.c
  - copied unchanged from r187477,
trunk/gcc/testsuite/gcc.target/i386/pr53315.c
branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/rtm-check.h
  - copied unchanged from r187477,
trunk/gcc/testsuite/gcc.target/i386/rtm-check.h
Modified:
branches/google/gcc-4_7/gcc/ChangeLog.google-4_7
branches/google/gcc-4_7/gcc/config/i386/i386.md
branches/google/gcc-4_7/gcc/testsuite/ChangeLog.google-4_7
branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/i386.exp


[Bug target/53315] simple xtest program generates ICE

2012-08-22 Thread eraman at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53315

--- Comment #19 from eraman at gcc dot gnu.org 2012-08-22 21:07:40 UTC ---
Author: eraman
Date: Wed Aug 22 21:07:30 2012
New Revision: 190601

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190601
Log:
2012-08-22   Easwaran Raman  
Backport r187387 and r187477 from trunk.

r187387:
2012-05-11  Uros Bizjak  
PR target/53291
* config/i386/i386.md (xtest): Use NE condition in ix86_expand_setcc.

r187477:
2012-05-14  Andrew Pinski  
H.J. Lu  
Jakub Jelinek  
PR target/53315
* config/i386/i386.md (xbegin_1): Use + in constraint and
match_dup.
(xbegin): Updated.

gcc/testsuite/ChangeLog.google-4_7:
2012-08-22   Easwaran Raman  
Backport r187477 from trunk:

2012-05-14  Andi Kleen 
Jakub Jelinek  

PR target/53315
* gcc.target/i386/i386.exp (check_effective_target_rtm): New.
* gcc.target/i386/rtm-check.h: New file.
* gcc.target/i386/pr53315.c: New test.


Added:
branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/pr53315.c
  - copied unchanged from r187477,
trunk/gcc/testsuite/gcc.target/i386/pr53315.c
branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/rtm-check.h
  - copied unchanged from r187477,
trunk/gcc/testsuite/gcc.target/i386/rtm-check.h
Modified:
branches/google/gcc-4_7/gcc/ChangeLog.google-4_7
branches/google/gcc-4_7/gcc/config/i386/i386.md
branches/google/gcc-4_7/gcc/testsuite/ChangeLog.google-4_7
branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/i386.exp


[Bug middle-end/53695] [4.8 Regression] ICE: in dfs_enumerate_from, at cfganal.c:1221 with -O2 -ftracer and labels/gotos

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

--- Comment #9 from Steven Bosscher  2012-08-22 
21:33:18 UTC ---
I think the right fix for this bug is to use disambiguate_multiple_latches in
the loop updating code (fix_loop_structure), but I'm not sure where to put it.


[Bug rtl-optimization/54342] [4.8 Regression] Wrong mode of call argument

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

Uros Bizjak  changed:

   What|Removed |Added

 CC||hjl.tools at gmail dot com

--- Comment #4 from Uros Bizjak  2012-08-22 22:01:52 
UTC ---
I believe that OImode is currently handled inconsistently in the compiler, and
should be handled exactly in the way TImode is handled for xmm registers.

There are some examples:

-function_pass_avx256_p: OImode is handled together with VALID_AVX256_REG_MODE
in parallels, but not in registers.
-construct_container: OImode is created for container member
-ix86_hard_regno_mode_ok: OImode is handled together with
VALID_AVX256_REG_MODE.

I think that OImode should be a member of VALID_AVX256_REG_MODE.


[Bug rtl-optimization/54342] [4.8 Regression] Wrong mode of call argument

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

H.J. Lu  changed:

   What|Removed |Added

 Status|UNCONFIRMED |WAITING
   Last reconfirmed||2012-08-22
 Ever Confirmed|0   |1

--- Comment #5 from H.J. Lu  2012-08-22 22:08:54 
UTC ---
Is an ABI issue? Why isn't shown up in gcc.target/x86_64/abi/avx
tests?


[Bug rtl-optimization/54342] [4.8 Regression] Wrong mode of call argument

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

--- Comment #6 from H.J. Lu  2012-08-22 22:10:51 
UTC ---
This may be related to PR 54315.


[Bug rtl-optimization/54342] [4.8 Regression] Wrong mode of call argument

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

--- Comment #7 from Uros Bizjak  2012-08-22 22:26:22 
UTC ---
Please note that there is currently no way to generate OImode directly:

$ more oi.c
typedef int OItype __attribute__ ((mode (OI)));

OItype test (OItype a)
{
  return a;
}
$ gcc -O2 -mavx oi.c
oi.c:1:1: error: unable to emulate ‘OI’


[Bug target/54089] [SH] Refactor shift patterns

2012-08-22 Thread olegendo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54089

--- Comment #15 from Oleg Endo  2012-08-22 
22:52:25 UTC ---
Author: olegendo
Date: Wed Aug 22 22:52:17 2012
New Revision: 190603

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190603
Log:
PR target/54089
* config/sh/predicates (p27_rshift_count_operand,
not_p27_rshift_count_operand): New predicates.
* config/sh/sh.c (sh_ashlsi_clobbers_t_reg_p,
sh_lshrsi_clobbers_t_reg_p, sh_dynamicalize_shift_p): Handle special
case when shift amount is 31.
(gen_ashift): Emit gen_shlr instead of gen_lshrsi3_m.
* config/sh/sh.md (ashlsi3_d): Set type to 'dyn_shift' instead
of 'arith'.
(ashlsi_c): Rename to shll.  Adapt calls to gen_ashlsi_c throughout
the file.
(lshrsi3): Remove clobber from expander.  Use shift_count_operand
instead of nonmemory_operand predicate for second operand.  Add
handling of case lshrsi3_n_clobbers_t.
(lshrsi3_k): Use p27_rshift_count_operand for second operand.
(lshrsi3_d): Make insn_and_split.  Split dynamic shift to constant
shift sequences if beneficial.
(lshrsi3_n): Make insn_and_split.  Split constant shift sequence to
dynamic shift if beneficial.
(lshrsi3_n_clobbers_t): New insn_and_split.
(lshrsi3_m): Delete.

PR target/54089
* gcc.target/sh/pr54089-2.c: New.


Added:
trunk/gcc/testsuite/gcc.target/sh/pr54089-2.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/sh/predicates.md
trunk/gcc/config/sh/sh.c
trunk/gcc/config/sh/sh.md
trunk/gcc/testsuite/ChangeLog


[Bug middle-end/52939] [4.7/4.8 Regression] ice in gimple_get_virt_method_for_binfo with -O3

2012-08-22 Thread blelbach at cct dot lsu.edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52939

Bryce Lelbach (wash)  changed:

   What|Removed |Added

 CC||blelbach at cct dot lsu.edu

--- Comment #9 from Bryce Lelbach (wash)  
2012-08-22 23:52:55 UTC ---
Is the fix for this in a released version of GCC?


[Bug libstdc++/54354] New: TODO extended iomanip manipulators std::get_time and std::put_time (C++11, section 27.7.5)

2012-08-22 Thread facorread at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54354

 Bug #: 54354
   Summary: TODO extended iomanip manipulators std::get_time and
std::put_time (C++11, section 27.7.5)
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: minor
  Priority: P3
 Component: libstdc++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: facorr...@gmail.com


Hello, keep up the great work with GCC.

I wanted to bring to your attention that the extended  manipulators
std::get_time and std::put_time have not been declared (C++11, section 27.7.5).

I checked iomanip at
http://repo.or.cz/w/official-gcc.git/blob_plain/HEAD:/libstdc%2B%2B-v3/include/std/iomanip

For the time being, you might want to put a notice about the lack of these two
manipulators in
http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#iso.2011.specific


[Bug rtl-optimization/54342] [4.8 Regression] Wrong mode of call argument

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

--- Comment #8 from H.J. Lu  2012-08-23 04:04:36 
UTC ---
I don't think AVX supports true 256-bit integer. On the other hand, I was
also puzzled by compute_record_mode, which excludes UNION_TYPE and
QUAL_UNION_TYPE.  Will including them break union?