Failure in bootstrapping GFortran 4.3.0 on Cygwin

2007-08-17 Thread Angelo Graziosi

I want to flag that some changes in GCC 4.3.0 20070816 rev 127568:

* Makefile.in (REVISION): New.
(REVISION_c): New.
(REVISION_s): New.
(version.o): Also depend on $(REVISION). Add
-DREVISION=$(REVISION_s).

* version.c (version_string): Add REVISION.

causes failure on Cygwin:


gcc -c   -g -fkeep-inline-functions -DIN_GCC   -W -Wall -Wwrite-strings
-Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition
-Wmissing-format-attribute-DHAVE_CONFIG_H -I. -I. -I/tmp/gcc/gcc
-I/tmp/gcc/gcc/. -I/tmp/gcc/gcc/../include
-I/tmp/gcc/gcc/../libcpp/include  -I/tmp/gcc/gcc/../libdecnumber
-I/tmp/gcc/gcc/../libdecnumber/bid -I../libdecnumber
/tmp/gcc/gcc/varray.c -o varray.o
gcc -c   -g -fkeep-inline-functions -DIN_GCC   -W -Wall -Wwrite-strings
-Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition
-Wmissing-format-attribute-DHAVE_CONFIG_H -I. -I. -I/tmp/gcc/gcc
-I/tmp/gcc/gcc/. -I/tmp/gcc/gcc/../include
-I/tmp/gcc/gcc/../libcpp/include  -I/tmp/gcc/gcc/../libdecnumber
-I/tmp/gcc/gcc/../libdecnumber/bid -I../libdecnumber/tmp/gcc/gcc/vec.c
-o vec.o
make[3]: *** No rule to make target /tmp/gcc/gcc/REVISION', needed by
version.o'.  Stop.
make[3]: Leaving directory /tmp/gcc/build/gcc'
make[2]: *** [all-stage1-gcc] Error 2
make[2]: Leaving directory /tmp/gcc/build'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory /tmp/gcc/build'
make: *** [all] Error 2


Cheers,

  Angelo.


Re: GCC 4.3.0 Status Report (2007-08-09)

2007-08-17 Thread Olga Golovanevsky


Mark Mitchell [EMAIL PROTECTED] wrote on 09/08/2007 17:19:13:


 Are there any folks out there who have projects for Stage 1 or Stage 2
 that they are having trouble getting reviewed?

struct-reorg + ipa-type-escape changes are awaiting for response.

http://gcc.gnu.org/ml/gcc-patches/2007-08/msg00028.html
http://gcc.gnu.org/ml/gcc-patches/2007-08/msg00024.html

Olga




A compensation to 'Successful Build Report for GCC 4.0.0 C and C++'

2007-08-17 Thread Deng, Xun \(Xun\)
Hello:

This is a compensation to Simon G. Best's build report
(http://gcc.gnu.org/ml/gcc/2005-04/msg01402.html).

As Simon G. Best mentioned, after final-install, gcc's shared libs
should be configed as below:
  1. add the line '/usr/local/lib' to the end of '/etc/ld.so.conf';

  2. run 'ldconfig' as root.


But I found this is not enough.

One shared lib 'libgcc_s.so.1' of installed gcc is conflict with
'/lib/libgcc_s.so.1' of RedHat self contained gcc. If they are not the
same version, program built with new gcc will report 'libgcc_s.so.1
version not correctly' error.

It is caused by that these two libs are both configed into shared lib
cache by '/sbin/ldconfig', and '/lib/libgcc_s.so.1' is always be found
earier by  run-time linker( '/lib' is scaned before dirs listed in
'/etc/ld.so.conf' ).

Solution:
  mv /lib/libgcc_s.so.1 '/lib/libgcc_s.so.1.bk
  ln -s newgccdir/lib/libgcc_s.so.1 /lib/libgcc_s.so.1
  /sbin/ldconfig

Hint: '/lib/libgcc_s.so.1' can not be removed, for it will be recreated
by '/sbin/ldconfig'


Deng Xun


Re: Very Fast: Directly Coded Lexical Analyzer

2007-08-17 Thread Ronny Peine
Am Freitag, 10. August 2007 schrieben Sie:
 To me, very fast (millions of lines a second) lexical analyzers are
 trivial to write by hand, and I really don't see the point of tools,
 and certainly not the utility of any theory in writing such code.
 If anything the formalism of a finite state machine just gets in the
 way, since it is more efficient to encode the state in the code
 location than in data.

Well, there are people out there who don't want to write everytime the same 
code. Why not making your life easier with using autogeneration tools, it 
also reduces bugpropability.




signature.asc
Description: This is a digitally signed message part.


Re: Failure in bootstrapping GFortran 4.3.0 on Cygwin

2007-08-17 Thread Paolo Carlini

Revital1 Eres wrote:


Also on ppc64.
 


Everywhere!

Paolo.


Re: Failure in bootstrapping GFortran 4.3.0 on Cygwin

2007-08-17 Thread Andreas Schwab
Paolo Carlini [EMAIL PROTECTED] writes:

 Revital1 Eres wrote:

Also on ppc64.
  

 Everywhere!

The file is only updated by the new config/gcc_update script, so if you
update the first time it is not created.  How about this:

2007-08-17  Andreas Schwab  [EMAIL PROTECTED]

* Makefile.in (REVISION): Only use $(srcdir)/REVISION when it
exists.

Index: gcc/Makefile.in
===
--- gcc/Makefile.in (revision 127578)
+++ gcc/Makefile.in (working copy)
@@ -728,13 +728,13 @@ TM_H  = $(GTM_H) insn-constants.h in
 BASEVER := $(srcdir)/BASE-VER  # 4.x.y
 DEVPHASE:= $(srcdir)/DEV-PHASE # experimental, prerelease, 
 DATESTAMP   := $(srcdir)/DATESTAMP # MMDD or empty
-REVISION:= $(srcdir)/REVISION  # [BRANCH revision XX]
+REVISION:= $(wildcard $(srcdir)/REVISION)  # [BRANCH revision XX]
 
 BASEVER_c   := $(shell cat $(BASEVER))
 DEVPHASE_c  := $(shell cat $(DEVPHASE))
 DATESTAMP_c := $(shell cat $(DATESTAMP))
 
-ifeq (,$(wildcard $(REVISION)))
+ifdef REVISION
 REVISION_c  :=
 else
 REVISION_c  := $(shell cat $(REVISION))

Andreas.

-- 
Andreas Schwab, SuSE Labs, [EMAIL PROTECTED]
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
And now for something completely different.


Re: Failure in bootstrapping GFortran 4.3.0 on Cygwin

2007-08-17 Thread François-Xavier Coudert
Well, at least the culprit is easy to find!

2007-08-16  H.J. Lu  [EMAIL PROTECTED]

* Makefile.in (REVISION): New.
(REVISION_c): New.
(REVISION_s): New.
(version.o): Also depend on $(REVISION). Add
-DREVISION=$(REVISION_s).

* version.c (version_string): Add REVISION.


RE: Failure in bootstrapping GFortran 4.3.0 on Cygwin

2007-08-17 Thread Dave Korn
On 17 August 2007 12:28, Andreas Schwab wrote:

 Paolo Carlini [EMAIL PROTECTED] writes:
 
 Revital1 Eres wrote:
 
 Also on ppc64.
 
 
 Everywhere!
 
 The file is only updated by the new config/gcc_update script, so if you
 update the first time it is not created.  How about this:

  DATESTAMP   := $(srcdir)/DATESTAMP # MMDD or empty
 -REVISION:= $(srcdir)/REVISION  # [BRANCH revision XX]
 +REVISION:= $(wildcard $(srcdir)/REVISION)  # [BRANCH revision XX]
 
  BASEVER_c   := $(shell cat $(BASEVER))
  DEVPHASE_c  := $(shell cat $(DEVPHASE))
  DATESTAMP_c := $(shell cat $(DATESTAMP))
 
 -ifeq (,$(wildcard $(REVISION)))
 +ifdef REVISION
  REVISION_c  :=
  else
  REVISION_c  := $(shell cat $(REVISION))


  I'm not clear about this, are we allowed to use gnu-specific features like
$(wildcard ...) in this makefile?  


cheers,
  DaveK
-- 
Can't think of a witty .sigline today



Re: Failure in bootstrapping GFortran 4.3.0 on Cygwin

2007-08-17 Thread Andreas Schwab
Dave Korn [EMAIL PROTECTED] writes:

   I'm not clear about this, are we allowed to use gnu-specific features like
 $(wildcard ...) in this makefile?  

Yes.

@item GNU make version 3.79.1 (or later)

You must have GNU make installed to build [EMAIL PROTECTED]

Andreas.

-- 
Andreas Schwab, SuSE Labs, [EMAIL PROTECTED]
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
And now for something completely different.


Re: [RFC] Migrate pointers to members to the middle end

2007-08-17 Thread Richard Guenther
On 8/9/07, Ollie Wild [EMAIL PROTECTED] wrote:
 On 8/8/07, Daniel Berlin [EMAIL PROTECTED] wrote:
  I also haven't necessarily said what Ollie has proposed is a bad idea.
   I have simply said the way he has come up with what he proposed is
  not the way we should go about this.  It may turn out he has come up
  with exactly the representation we want (though I doubt this, for
  various reasons).The specification given also doesn't even explain
  where/how these operations can occur in GIMPLE, and what they do other
  than a C++ something something.
 
  Also given that someone already wrote a type-based devirtualizer that
  worked fine, and i don't see how a points-to one is much work, I'd
  like to see more justification for things like PTRMEM_PLUS_EXPR than
  hey, the C++ FE generates this internally.

 OK.  It sounds like I need to go into a lot more detail.  The new
 nodes I've proposed aren't actually motivated by the C++ front end,
 but rather by a consideration of the semantics dictated by the C++
 standard.  Naturally, this gives rise to some similarity, but for
 instance, there is no PTRMEM_PLUS_EXPR in the C++ front end, and my
 definition of PTRMEM_CST disagrees with the current node of the same
 name.

 Let's walk through them:

[...]

Just to throw in something late from the side.  Can you try to model
things in such a way that representing TLS accesses on the tree level
would be possible with whatever new infrastructure you come up with?
(It's the only thing we keep libcalls for if I remember correctly)

Thx,
Richard.


Re: Failure in bootstrapping GFortran 4.3.0 on Cygwin

2007-08-17 Thread H.J. Lu
On Fri, Aug 17, 2007 at 01:27:39PM +0200, Andreas Schwab wrote:
 Paolo Carlini [EMAIL PROTECTED] writes:
 
  Revital1 Eres wrote:
 
 Also on ppc64.
   
 
  Everywhere!
 
 The file is only updated by the new config/gcc_update script, so if you
 update the first time it is not created.  How about this:
 
 2007-08-17  Andreas Schwab  [EMAIL PROTECTED]
 
   * Makefile.in (REVISION): Only use $(srcdir)/REVISION when it
   exists.
 

I checked in a dfferent fix. But this version should work also.
I have no objection to replace my fix with this one.


H.J.


Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Ian Lance Taylor
Kenneth Zadeck [EMAIL PROTECTED] writes:

 There are a lot of ways to handle this problem:
 1) We could do a pass that breaks multiword sets into individual regs if
 some of those regs are dead.  I guess the downside of this is that such
 insns may not match some patterns anymore.
 
 2) We could turn off local.  I was planning on testing this anyway
 because i want to see if local, at this point, is just making global do
 a bad job.   However, my hope is that global or the new allocator from
 vlad is smart enough to properly handle the case where some parts of a
 multiword set are dead. 
 
 3) We could fix global/reload to not be stupid.   Because, of course,
 you should be able to put something in that unused regs slot. 
 
 Any comments.

I think the first step is to figure out what is going wrong.  I don't
see any obvious reason why global or reload should fail in this way,
as long as the multi-word set is properly marked as such at the point
of the set itself.

Ian


Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Vladimir N. Makarov

Kenneth Zadeck wrote:


it looks like the backwards scan is not getting enough interferences
to make reload/global happy.

the case comes about because of way local_alloc is preassigning regs for
pseudos that would map into more than 1 hardreg.

pseudo's are as wide as they need to be.  When local_alloc assigns one
of these to a hard reg, it assigns it to the first hardreg needed and
the mode is used to indicate how many of the following regs are needed.

The problem comes where you have a store that uses 2 or more hard regs
but one or more of those hardregs is unused.

In a forwards scan, ALL of the set regs will interfere with anything
live until the last set reg goes dead.  In a backwards scan, the unused
hard regs never cause interferences.
global/reload wants these interferences.

This is, of course, one of the reasons that backward scanning the proper
way to build an interference graph.  But something in global or reload
cannot handle the truth.

There are a lot of ways to handle this problem:
1) We could do a pass that breaks multiword sets into individual regs if
some of those regs are dead.  I guess the downside of this is that such
insns may not match some patterns anymore.

 

May be it is right thing to do in long perspective but I think it is too 
complicated to implement it working.



2) We could turn off local.  I was planning on testing this anyway
because i want to see if local, at this point, is just making global do
a bad job.   However, my hope is that global or the new allocator from
vlad is smart enough to properly handle the case where some parts of a
multiword set are dead. 

 

The local has very important part update_equiv_regs.  Without it you 
will have a serious performance degradation.


As for IRA I started work on using df-infrastructure for it.  I am not 
going to use UREC or LIVE at least at first time.  I'll use LR as it was 
in IRA before the df-infrastructure.  IRA also uses forward scan for 
building conflicts.  After making df-infrastructure working in IRA, I 
should think about using LIVE or backward scan but right now I am not 
sure that will give an improvement worth to use it.



3) We could fix global/reload to not be stupid.   Because, of course,
you should be able to put something in that unused regs slot. 


Any comments.
 

Thanks for asking.  Taking into account the implementation problems I am 
not sure that the backward scan is worth to implement in gcc.  May be I 
am wrong.  Only the practice (the perfomance and compile time 
improvements) could say that.




Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Kenneth Zadeck
Vladimir N. Makarov wrote:
 Kenneth Zadeck wrote:

 it looks like the backwards scan is not getting enough interferences
 to make reload/global happy.

 the case comes about because of way local_alloc is preassigning regs for
 pseudos that would map into more than 1 hardreg.

 pseudo's are as wide as they need to be.  When local_alloc assigns one
 of these to a hard reg, it assigns it to the first hardreg needed and
 the mode is used to indicate how many of the following regs are needed.

 The problem comes where you have a store that uses 2 or more hard regs
 but one or more of those hardregs is unused.

 In a forwards scan, ALL of the set regs will interfere with anything
 live until the last set reg goes dead.  In a backwards scan, the unused
 hard regs never cause interferences.
 global/reload wants these interferences.

 This is, of course, one of the reasons that backward scanning the proper
 way to build an interference graph.  But something in global or reload
 cannot handle the truth.

 There are a lot of ways to handle this problem:
 1) We could do a pass that breaks multiword sets into individual regs if
 some of those regs are dead.  I guess the downside of this is that such
 insns may not match some patterns anymore.

  

 May be it is right thing to do in long perspective but I think it is
 too complicated to implement it working.

 2) We could turn off local.  I was planning on testing this anyway
 because i want to see if local, at this point, is just making global do
 a bad job.   However, my hope is that global or the new allocator from
 vlad is smart enough to properly handle the case where some parts of a
 multiword set are dead.
  

 The local has very important part update_equiv_regs.  Without it you
 will have a serious performance degradation.

I understand that, but the actual local assignment is the part that gets
in the way of both this and the rest of allocation.  I was going to
leave that part and just turn off the local assignment.

 As for IRA I started work on using df-infrastructure for it.  I am not
 going to use UREC or LIVE at least at first time.  I'll use LR as it
 was in IRA before the df-infrastructure.  IRA also uses forward scan
 for building conflicts.  After making df-infrastructure working in
 IRA, I should think about using LIVE or backward scan but right now I
 am not sure that will give an improvement worth to use it.

The reason that i was doing this now was because i thought we might get
some gain from it and that it is nonorthogonal to what you were doing
with IRA.  I would actually assume that you could just drop this code
in.  This was what we talked about doing at the bad Indian restaurant 
at the summit.

My main goal here was to get rid of urec, since it produces stupid
information for use with early clobbers and it is very slow.  My
enclosed patch should be a lot faster.

 3) We could fix global/reload to not be stupid.   Because, of course,
 you should be able to put something in that unused regs slot.
 Any comments.
  

 Thanks for asking.  Taking into account the implementation problems I
 am not sure that the backward scan is worth to implement in gcc.  May
 be I am wrong.  Only the practice (the perfomance and compile time
 improvements) could say that.




Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Vladimir N. Makarov

Kenneth Zadeck wrote:


Vladimir N. Makarov wrote:
 


Kenneth Zadeck wrote:

   


it looks like the backwards scan is not getting enough interferences
to make reload/global happy.

the case comes about because of way local_alloc is preassigning regs for
pseudos that would map into more than 1 hardreg.

pseudo's are as wide as they need to be.  When local_alloc assigns one
of these to a hard reg, it assigns it to the first hardreg needed and
the mode is used to indicate how many of the following regs are needed.

The problem comes where you have a store that uses 2 or more hard regs
but one or more of those hardregs is unused.

In a forwards scan, ALL of the set regs will interfere with anything
live until the last set reg goes dead.  In a backwards scan, the unused
hard regs never cause interferences.
global/reload wants these interferences.

This is, of course, one of the reasons that backward scanning the proper
way to build an interference graph.  But something in global or reload
cannot handle the truth.

There are a lot of ways to handle this problem:
1) We could do a pass that breaks multiword sets into individual regs if
some of those regs are dead.  I guess the downside of this is that such
insns may not match some patterns anymore.



 


May be it is right thing to do in long perspective but I think it is
too complicated to implement it working.

   


2) We could turn off local.  I was planning on testing this anyway
because i want to see if local, at this point, is just making global do
a bad job.   However, my hope is that global or the new allocator from
vlad is smart enough to properly handle the case where some parts of a
multiword set are dead.


 


The local has very important part update_equiv_regs.  Without it you
will have a serious performance degradation.

   


I understand that, but the actual local assignment is the part that gets
in the way of both this and the rest of allocation.  I was going to
leave that part and just turn off the local assignment.

 


As for IRA I started work on using df-infrastructure for it.  I am not
going to use UREC or LIVE at least at first time.  I'll use LR as it
was in IRA before the df-infrastructure.  IRA also uses forward scan
for building conflicts.  After making df-infrastructure working in
IRA, I should think about using LIVE or backward scan but right now I
am not sure that will give an improvement worth to use it.

   


The reason that i was doing this now was because i thought we might get
some gain from it and that it is nonorthogonal to what you were doing
with IRA.  I would actually assume that you could just drop this code
in.  This was what we talked about doing at the bad Indian restaurant 
at the summit.


 

Yes, Ken. I remember that talk.  Probably I was not clear.  I meant that 
we could use LR instead of  UREC or LIVE again.  I introduced usage of 
accurate live analysis (analog of UREC/LIVE).  It gave 0.5% 
improvement on SPEC95 but creates a lot of problems. I should 
acknowledge that probably the introducing accurate live analysis was 
my mistake.


I found that we need LIVE now because it is used in some optimizations 
like initialization of uninitialized regs.  So just getting rid off only 
UREC will be good too.  It might give some gain.


In any case IRA can not use UREC because UREC is needed before IRA 
calculates reg class info and the reg class info is needed for 
calculation of UREC.  If you manage to use LIVE instead of UREC, it 
would permit to use LIVE also in IRA instead of LR.  But I can not say 
can we use LIVE instead of UREC because I don't know the 
df-infrastructure well yet.




Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Kenneth Zadeck
Vladimir N. Makarov wrote:
 Kenneth Zadeck wrote:

 Vladimir N. Makarov wrote:
  

 Kenneth Zadeck wrote:

   
 it looks like the backwards scan is not getting enough interferences
 to make reload/global happy.

 the case comes about because of way local_alloc is preassigning
 regs for
 pseudos that would map into more than 1 hardreg.

 pseudo's are as wide as they need to be.  When local_alloc assigns one
 of these to a hard reg, it assigns it to the first hardreg needed and
 the mode is used to indicate how many of the following regs are
 needed.

 The problem comes where you have a store that uses 2 or more hard regs
 but one or more of those hardregs is unused.

 In a forwards scan, ALL of the set regs will interfere with anything
 live until the last set reg goes dead.  In a backwards scan, the
 unused
 hard regs never cause interferences.
 global/reload wants these interferences.

 This is, of course, one of the reasons that backward scanning the
 proper
 way to build an interference graph.  But something in global or reload
 cannot handle the truth.

 There are a lot of ways to handle this problem:
 1) We could do a pass that breaks multiword sets into individual
 regs if
 some of those regs are dead.  I guess the downside of this is that
 such
 insns may not match some patterns anymore.



 
 May be it is right thing to do in long perspective but I think it is
 too complicated to implement it working.

   
 2) We could turn off local.  I was planning on testing this anyway
 because i want to see if local, at this point, is just making
 global do
 a bad job.   However, my hope is that global or the new allocator from
 vlad is smart enough to properly handle the case where some parts of a
 multiword set are dead.


 
 The local has very important part update_equiv_regs.  Without it you
 will have a serious performance degradation.

   
 I understand that, but the actual local assignment is the part that gets
 in the way of both this and the rest of allocation.  I was going to
 leave that part and just turn off the local assignment.

  

 As for IRA I started work on using df-infrastructure for it.  I am not
 going to use UREC or LIVE at least at first time.  I'll use LR as it
 was in IRA before the df-infrastructure.  IRA also uses forward scan
 for building conflicts.  After making df-infrastructure working in
 IRA, I should think about using LIVE or backward scan but right now I
 am not sure that will give an improvement worth to use it.

   
 The reason that i was doing this now was because i thought we might get
 some gain from it and that it is nonorthogonal to what you were doing
 with IRA.  I would actually assume that you could just drop this code
 in.  This was what we talked about doing at the bad Indian restaurant
 at the summit.

  

 Yes, Ken. I remember that talk.  Probably I was not clear.  I meant
 that we could use LR instead of  UREC or LIVE again.  I introduced
 usage of accurate live analysis (analog of UREC/LIVE).  It gave 0.5%
 improvement on SPEC95 but creates a lot of problems. I should
 acknowledge that probably the introducing accurate live analysis was
 my mistake.

 I found that we need LIVE now because it is used in some optimizations
 like initialization of uninitialized regs.  So just getting rid off
 only UREC will be good too.  It might give some gain.

 In any case IRA can not use UREC because UREC is needed before IRA
 calculates reg class info and the reg class info is needed for
 calculation of UREC.  If you manage to use LIVE instead of UREC, it
 would permit to use LIVE also in IRA instead of LR.  But I can not say
 can we use LIVE instead of UREC because I don't know the
 df-infrastructure well yet.

we should talk.  I am avail today.  i am leaving on vacation tomorrow
for a week.

Even if this patch does not get in this round, you should consider it as
a starting point for building the interference graph for ira.  

it does not use urec and a big part of the patch is just getting rid of
urec,  It does a backwards scan using the live at bottom set as the
starting point for the scan.
This is the most accurate you can get so there really is no reason not
to use it since it is also no more expensive than any weaker technique. 

The biggest difference is what is done with the early clobbers.  The
biggest thing that i objected to with the make accurate live analysis
was it marking the early clobber as being live from the beginning of the
block.   This patch just adds interferences from the early clobber
output to the inputs that die within the insn and could be in the same
class.

Kenny



Re: ICE on valid code, cse related

2007-08-17 Thread Rask Ingemann Lambertsen
On Wed, Aug 01, 2007 at 08:53:53PM +0530, Pranav Bhandarkar wrote:
  internal compiler error: RTL check: expected code 'const_double' and
 mode 'VOID', have code 'const_double' and mode 'SF' in plus_constant,
 at explow.c:103
[snip] 
 Regret the rather verbose post.

   It is not verbose enough. Please post a testcase.

-- 
Rask Ingemann lambertsen


Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Andrew MacLeod
On Fri, 2007-08-17 at 12:01 -0400, Kenneth Zadeck wrote:

  In any case IRA can not use UREC because UREC is needed before IRA
  calculates reg class info and the reg class info is needed for
  calculation of UREC.  If you manage to use LIVE instead of UREC, it
  would permit to use LIVE also in IRA instead of LR.  But I can not say
  can we use LIVE instead of UREC because I don't know the
  df-infrastructure well yet.
 
 we should talk.  I am avail today.  i am leaving on vacation tomorrow
 for a week.
 
 Even if this patch does not get in this round, you should consider it as
 a starting point for building the interference graph for ira.  
 
 it does not use urec and a big part of the patch is just getting rid of
 urec,  It does a backwards scan using the live at bottom set as the
 starting point for the scan.
 This is the most accurate you can get so there really is no reason not
 to use it since it is also no more expensive than any weaker technique. 

It is the standard way of doing things. Out-Of-SSA has always used live
range info from the bottom up for its conflict graph. I'm marginally
suprised it is calculated any other way...

Andrew



Re: ICE on valid code, cse related

2007-08-17 Thread 'Rask Ingemann Lambertsen'
On Thu, Aug 09, 2007 at 01:32:02PM +0100, Dave Korn wrote:
 On 09 August 2007 13:25, Rask Ingemann Lambertsen wrote:
 
 All examples so far have had CONST_DOUBLE in the REG_EQUAL note.
 
   Yes, and?  I don't see what you're getting at here.

   Not necessarily a whole lot, but it's the only thing to look for
without a testcase and CONST_DOUBLE handling was broken in the past,
which resulted in the RTL checks that are now being tripped again.
 
 If you look at the ia16 back end I posted, you'll notice that it only
  implements movXX for modes of 16 bits or less and AFAIK does not suffer from
  the CSE bug.
 
   It maybe latent for other reasons, or you may not have triggered it yet, but
 I wonder what kind of REG_EQUAL notes do you get when you start passing 32-
 (or even 64-) bit values around in 16-bit registers?

   Pretty difficult to say without a test case, isn't it? The only mention
of any such thing is gcc.c-torture/execute/2717-2.c[1], but that was in
the GCC 3.3 days. These days, the tree optimizers have already optimized the
testcase away before RTL generation happens.

   What happened to the experiments you described at
URL:http://gcc.gnu.org/ml/gcc/2004-06/msg01178.html? Emitting a no-op move
of the (set (reg) (reg)) form won't work, but maybe something like

(insn (use (reg) (expr_list:REG_EQUAL ...)))

would work?

[1] http://gcc.gnu.org/ml/gcc/2003-04/msg01397.html

-- 
Rask Ingemann Lambertsen


Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Kenneth Zadeck
Andrew MacLeod wrote:
 On Fri, 2007-08-17 at 12:01 -0400, Kenneth Zadeck wrote:

   
 In any case IRA can not use UREC because UREC is needed before IRA
 calculates reg class info and the reg class info is needed for
 calculation of UREC.  If you manage to use LIVE instead of UREC, it
 would permit to use LIVE also in IRA instead of LR.  But I can not say
 can we use LIVE instead of UREC because I don't know the
 df-infrastructure well yet.

   
 we should talk.  I am avail today.  i am leaving on vacation tomorrow
 for a week.

 Even if this patch does not get in this round, you should consider it as
 a starting point for building the interference graph for ira.  

 it does not use urec and a big part of the patch is just getting rid of
 urec,  It does a backwards scan using the live at bottom set as the
 starting point for the scan.
 This is the most accurate you can get so there really is no reason not
 to use it since it is also no more expensive than any weaker technique. 
 

 It is the standard way of doing things. Out-Of-SSA has always used live
 range info from the bottom up for its conflict graph. I'm marginally
 suprised it is calculated any other way...

 Andrew

   
this is gcc, get a life. 

bottom up is the way i was taught when i was a small child playing with
compilers with training wheels. 

Gcc always seemed weird because you need reg_dead and reg_unused notes. 
Note that my patch does not use reg_dead or unused notes.

kenny


RE: ICE on valid code, cse related

2007-08-17 Thread Dave Korn
On 17 August 2007 17:02, 'Rask Ingemann Lambertsen' wrote:

 
What happened to the experiments you described at
 URL:http://gcc.gnu.org/ml/gcc/2004-06/msg01178.html? Emitting a no-op move
 of the (set (reg) (reg)) form won't work, but maybe something like
 
 (insn (use (reg) (expr_list:REG_EQUAL ...)))
 
 would work?

  Hard to remember all that far back, but off the top of my head I think I did
indeed discover that emitting the no-op move didn't help, couldn't figure out
why nor what to try instead, and let it drop because I had other pressures on
my working hours and implementing movdi was a good enough workaround for my
purposes at the time.  Maybe I'll get a chance to give it another go, this
time with your suggestion, because I'm sure the compiler does generate
incorrect RTL in this case and it would be worth trying to correct it and see
what difference that makes.


cheers,
  DaveK
-- 
Can't think of a witty .sigline today



Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Kenneth Zadeck
Seongbae Park (???, ???) wrote:
 On 8/17/07, Kenneth Zadeck [EMAIL PROTECTED] wrote:
 ...
   
 we should talk.  I am avail today.  i am leaving on vacation tomorrow
 for a week.
 

 Please send me the patch before you leave (and please leave valinor
 turned on) - I'll give a look while you're gone.
   
Valinor will stay on. the patch was in the first posting.

I am testing it now with local_alloc turned off.

kenny


Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Peter Bergner
On Fri, 2007-08-17 at 09:32 -0400, Kenneth Zadeck wrote:
 The problem comes where you have a store that uses 2 or more hard regs
 but one or more of those hardregs is unused.
 
 In a forwards scan, ALL of the set regs will interfere with anything
 live until the last set reg goes dead.  In a backwards scan, the unused
 hard regs never cause interferences.
 global/reload wants these interferences.

Can you cut/paste the problematic RTL here?  I'm having a hard time
seeing what your problem is since store's (excluding store with update
insns) don't have any set regs, so we shouldn't get any inferences for
store insns.



 2) We could turn off local.  I was planning on testing this anyway
 because i want to see if local, at this point, is just making global do
 a bad job.   However, my hope is that global or the new allocator from
 vlad is smart enough to properly handle the case where some parts of a
 multiword set are dead. 

Offline, I gave Kenny a patch to disable local_alloc.  I'm appending it
here for posterity.

Peter


Index: opts.c
===
--- opts.c  (revision 127398)
+++ opts.c  (working copy)
@@ -895,6 +895,8 @@ decode_options (unsigned int argc, const
   set_param_value (min-crossjump-insns, 1);
 }
 
+  flag_local_alloc = 1;
+
   /* Initialize whether `char' is signed.  */
   flag_signed_char = DEFAULT_SIGNED_CHAR;
   /* Set this to a special uninitialized value.  The actual default
is set
Index: local-alloc.c
===
--- local-alloc.c   (revision 127398)
+++ local-alloc.c   (working copy)
@@ -363,6 +363,9 @@ local_alloc (void)
  registers.  */
   update_equiv_regs ();
 
+  if (! flag_local_alloc)
+return recorded_label_ref;
+
   /* This sets the maximum number of quantities we can have.  Quantity
  numbers start at zero and we can have one for each pseudo.  */
   max_qty = (max_regno - FIRST_PSEUDO_REGISTER);
Index: common.opt
===
--- common.opt  (revision 127398)
+++ common.opt  (working copy)
@@ -628,6 +628,10 @@ fleading-underscore
 Common Report Var(flag_leading_underscore) Init(-1)
 Give external symbols a leading underscore
 
+flocal-alloc
+Common Report Var(flag_local_alloc)
+Perform local register allocation
+
 floop-optimize
 Common
 Does nothing.  Preserved for backward compatibility.




Re: i seem to have hit a problem with my new conflict finder.

2007-08-17 Thread Vladimir N. Makarov

Kenneth Zadeck wrote:


Vladimir N. Makarov wrote:
 


Kenneth Zadeck wrote:

   


Vladimir N. Makarov wrote:


 


Kenneth Zadeck wrote:

 
   


it looks like the backwards scan is not getting enough interferences
to make reload/global happy.

the case comes about because of way local_alloc is preassigning
regs for
pseudos that would map into more than 1 hardreg.

pseudo's are as wide as they need to be.  When local_alloc assigns one
of these to a hard reg, it assigns it to the first hardreg needed and
the mode is used to indicate how many of the following regs are
needed.

The problem comes where you have a store that uses 2 or more hard regs
but one or more of those hardregs is unused.

In a forwards scan, ALL of the set regs will interfere with anything
live until the last set reg goes dead.  In a backwards scan, the
unused
hard regs never cause interferences.
global/reload wants these interferences.

This is, of course, one of the reasons that backward scanning the
proper
way to build an interference graph.  But something in global or reload
cannot handle the truth.

There are a lot of ways to handle this problem:
1) We could do a pass that breaks multiword sets into individual
regs if
some of those regs are dead.  I guess the downside of this is that
such
insns may not match some patterns anymore.



   
 


May be it is right thing to do in long perspective but I think it is
too complicated to implement it working.

 
   


2) We could turn off local.  I was planning on testing this anyway
because i want to see if local, at this point, is just making
global do
a bad job.   However, my hope is that global or the new allocator from
vlad is smart enough to properly handle the case where some parts of a
multiword set are dead.


   
 


The local has very important part update_equiv_regs.  Without it you
will have a serious performance degradation.

 
   


I understand that, but the actual local assignment is the part that gets
in the way of both this and the rest of allocation.  I was going to
leave that part and just turn off the local assignment.



 


As for IRA I started work on using df-infrastructure for it.  I am not
going to use UREC or LIVE at least at first time.  I'll use LR as it
was in IRA before the df-infrastructure.  IRA also uses forward scan
for building conflicts.  After making df-infrastructure working in
IRA, I should think about using LIVE or backward scan but right now I
am not sure that will give an improvement worth to use it.

 
   


The reason that i was doing this now was because i thought we might get
some gain from it and that it is nonorthogonal to what you were doing
with IRA.  I would actually assume that you could just drop this code
in.  This was what we talked about doing at the bad Indian restaurant
at the summit.



 


Yes, Ken. I remember that talk.  Probably I was not clear.  I meant
that we could use LR instead of  UREC or LIVE again.  I introduced
usage of accurate live analysis (analog of UREC/LIVE).  It gave 0.5%
improvement on SPEC95 but creates a lot of problems. I should
acknowledge that probably the introducing accurate live analysis was
my mistake.

I found that we need LIVE now because it is used in some optimizations
like initialization of uninitialized regs.  So just getting rid off
only UREC will be good too.  It might give some gain.

In any case IRA can not use UREC because UREC is needed before IRA
calculates reg class info and the reg class info is needed for
calculation of UREC.  If you manage to use LIVE instead of UREC, it
would permit to use LIVE also in IRA instead of LR.  But I can not say
can we use LIVE instead of UREC because I don't know the
df-infrastructure well yet.

   


we should talk.  I am avail today.  i am leaving on vacation tomorrow
for a week.

 

I am on vacation next week too. I'll be back Aug 29.  We could talk at 
the end of August.



Even if this patch does not get in this round, you should consider it as
a starting point for building the interference graph for ira.  

 

Yes, As I wrote I'll look at this when ira with the df-infrastracture 
will start to work.  Backward scan usage could be the next step.



it does not use urec and a big part of the patch is just getting rid of
urec,  It does a backwards scan using the live at bottom set as the
starting point for the scan.
This is the most accurate you can get so there really is no reason not
to use it since it is also no more expensive than any weaker technique. 

 

Yes I know that the bottom up scan is used in all compiler books because 
you don't need notes like REG_DEAD.  What gcc does is very unusual.  
Although I don't see a big difference between forward and backward scan 
if there are notes.  It would be nice to remove the notes at all but it 
is more complicated than just removing it in building conflict graph 
because it is used in the reload too.



The biggest difference is what is done with the early 

Why is building a cross compiler out-of-the-box always broken?

2007-08-17 Thread Stephen M. Kenton

Hello all,

Several years ago in the gcc 3.3 time frame I looked into building cross 
compilers using the current versions of gcc, glibc etc. for a number of 
different systems.  I quickly found that it was a quagmire.  I inquired 
of this list at that time and was told that the glibc hack was 
problematic and that things would not be fixed in gcc 3.4 but might get 
better by gcc 3.5 (which eventually became gcc 4.0).  I worked around my 
need at that time and went on to other things.  Recently out of 
curiosity I dug out the problem and took another look.  Except for the 
fact that the Linux kernel build system now supports headers_install to 
provide a reliable set of sanitized header, not much seems to have 
changed.  I realize that there are various solutions for specific 
platforms.  Dan Kegel's excellent crosstool and the cross-lfs website, 
for example, are testaments to the people who have labored to circumvent 
this problem.  However, the question remains, why is the problem still 
there to be circumvented?  Is there some secret opposition to easy use 
of these tools, is there some law of nature that prevents them from 
building, is there some good technical reason that is hard to implement, 
or has it just not been a big enough pain for anyone to beat it into 
submission?  As it stands currently, it looks like gcc needs both the 
kernel (for unwind support) and glibc  (for generic C reasons) headers 
*for the target* to build  a cross compiler for that target, but glibc 
needs a functioning cross compiler for that target before it will even 
configure so you can try to make install-headers.  Mean while, back at 
the ranch, the inhibit_libc hack does not seem to be implemented 
everywhere needed for a successful build and the gcc configure seems to 
have a curious need for the --with-newlib  flag to really mean we want 
inhibit_libc as well as handling with_sysroot and with_headers rather 
differently. (See the fragment below from gcc 4.2.1) As an aside, I 
suspect that there are subtle assumptions that the build/host glibc 
headers are the same as the target glibc headers in some respects.  Way 
back, I was trying to cross compile on Solaris using a complete self 
hosting gnu tool chain and I saw some very strange failure.  In the 
current experiment I am using a more-or-less up to date Linux system, 
but if/when building a cross compiler works I could resurrect the 
Solaris test environment to check for portability issues of that type.  
For now I'm just looking at current Linux build/host/targets.


So, my open questions to the list are, what is/should be the preferred 
way to bootstrap a cross compiler/glibc environment?
What needed to be done to get there from here?  Does the inhibit_libc 
hack need to be extended, ripped out and replaced, or just better 
documented?  I will follow this discussion on the gcc mailing list 
archive since I'm not subscribed, but I'm willing to test stuff if 
anyone wants me to.  Or, if it really does work currently and I'm just 
an idiot, could some kind soul hit me with a clue-bat and point me to a 
descriptions of the solution.


# inhibit_libc

# If this is using newlib, without having the headers available now,
# then define inhibit_libc in LIBGCC2_CFLAGS.
# This prevents libgcc2 from containing any code which requires libc
# support.
inhibit_libc=false
if { { test x$host != x$target  test x$with_sysroot = x ; } ||
  test x$with_newlib = xyes ; } 
{ test x$with_headers = x || test x$with_headers = xno ; } ; then
  inhibit_libc=true
fi

Thanks - Steve


Re: Why is building a cross compiler out-of-the-box always broken?

2007-08-17 Thread Andrew Pinski
On 8/17/07, Stephen M. Kenton [EMAIL PROTECTED] wrote:

Cross compiling works for me out of the box if done correctly.  Yes I
have to compile GCC and glibc (or newlib) twice but I don't care as it
is all scripted.

Thanks,
Andrew Pinski


Re: Why is building a cross compiler out-of-the-box always broken?

2007-08-17 Thread David Daney

Stephen M. Kenton wrote:

Hello all,


.
.
.
 I realize that there are various solutions for specific 
platforms.  Dan Kegel's excellent crosstool and the cross-lfs website, 


.
.
.


So, my open questions to the list are, what is/should be the preferred 
way to bootstrap a cross compiler/glibc environment?


Don't bootstrap.

Use one of Kegal's crosstool or the cross-lfs instructions exactly once.

Then keep a good build of glibc around for future build cycles.

That way you never bootstrap.  You just build a cross compiler in the 
standard manner, which *always* works.


David Daney


Re: Why is building a cross compiler out-of-the-box always broken?

2007-08-17 Thread Ian Lance Taylor
Stephen M. Kenton [EMAIL PROTECTED] writes:

 However, the question
 remains, why is the problem still there to be circumvented?  Is there
 some secret opposition to easy use of these tools, is there some law
 of nature that prevents them from building, is there some good
 technical reason that is hard to implement, or has it just not been a
 big enough pain for anyone to beat it into submission?

The central problem is that gcc, binutils, glibc, and the kernel are
all separate projects which are distributed and maintained separately
by different people.  Thus there are mismatches and confusions and
difficulties which result from the different release cycles and
different agendas.

Thus there is a place in the ecosystem for people to write the scripts
needed to smooth over those differences.  And indeed that ecosystem is
filled by tools like crosstool and buildtool.

This is certainly not ideal.  But the organizational differences make
it quite difficult to fix in any other way.

Ian


Re: Why is building a cross compiler out-of-the-box always broken?

2007-08-17 Thread Stephen M. Kenton

Andrew Pinski wrote:

On 8/17/07, Stephen M. Kenton [EMAIL PROTECTED] wrote:

Cross compiling works for me out of the box if done correctly.  Yes I
have to compile GCC and glibc (or newlib) twice but I don't care as it
is all scripted.

Thanks,
Andrew Pinski
  
Great! Scripting is wonderful and I don't object to multiple cycles 
either. Care to hit me with a clue-bat and post your script so I can 
find what I did wrong?  It sound's like other people have 
out-of-the-box problems too. I'll patch my scripts and turn them loose 
on ~20 tool chain builds.


Steve


Re: STL vector::resize

2007-08-17 Thread Jonathan Wakely
John L. Kulp wrote:
 Shouldn't the last (optional) argument be (1) const and (2) a reference
 (rather than a potentially very expensive copying call-by-value)?  Among
 other things, if you have a type declared with alignment attributes, it
 will fail on this.  I notice the MSVC implementation has (1) but not
 (2).  I can't see any code that would depend on the value being copied.

The standard specifies the signature. Making it const doesn't change
the signature, so that's conforming, but doesn't avoid the copy.
Making it a reference would be non-conforming.

If copy constructions are very expensive then maybe storing the types
in std::vector directly isn't a good idea. You could store them by
(smart) pointer instead, or just use capacity and push_back instead of
resize. Calling resize(n) could result in n copy constructions, so one
more for the parameter isn't going to matter in many cases.

If you remain unconvinced you might want to take the thread to
[EMAIL PROTECTED] rather than this list, but I'm certain noone
will change that signature while the standard says it passes by value.

Jon


gcc-4.3-20070817 is now available

2007-08-17 Thread gccadmin
Snapshot gcc-4.3-20070817 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/4.3-20070817/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.3 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/trunk revision 127603

You'll find:

gcc-4.3-20070817.tar.bz2  Complete GCC (includes all of below)

gcc-core-4.3-20070817.tar.bz2 C front end and core compiler

gcc-ada-4.3-20070817.tar.bz2  Ada front end and runtime

gcc-fortran-4.3-20070817.tar.bz2  Fortran front end and runtime

gcc-g++-4.3-20070817.tar.bz2  C++ front end and runtime

gcc-java-4.3-20070817.tar.bz2 Java front end and runtime

gcc-objc-4.3-20070817.tar.bz2 Objective-C front end and runtime

gcc-testsuite-4.3-20070817.tar.bz2The GCC testsuite

Diffs from 4.3-20070810 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.3
link is updated and a message is sent to the gcc list.  Please do not use
a snapshot before it has been announced that way.


gcc.dg/sms-antideps.c fails on IA64 (modulo scheduling problem)

2007-08-17 Thread Steve Ellcey
I noticed that gcc.dg/sms-antideps.c is failing on my IA64 Linux and
HP-UX platforms.  The failure is:

x.c: In function 'foo':
x.c:25: internal compiler error: in gen_sub2_insn, at optabs.c:4640
Please submit a full bug report,
with preprocessed source if appropriate.
See URL:http://gcc.gnu.org/bugs.html for instructions.

When I enter gen_sub2_insn the operands I have are:

(reg:DI 332 ar.lc) and (const_int 0 [0x0])

It is generate_prolog_epilog (called by sms_schedule) in modulo-sched.c
that is trying to generate this subtract.  First off:  why am I
subracting zero?  Shouldn't generate_prolog_epilog skip the subtraction
if last_stage is zero?

I wind up dying because count_reg in this case is ar.lc (application
register, loop counter) and this register on the IA64 does not allow the
subtraction operation on it.  All I can do with this register is to do a
move into it to initialize it and then use and decrement it in counted
loops (the doloop_end insn).  How do I explain to the modulo scheduler
that it cannot do this optimization?  Not doing the subtract when
last_stage is zero might make this one test case work but it would leave
open the larger problem of possibly generating a subtract instruction on
a register (count_reg) that does not allow that operation.

Ideas or advise (or patches)?

Steve Ellcey
[EMAIL PROTECTED]


Re: gcc.dg/sms-antideps.c fails on IA64 (modulo scheduling problem)

2007-08-17 Thread Ian Lance Taylor
Steve Ellcey [EMAIL PROTECTED] writes:

 I noticed that gcc.dg/sms-antideps.c is failing on my IA64 Linux and
 HP-UX platforms.  The failure is:
 
 x.c: In function 'foo':
 x.c:25: internal compiler error: in gen_sub2_insn, at optabs.c:4640
 Please submit a full bug report,
 with preprocessed source if appropriate.
 See URL:http://gcc.gnu.org/bugs.html for instructions.
 
 When I enter gen_sub2_insn the operands I have are:
 
   (reg:DI 332 ar.lc) and (const_int 0 [0x0])
 
 It is generate_prolog_epilog (called by sms_schedule) in modulo-sched.c
 that is trying to generate this subtract.  First off:  why am I
 subracting zero?  Shouldn't generate_prolog_epilog skip the subtraction
 if last_stage is zero?
 
 I wind up dying because count_reg in this case is ar.lc (application
 register, loop counter) and this register on the IA64 does not allow the
 subtraction operation on it.  All I can do with this register is to do a
 move into it to initialize it and then use and decrement it in counted
 loops (the doloop_end insn).  How do I explain to the modulo scheduler
 that it cannot do this optimization?  Not doing the subtract when
 last_stage is zero might make this one test case work but it would leave
 open the larger problem of possibly generating a subtract instruction on
 a register (count_reg) that does not allow that operation.

I think the modulo scheduler code is making some bad assumptions about
the doloop pattern.  The doloop insn is permitted to be special, and
the register it uses is permitted to be special.

Ian


Re: gcc.dg/sms-antideps.c fails on IA64 (modulo scheduling problem)

2007-08-17 Thread Revital1 Eres


[EMAIL PROTECTED] wrote on 18/08/2007 03:19:48:

 I noticed that gcc.dg/sms-antideps.c is failing on my IA64 Linux and
 HP-UX platforms.  The failure is:

 x.c: In function 'foo':
 x.c:25: internal compiler error: in gen_sub2_insn, at optabs.c:4640
 Please submit a full bug report,
 with preprocessed source if appropriate.
 See URL:http://gcc.gnu.org/bugs.html for instructions.

 When I enter gen_sub2_insn the operands I have are:

(reg:DI 332 ar.lc) and (const_int 0 [0x0])


Andrey already brought that problem to our attention; please see -
http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01010.html; It will be
addressed in the next patch.

Thank,
Revital





[Bug fortran/33095] New: MAX with optional arguments gives run-time error

2007-08-17 Thread burnus at gcc dot gnu dot org
This is a fallout from PR31198.

Using
   a = MAX(1,2, a1, a2)
where a1 and a2 are optional arguments: If both a1 and a2 are not present,
gfortran gives a bogus run-time error message:

Fortran runtime error: Second argument of 'max' intrinsic should be present

Looking at the dump, gfortran optimized the second argument away:

  MAX(2,a1,a2)

if a1 is now not present ...

Fortran 2003:
13.7.71 MAX (A1, A2 [, A3, ...])
13.7.76 MIN (A1, A2 [, A3, ...])
Fortran 95:
13.14.64 MAX (A1, A2 [, A3, ...])
13.14.69 MIN (A1, A2 [, A3, ...])
See also:
http://groups.google.com/group/comp.lang.fortran/msg/be6db97903228689

Test case (from c.l.f):

  PROGRAM testoptarg
PRINT *, m1(3,4)
PRINT *, m1(3)
PRINT *, m1() ! gives the run-time error
  CONTAINS
INTEGER FUNCTION m1(a1,a2)
  INTEGER, OPTIONAL, INTENT(IN) :: a1,a2
  m1 = max(1, 2, a1, a2)
END FUNCTION m1
  END PROGRAM testoptarg


-- 
   Summary: MAX with optional arguments gives run-time error
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Keywords: rejects-valid
  Severity: normal
  Priority: P3
 Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: burnus at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33095



[Bug middle-end/32970] [4.3 Regression] C++ frontend can not handle vector pointer constant parameter

2007-08-17 Thread bje at gcc dot gnu dot org


--- Comment #9 from bje at gcc dot gnu dot org  2007-08-17 06:49 ---
Fixed in r127578.


-- 

bje at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32970



[Bug rtl-optimization/11832] Optimization of common code in switch statements

2007-08-17 Thread aldot at gcc dot gnu dot org


-- 

aldot at gcc dot gnu dot org changed:

   What|Removed |Added

 AssignedTo|unassigned at gcc dot gnu   |aldot at gcc dot gnu dot org
   |dot org |
 Status|NEW |ASSIGNED
   Last reconfirmed|2005-12-07 04:15:54 |2007-08-17 07:17:48
   date||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11832



[Bug c/33096] New: Internal compiler error with register global variables

2007-08-17 Thread slava at factorcode dot org
Compile the following program with -O3 on FreeBSD or Linux, x86:

///

#include stdlib.h
#include string.h

register long foo asm(esi);
register long bar asm(edi);

char * crash_me_baby(char *str) {
char *path = malloc(1024 + strlen(str));
return path;
}

///

This results in an error like the following:

test.c:10: error: unable to find a register to spill in class 'DIREG'
test.c:10: error: this is the insn:
(insn:HI 16 83 17 2 (parallel [
(set (reg:SI 2 cx [66])
(unspec:SI [
(mem:BLK (reg/v/f:SI 63 [ suffix ]) [0 A8])
(reg:QI 0 ax [70])
(const_int 1 [0x1])
(reg:SI 2 cx [69])
] 20))
(use (reg:SI 19 dirflag))
(clobber (reg/f:SI 68 [ suffix ]))
(clobber (reg:CC 17 flags))
]) 530 {*strlenqi_1} (insn_list:REG_DEP_TRUE 6 (insn_list:REG_DEP_TRUE
12 (insn_list:REG_DEP_TRUE 14 (insn_list:REG_DEP_TRUE 15 (nil)
(expr_list:REG_DEAD (reg:SI 19 dirflag)
(expr_list:REG_DEAD (reg:SI 2 cx [69])
(expr_list:REG_DEAD (reg:QI 0 ax [70])
(expr_list:REG_UNUSED (reg:CC 17 flags)
(expr_list:REG_UNUSED (reg/f:SI 68 [ suffix ])
(expr_list:REG_EQUAL (unspec:SI [
(mem:BLK (reg/v/f:SI 63 [ suffix ]) [0 A8])
(reg:QI 0 ax [70])
(const_int 1 [0x1])
(reg:SI 2 cx [69])
] 20)
(nil


-- 
   Summary: Internal compiler error with register global variables
   Product: gcc
   Version: 4.2.1
Status: UNCONFIRMED
  Severity: major
  Priority: P3
 Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: slava at factorcode dot org
 GCC build triplet: i386-unknown-freebsd6.2
  GCC host triplet: i386-unknown-freebsd6.2
GCC target triplet: i386-unknown-freebsd6.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33096



[Bug c/33096] Internal compiler error with register global variables

2007-08-17 Thread slava at factorcode dot org


--- Comment #1 from slava at factorcode dot org  2007-08-17 07:56 ---
Created an attachment (id=14068)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14068action=view)
Test case

This is a test case for the bug. Compile with -O1, -O2 or -O3 to trigger it.

With -O0, it compiles fine.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33096



[Bug fortran/31298] F2003: use mod, operator(+) = operator(.userOp.) not supported

2007-08-17 Thread burnus at gcc dot gnu dot org


--- Comment #10 from burnus at gcc dot gnu dot org  2007-08-17 08:14 ---
Rejecting operator(.procedure.) has been fixed by PR33072.
Accepting multiple renames/imports of an operator (operator(.op.),
operator(.myop.)=operator(.op.)) is fixed by the submitted patch
http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01081.html

Remains to be done:
Supporting operator(+)=operator(.myPlusOp.), which can be based on the
attachment 13369 and the submitted patch.


-- 

burnus at gcc dot gnu dot org changed:

   What|Removed |Added

   Keywords|wrong-code  |rejects-valid
Summary|Uninitialized variable in   |F2003: use mod, operator(+)
   |f951 (in read_module) / |= operator(.userOp.) not
   |renaming operator in USE|supported
   Target Milestone|--- |4.3.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31298



[Bug tree-optimization/23330] FIXME from passes.c: pass_may_alias should be a TODO item

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #2 from pinskia at gcc dot gnu dot org  2007-08-17 09:15 ---
Fixed by:
2007-08-14  Daniel Berlin  [EMAIL PROTECTED]

* tree-pass.h (PROP_pta): Removed.
(TODO_rebuild_alias): New.
(pass_may_alias): Removed.
* tree-ssa-ccp.c (execute_fold_all_builtins): Only rebuild
aliasing if we changed something.
* tree-ssa-alias.c (compute_may_aliases): Make non-static.  Update
SSA internally.
(pass_may_alias): Removed.
(create_structure_vars): Return TODO_rebuild_alias.
* tree-ssa-pre.c (do_pre): Return TODO_rebuild_alias.
* tree-sra.c (tree_sra): Only rebuild aliasing if something
changed.
(tree_sra_early): We never affect aliasing right now.
* tree-flow.h (compute_may_aliases): New prototype.
* passes.c: Remove pass_may_alias from the passes.
(execute_function_todo): Support TODO_rebuild_alias.


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED
   Target Milestone|--- |4.3.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23330



[Bug middle-end/19430] V_MAY_DEF (taking address of var) causes missing uninitialized warning

2007-08-17 Thread manu at gcc dot gnu dot org


--- Comment #15 from manu at gcc dot gnu dot org  2007-08-17 09:17 ---
This seems to me a duplicate of PR179. I am going to add a dependency to
remember to check this PR when PR179 gets fixed.


-- 

manu at gcc dot gnu dot org changed:

   What|Removed |Added

  BugsThisDependsOn||179


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19430



[Bug c++/31751] [4.1/4.2 regression] ICE with forgotten member declaration

2007-08-17 Thread pcarlini at suse dot de


--- Comment #3 from pcarlini at suse dot de  2007-08-17 09:23 ---
Hi Volker. I will be away for some days on vacations... In the meanwhile, if
you could double check that we really want the fix for 27211 (not a regression)
on the branches and, in case, take care of the backport, it would be great.
Thanks in advance.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31751



[Bug libstdc++/33084] Small typo in valarray header

2007-08-17 Thread paolo at gcc dot gnu dot org


--- Comment #2 from paolo at gcc dot gnu dot org  2007-08-17 09:27 ---
Subject: Bug 33084

Author: paolo
Date: Fri Aug 17 09:27:06 2007
New Revision: 127579

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127579
Log:
2007-08-17  Johannes Willkomm  [EMAIL PROTECTED]

PR libstdc++/33084
* include/std/valarray (operator _Op(const _Tp,
const valarray)): Fix typo.
* testsuite/26_numerics/numeric_arrays/valarray/33084.cc: New.

Added:
trunk/libstdc++-v3/testsuite/26_numerics/numeric_arrays/valarray/33084.cc
Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/include/std/valarray


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33084



[Bug middle-end/33088] [4.1/4.2/4.3 Regression] spurious exceptions with -ffloat-store

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #1 from pinskia at gcc dot gnu dot org  2007-08-17 09:27 ---
For one, I don't think  __real__ X = R; __imag__ X = C;  is really nice
looking.  Now if the person did:
 *(double*) X = R; ((double*)  X)[1] = C; 

it might be a different story but then again X is still defined piece wise so
you will still get NaN.

I really don't think this is a bug as we have an uninitialized variables here
in the same way doing:
short a;
a = b0xff|a;
a = (b8)0xFF00|a;

Would be defined code.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33088



[Bug libstdc++/33084] Small typo in valarray header

2007-08-17 Thread paolo at gcc dot gnu dot org


--- Comment #3 from paolo at gcc dot gnu dot org  2007-08-17 09:28 ---
Subject: Bug 33084

Author: paolo
Date: Fri Aug 17 09:28:09 2007
New Revision: 127580

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127580
Log:
2007-08-17  Johannes Willkomm  [EMAIL PROTECTED]

PR libstdc++/33084
* include/std/valarray (operator _Op(const _Tp,
const valarray)): Fix typo.
* testsuite/26_numerics/numeric_arrays/valarray/33084.cc: New.

Added:
   
branches/gcc-4_2-branch/libstdc++-v3/testsuite/26_numerics/valarray/33084.cc
Modified:
branches/gcc-4_2-branch/libstdc++-v3/ChangeLog
branches/gcc-4_2-branch/libstdc++-v3/include/std/std_valarray.h


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33084



[Bug c++/33094] [4.2/4.3 Regression] ICE on valid C++ virtual template static member in anonymous namespace

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #1 from pinskia at gcc dot gnu dot org  2007-08-17 09:29 ---
  /* An in-class declaration of a static data member should be
 external; it is only a declaration, and not a definition.  */
  if (init == NULL_TREE)
gcc_assert (DECL_EXTERNAL (decl));


Confirmed.


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever Confirmed|0   |1
   Keywords||ice-on-valid-code
   Last reconfirmed|-00-00 00:00:00 |2007-08-17 09:29:10
   date||
Summary|ICE on valid C++ virtual|[4.2/4.3 Regression] ICE on
   |template static member in   |valid C++ virtual template
   |namespace   |static member in anonymous
   ||namespace
   Target Milestone|--- |4.2.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33094



[Bug rtl-optimization/11001] global register %edi versus string builtins

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #11 from pinskia at gcc dot gnu dot org  2007-08-17 09:03 
---
*** Bug 33096 has been marked as a duplicate of this bug. ***


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||slava at factorcode dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11001



[Bug target/33096] Internal compiler error with register global variables

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #2 from pinskia at gcc dot gnu dot org  2007-08-17 09:03 ---


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


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
  Component|c   |target
 Resolution||DUPLICATE


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33096



[Bug c++/32870] Unclear error message when declaring struct in wrong namespace

2007-08-17 Thread paolo at gcc dot gnu dot org


--- Comment #2 from paolo at gcc dot gnu dot org  2007-08-17 09:35 ---
Subject: Bug 32870

Author: paolo
Date: Fri Aug 17 09:35:23 2007
New Revision: 127581

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127581
Log:
/cp
2007-08-17  Paolo Carlini  [EMAIL PROTECTED]

PR c++/32870
* parser.c (cp_parser_class_head): Improve error message.

/testsuite
2007-08-17  Paolo Carlini  [EMAIL PROTECTED]

PR c++/32870
* g++.dg/other/error17.C: Adjust.

Added:
trunk/gcc/testsuite/g++.dg/other/error17.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/parser.c
trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32870



[Bug c++/32870] Unclear error message when declaring struct in wrong namespace

2007-08-17 Thread pcarlini at suse dot de


--- Comment #3 from pcarlini at suse dot de  2007-08-17 09:36 ---
Fixed.


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

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


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32870



[Bug libstdc++/33084] Small typo in valarray header

2007-08-17 Thread pcarlini at suse dot de


--- Comment #4 from pcarlini at suse dot de  2007-08-17 09:30 ---
Fixed for 4.2.2.


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

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


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33084



[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments

2007-08-17 Thread manu at gcc dot gnu dot org


--- Comment #4 from manu at gcc dot gnu dot org  2007-08-17 10:15 ---
(In reply to comment #3)
 
 void use(const int *a)
 {
   int *b = (int*)a;

Andrew, you are right. I tend to forget how fragile is 'const', even in C++.
So, then this is invalid and thus it is PR10138.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread pcarlini at suse dot de


--- Comment #5 from pcarlini at suse dot de  2007-08-17 10:22 ---
This is now fixed both in mainline and in 4_2-branch:

32190.C: In function 'int main()':
32190.C:5: error: template argument 1 is invalid

at this point, not being a regression, I think we can close it.


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

  Known to work||4.2.1 4.3.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread manu at gcc dot gnu dot org


--- Comment #6 from manu at gcc dot gnu dot org  2007-08-17 10:24 ---
(In reply to comment #5)
 This is now fixed both in mainline and in 4_2-branch:
 
 32190.C: In function 'int main()':
 32190.C:5: error: template argument 1 is invalid
 
 at this point, not being a regression, I think we can close it.
 

Is there a testcase for this? If not, perhaps we can close this *after* the
testcase is added.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread pcarlini at suse dot de


--- Comment #7 from pcarlini at suse dot de  2007-08-17 10:26 ---
Sure, I'll take care of that...


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread manu at gcc dot gnu dot org


--- Comment #8 from manu at gcc dot gnu dot org  2007-08-17 10:28 ---
Ivan, would you like to write, test and post the testcase? Once it is approved
I can commit it for you (with your name of course!).
A starting point will be http://gcc.gnu.org/wiki/HowToPrepareATestcase, if you
need further help, please contact me.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread igodard at pacbell dot net


--- Comment #9 from igodard at pacbell dot net  2007-08-17 10:37 ---
Subject: Re:  wrong error recovery on parsing template arguments

Begging your pardon, but what's wrong with the one I put in already?

Ivan

manu at gcc dot gnu dot org wrote:
 --- Comment #8 from manu at gcc dot gnu dot org  2007-08-17 10:28 ---
 Ivan, would you like to write, test and post the testcase? Once it is approved
 I can commit it for you (with your name of course!).
 A starting point will be http://gcc.gnu.org/wiki/HowToPrepareATestcase, if you
 need further help, please contact me.


   


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



[Bug middle-end/33088] [4.1/4.2/4.3 Regression] spurious exceptions with -ffloat-store

2007-08-17 Thread joseph at codesourcery dot com


--- Comment #2 from joseph at codesourcery dot com  2007-08-17 10:37 ---
Subject: Re:  [4.1/4.2/4.3 Regression] spurious exceptions
 with -ffloat-store

On Fri, 17 Aug 2007, pinskia at gcc dot gnu dot org wrote:

 For one, I don't think  __real__ X = R; __imag__ X = C;  is really nice
 looking.  Now if the person did:
  *(double*) X = R; ((double*)  X)[1] = C; 
 
 it might be a different story but then again X is still defined piece wise so
 you will still get NaN.

I think setting parts is cleaner than using casts like that, and safer 
(because of not involving arithmetic that GCC's liable to get wrong in 
cases involving -0) than R + C * I.

 I really don't think this is a bug as we have an uninitialized variables here
 in the same way doing:
 short a;
 a = b0xff|a;
 a = (b8)0xFF00|a;
 
 Would be defined code.

I think setting the parts is valid GNU C (ISO C doesn't have the __real__ 
and __imag__ operators), and should be considered much like initializing a 
struct by parts, where it would definitely be incorrect to generate an 
exception from an uninitialized part.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33088



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread manu at gcc dot gnu dot org


--- Comment #10 from manu at gcc dot gnu dot org  2007-08-17 10:50 ---
(In reply to comment #9)
 Subject: Re:  wrong error recovery on parsing template arguments
 
 Begging your pardon, but what's wrong with the one I put in already?
 

Nothing is wrong, but to be useful for GCC testsuite, we need to add some
markers (for example, // { dg-error template argument 1 is invalid }) and
then run an old version and check that the test fails and run it for mainline
and check that the test passes. Then the patch adding the testcase is submitted
to gcc-patches for review with an appropriate changelog, approved and
committed. I think it would be a feasible contribution from you, letting more
advance developers like Paolo to focus on more complex stuff.

But if you don't want to do it just say so, no problem at all.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



[Bug fortran/33095] MAX with optional arguments gives run-time error

2007-08-17 Thread fxcoudert at gcc dot gnu dot org


--- Comment #1 from fxcoudert at gcc dot gnu dot org  2007-08-17 11:24 
---
Oh, sh**, I didn't think about simplification. Well, I don't see an easy way to
have error messages at runtime, so we should simply skip those. We won't have
any diagnostic, but no compiler that I know of does it, but we will be
accepting valid code, so it's a no-brainer. I'll work on that.

PS: I'm not sure it's a 4.3 regression, but it probably is (I can't test right
now).


-- 

fxcoudert at gcc dot gnu dot org changed:

   What|Removed |Added

 AssignedTo|unassigned at gcc dot gnu   |fxcoudert at gcc dot gnu dot
   |dot org |org
 Status|UNCONFIRMED |ASSIGNED
 Ever Confirmed|0   |1
  Known to fail||4.3.0
   Last reconfirmed|-00-00 00:00:00 |2007-08-17 11:24:13
   date||
   Target Milestone|--- |4.3.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33095



[Bug other/33087] Add dependency information to object files and make use of it

2007-08-17 Thread raselmsh at hotmail dot com


--- Comment #4 from raselmsh at hotmail dot com  2007-08-17 12:04 ---
I took a look at ccache again, and it is definitely not what I was thinking of.
 ccache is more aimed at accelerating multiple full compile rounds of the same
package, whereas I was thinking of improving dependency handling in makefiles
in order to simplify them - the same problem that 'gcc -M' solves, but to my
mind a more elegant solution.  Although ccache can do this, I think it is
rather clumsy for the job, just as I wouldn't use it as a substitute for 'gcc
-M'.

On the other hand, I can live with the fact that you don't agree about the need
for this :)  If I had time (and you were interested), I would take a look at
doing it myself, but unfortunately I don't...


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33087



[Bug fortran/33097] New: Invalid decl trees are created for external intrinsics

2007-08-17 Thread asl at math dot spbu dot ru
Recently I discovered, that gfortran FE creates invalid decl trees for exteranl
intrinsics: only return value is added to arg chain, and none of the actual
arguments. This can potentially break much stuff, because of inconsistency of
CALL_EXPR and corresponding fndecl.

This was due to the following TODO in gfc_get_symbol_for_expr():
/* TODO: proper argument lists for external intrinsics.  */


-- 
   Summary: Invalid decl trees are created for external intrinsics
   Product: gcc
   Version: 4.2.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: asl at math dot spbu dot ru


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33097



[Bug fortran/33097] Invalid decl trees are created for external intrinsics

2007-08-17 Thread asl at math dot spbu dot ru


--- Comment #1 from asl at math dot spbu dot ru  2007-08-17 12:42 ---
Created an attachment (id=14069)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14069action=view)
Quick and dirty patch

Attached is quick and dirty patch to populate symbol with arguments. It seems
to be incomplete (at least for optional args, as it seems to me), and maybe
invalid in general (I touched gfortran FE yesterday for the first time).


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33097



[Bug rtl-optimization/32300] [4.3 Regression] ICE with -O2 -fsee

2007-08-17 Thread wouter dot vermaelen at scarlet dot be


--- Comment #9 from wouter dot vermaelen at scarlet dot be  2007-08-17 
12:44 ---
Here is a simpler testcase:

int f(int i) { return 100LL / (1 + i); }


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32300



[Bug fortran/33097] Invalid decl trees are created for external intrinsics

2007-08-17 Thread asl at math dot spbu dot ru


--- Comment #2 from asl at math dot spbu dot ru  2007-08-17 12:49 ---
Quick example of the problem:

function_decl 0x4bf6d00 _gfortran_matmul_r4
type function_type 0x52495a0
 type void_type 0x4419840 void VOID
 align 8 symtab 6 alias set -1
 LLVM:  void
 pointer_to_this pointer_type 0x44198a0
 QI
 size integer_cst 0x441247c constant invariant 8
 unit size integer_cst 0x4412498 constant invariant 1
 align 8 symtab 0 alias set -1
 arg-types tree_list 0x524d63c value reference_type 0x5249540
 chain tree_list 0x524d658 value void_type 0x4419840 void
 pointer_to_this pointer_type 0x5249600
addressable public external asm-frame-size 0 QI file rnflow.f90 line 2723
chain function_decl 0x4bf6c00 dgetri

Note, we have only 1 arg for matmul_r4 and it's return value actually. And such
decl is attached to CALL_EXPR, which has 3 arguments to provide for callee :)

The gcf_show_symbol() returns (no formal args, as expected):

   symbol _gfortran_matmul_r4 (REAL 4)(PROCEDURE UNKNOWN-INTENT
UNKNOWN-ACCESS INTRINSIC-PROC DIMENSION EXTERNAL FUNCTION)
   Array spec:(2 AS_ASSUMED_SHAPE () () () () )
   result: _gfortran_matmul_r4


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33097



[Bug rtl-optimization/32300] [4.3 Regression] ICE with -O2 -fsee

2007-08-17 Thread zadeck at naturalbridge dot com


--- Comment #10 from zadeck at naturalbridge dot com  2007-08-17 12:48 
---
Subject: Re:  [4.3 Regression] ICE with -O2 -fsee

wouter dot vermaelen at scarlet dot be wrote:
 --- Comment #9 from wouter dot vermaelen at scarlet dot be  2007-08-17 
 12:44 ---
 Here is a simpler testcase:

 int f(int i) { return 100LL / (1 + i); }


   
thanks,

everyone knows what the problems with see.c are, it is simply a matter
of having the authors fix their code.  Virtually anything that invokes
this pass will cause it to fail.

kenny


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32300



[Bug libfortran/33079] Optional empty strings do not appear to be 'PRESENT'

2007-08-17 Thread fxcoudert at gcc dot gnu dot org


--- Comment #5 from fxcoudert at gcc dot gnu dot org  2007-08-17 13:09 
---
Subject: Bug 33079

Author: fxcoudert
Date: Fri Aug 17 13:09:23 2007
New Revision: 127584

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127584
Log:
PR fortran/33079

* intrinsics/string_intrinsics.c (string_trim, string_minmax): Fix
the zero-length result case.

* gfortran.dg/zero_length_2.f90: New test.

Added:
trunk/gcc/testsuite/gfortran.dg/zero_length_2.f90
Modified:
trunk/gcc/testsuite/ChangeLog
trunk/libgfortran/ChangeLog
trunk/libgfortran/intrinsics/string_intrinsics.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33079



[Bug libfortran/33079] Optional empty strings do not appear to be 'PRESENT'

2007-08-17 Thread fxcoudert at gcc dot gnu dot org


--- Comment #6 from fxcoudert at gcc dot gnu dot org  2007-08-17 13:10 
---
Fixed.


-- 

fxcoudert at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution||FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33079



[Bug fortran/33095] MAX with optional arguments gives run-time error

2007-08-17 Thread burnus at gcc dot gnu dot org


--- Comment #2 from burnus at gcc dot gnu dot org  2007-08-17 13:21 ---
 Oh, sh**, I didn't think about simplification.
 Well, I don't see an easy way to
 have error messages at runtime, so we should simply skip those.

Good idea. As long as the compiler does the right thing (TM) we don't need
run-time errors. Otherwise they make mostly sense with some -f*check-* option.

 PS: I'm not sure it's a 4.3 regression, but it probably is (I can't test right
 now).
I don't think so. The message was introduced with PR31198 and older versions
did probably the same as gfortran 4.2: It crashes if any of the optional
arguments is not present (NULL pointers).


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33095



[Bug c++/33094] [4.2/4.3 Regression] ICE on valid C++ virtual template static member in anonymous namespace

2007-08-17 Thread ian at airs dot com


--- Comment #2 from ian at airs dot com  2007-08-17 14:31 ---
This patch fixes the problem and passes the g++ testsuite.

Index: cp/decl.c
===
--- cp/decl.c   (revision 127491)
+++ cp/decl.c   (working copy)
@@ -4963,7 +4963,7 @@ make_rtl_for_nonlocal_decl (tree decl, t
   gcc_assert (TREE_STATIC (decl));
   /* An in-class declaration of a static data member should be
 external; it is only a declaration, and not a definition.  */
-  if (init == NULL_TREE)
+  if (init == NULL_TREE  DECL_INITIAL (decl) == NULL_TREE)
gcc_assert (DECL_EXTERNAL (decl));
 }



-- 

ian at airs dot com changed:

   What|Removed |Added

   Target Milestone|4.2.2   |---


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33094



[Bug fortran/31298] F2003: use mod, operator(+) = operator(.userOp.) not supported

2007-08-17 Thread patchapp at dberlin dot org


--- Comment #11 from patchapp at dberlin dot org  2007-08-17 15:10 ---
Subject: Bug number PR31298

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is
http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01081.html


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31298



[Bug fortran/32875] Not Implemented: complex character array constructor

2007-08-17 Thread patchapp at dberlin dot org


--- Comment #4 from patchapp at dberlin dot org  2007-08-17 15:10 ---
Subject: Bug number PR32875

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is
http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01077.html


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32875



[Bug c++/29077] Incorrect error message for destructor in wrong namespace

2007-08-17 Thread pcarlini at suse dot de


--- Comment #6 from pcarlini at suse dot de  2007-08-17 15:30 ---
I guess we can indeed close this one as fixed in mainline...


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

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


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29077



[Bug c++/28107] Incomplete type in struct added to global namespace

2007-08-17 Thread pcarlini at suse dot de


--- Comment #2 from pcarlini at suse dot de  2007-08-17 15:37 ---
FWIW, Comeau gives very similar errors:

ComeauTest.c, line 3: error: incomplete type is not allowed
  union B b;
  ^

ComeauTest.c, line 6: error: tag kind of class or struct is incompatible with
  declaration of union B (declared at line 3)
  struct B; 
 ^


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28107



[Bug libstdc++/33098] New: __is_convertible_helper in tr1_impl/type_traits uses deprecated add_reference

2007-08-17 Thread chris dot fairles at gmail dot com
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc/configure CC=gcc43 CXX=g++43 --program-suffix=43
--disable-multilib --enable-languages=c,c++
Thread model: posix
gcc version 4.3.0 20070816 (experimental)

The following code:
#include type_traits

int main() {
bool b = std::is_convertibleint*,int*::value;
}

when compiled with:
g++43 -std=c++0x test.cpp -o test

Gives:
include/c++/4.3.0/type_traits: In instantiation of ‘const bool
std::__is_convertible_helperint*, int*, false::__value’:
include/c++/4.3.0/type_traits:258:   instantiated from
‘std::is_convertibleint*, int*’
test.cpp:5:   instantiated from here
include/c++/4.3.0/type_traits:243: error: invalid use of incomplete type
‘struct std::add_referenceint*’
include/c++/4.3.0/tr1_impl/type_traitsfwd.h:157: error: declaration of ‘struct
std::add_referenceint*’
include/c++/4.3.0/type_traits: In instantiation of ‘std::is_convertibleint*,
int*’:
test.cpp:5:   instantiated from here
include/c++/4.3.0/type_traits:258: error: ‘std::__is_convertible_helperint*,
int*, false::__value’ is not a valid template argument for type ‘bool’ because
it is a non-constant expression
test.cpp: In function ‘int main()’:
test.cpp:5: error: ‘value’ is not a member of ‘std::is_convertibleint*, int*’

Besauce the following structure uses deprecated add_reference.

 templatetypename _From, typename _To,
   bool = (is_void_From::value || is_void_To::value
   || is_function_To::value || is_array_To::value
   // This special case is here only to avoid warnings.
   || (is_floating_pointtypename
   remove_reference_From::type::value
__is_int_or_cref_To::__value))
struct __is_convertible_helper
{
  // An imaginary lvalue of type From
  static const bool __value = (__is_convertible_simpletypename
   add_reference_From::type, _To::__value);
};

FIX:
change add_reference to add_lvalue_reference (see attached patch)


-- 
   Summary: __is_convertible_helper in tr1_impl/type_traits uses
deprecated add_reference
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: chris dot fairles at gmail dot com
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33098



[Bug libstdc++/33098] __is_convertible_helper in tr1_impl/type_traits uses deprecated add_reference

2007-08-17 Thread chris dot fairles at gmail dot com


--- Comment #1 from chris dot fairles at gmail dot com  2007-08-17 15:48 
---
Created an attachment (id=14070)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14070action=view)
patch to fix compile error when using pointers with is_convertible


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33098



[Bug libstdc++/33098] __is_convertible_helper in tr1_impl/type_traits uses deprecated add_reference

2007-08-17 Thread chris dot fairles at gmail dot com


--- Comment #2 from chris dot fairles at gmail dot com  2007-08-17 15:48 
---
Created an attachment (id=14071)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14071action=view)
test case that gives compile error


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33098



[Bug fortran/32881] PURE attribute escapes from contained procedure

2007-08-17 Thread patchapp at dberlin dot org


--- Comment #5 from patchapp at dberlin dot org  2007-08-17 15:10 ---
Subject: Bug number PR32881

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is
http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01078.html


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32881



[Bug c++/18207] misleading diagnostic for ill-formed implicitly-defined default constructor

2007-08-17 Thread pcarlini at suse dot de


--- Comment #2 from pcarlini at suse dot de  2007-08-17 16:15 ---
This is fixed in the active branches. Now the diagnostic is:

18207.C: In constructor 's::s()':
18207.C:8: error: no matching function for call to 'm::m()'
18207.C:4: note: candidates are: m::m(const m)
18207.C: In constructor 's1::s1()':
18207.C:15: note: synthesized method 's::s()' first required here


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

 Status|NEW |RESOLVED
  Known to work||4.1.2 4.2.1 4.3.0
 Resolution||WORKSFORME


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18207



[Bug libstdc++/33098] [c++0x] __is_convertible_helper in type_traits uses deprecated add_reference

2007-08-17 Thread paolo at gcc dot gnu dot org


--- Comment #4 from paolo at gcc dot gnu dot org  2007-08-17 16:39 ---
Subject: Bug 33098

Author: paolo
Date: Fri Aug 17 16:39:10 2007
New Revision: 127588

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127588
Log:
2007-08-17  Chris Fairles  [EMAIL PROTECTED]

PR libstdc++/33098
* include/std/type_traits (__is_convertible_helper):
Use add_lvalue_reference.

Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/include/std/type_traits


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33098



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread igodard at pacbell dot net


--- Comment #11 from igodard at pacbell dot net  2007-08-17 17:25 ---
Subject: Re:  wrong error recovery on parsing template arguments

Seems impractical. I don't have access to the old versions or mainline, 
and don't know what magic to put in the source for your system to use. 
I'm sure all that could be fixed, but it's more likely to take more of 
someone's time holding my hand than it would be to do it themselves. If 
I were doing a hundred of them it would be worth the investment, but for 
a one-off it seems hardly useful.

Ivan

manu at gcc dot gnu dot org wrote:
 --- Comment #10 from manu at gcc dot gnu dot org  2007-08-17 10:50 ---
 (In reply to comment #9)
   
 Subject: Re:  wrong error recovery on parsing template arguments

 Begging your pardon, but what's wrong with the one I put in already?

 

 Nothing is wrong, but to be useful for GCC testsuite, we need to add some
 markers (for example, // { dg-error template argument 1 is invalid }) and
 then run an old version and check that the test fails and run it for mainline
 and check that the test passes. Then the patch adding the testcase is 
 submitted
 to gcc-patches for review with an appropriate changelog, approved and
 committed. I think it would be a feasible contribution from you, letting more
 advance developers like Paolo to focus on more complex stuff.

 But if you don't want to do it just say so, no problem at all.


   


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



[Bug c++/33094] [4.2/4.3 Regression] ICE on valid C++ virtual template static member in anonymous namespace

2007-08-17 Thread pinskia at gcc dot gnu dot org


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||pinskia at gcc dot gnu dot
   ||org
   Target Milestone|--- |4.2.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33094



[Bug libstdc++/33098] [c++0x] __is_convertible_helper in type_traits uses deprecated add_reference

2007-08-17 Thread pcarlini at suse dot de


--- Comment #3 from pcarlini at suse dot de  2007-08-17 16:31 ---
Yes, let's patch-up this, but really I have to finish the builtin, this is only
temporary.


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

 AssignedTo|unassigned at gcc dot gnu   |pcarlini at suse dot de
   |dot org |
 Status|UNCONFIRMED |ASSIGNED
 Ever Confirmed|0   |1
   Last reconfirmed|-00-00 00:00:00 |2007-08-17 16:31:46
   date||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33098



[Bug libstdc++/33098] [c++0x] __is_convertible_helper in type_traits uses deprecated add_reference

2007-08-17 Thread pcarlini at suse dot de


--- Comment #5 from pcarlini at suse dot de  2007-08-17 16:40 ---
Fixed.


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

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


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33098



[Bug testsuite/31884] priority_queue_dijkstra.cc operates on deallocated memory

2007-08-17 Thread drow at gcc dot gnu dot org


--- Comment #2 from drow at gcc dot gnu dot org  2007-08-17 17:24 ---
Subject: Bug 31884

Author: drow
Date: Fri Aug 17 17:24:22 2007
New Revision: 127590

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127590
Log:
PR testsuite/31884
* testsuite/ext/pb_ds/example/priority_queue_dijkstra.cc (main): Do
not access deleted nodes.

* testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc,
testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc,
testsuite/27_io/basic_filebuf/open/char/4.cc,
testsuite/27_io/objects/char/9.cc: Use dg-require-fileio.
* testsuite/ext/forced_exception_error/cons_virtual_derivation.cc,
testsuite/ext/pb_ds/regression/hash_data_map_rand.cc,
testsuite/ext/pb_ds/regression/trie_data_map_rand.cc,
testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc,
testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc,
testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc,
testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc,
testsuite/ext/pb_ds/regression/priority_queue_rand.cc,
testsuite/ext/pb_ds/regression/tree_data_map_rand.cc,
testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc,
testsuite/ext/throw_allocator/deallocate_global.cc,
testsuite/ext/throw_allocator/check_delete.cc,
testsuite/ext/throw_allocator/check_allocate_max_size.cc,
testsuite/ext/throw_allocator/check_deallocate_null.cc,
testsuite/ext/throw_allocator/check_new.cc,
testsuite/ext/throw_allocator/deallocate_local.cc,
   
testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/gen1.cc,
   
testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/gen1.cc,
   
testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/gen1.cc,
   
testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/gen1.cc,
testsuite/23_containers/list/modifiers/insert/25288.cc: Use
dg-require-time.

Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
   
trunk/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
   
trunk/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
trunk/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/4.cc
trunk/libstdc++-v3/testsuite/27_io/objects/char/9.cc
   
trunk/libstdc++-v3/testsuite/ext/forced_exception_error/cons_virtual_derivation.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_dijkstra.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_data_map_rand.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/hash_no_data_map_rand.cc
   
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_data_map_rand.cc
   
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_no_data_map_rand.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_data_map_rand.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_data_map_rand.cc
trunk/libstdc++-v3/testsuite/ext/pb_ds/regression/trie_no_data_map_rand.cc
trunk/libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc
trunk/libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc
trunk/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc
trunk/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc
trunk/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc
trunk/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc
   
trunk/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/gen1.cc
   
trunk/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/gen1.cc
   
trunk/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/gen1.cc
   
trunk/libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/gen1.cc


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31884



[Bug c++/14283] Diagnostic for invalid template-id could be improved

2007-08-17 Thread pcarlini at suse dot de


--- Comment #12 from pcarlini at suse dot de  2007-08-17 18:09 ---
Hi Giovanni, any update on this?


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

 CC||pcarlini at suse dot de


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14283



[Bug target/31385] gcc fails to find spill register for decimal arithmetic

2007-08-17 Thread janis at gcc dot gnu dot org


--- Comment #1 from janis at gcc dot gnu dot org  2007-08-17 18:21 ---
Current mainline (revision 127590) still gets this ICE for i686-pc-linux-gnu
with either bid or dpd decimal float support.  The current line number for the
ICE is reload1.c:2001.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31385



[Bug tree-optimization/33099] New: Scalar evolutions confusing VRP with pointer values that wrap around

2007-08-17 Thread dnovillo at gcc dot gnu dot org
The following test case is miscompiled with GCC 4.2:

extern void abort (void);

volatile int N = 5;

void foo (void)
{
  int i;
  char *p, value[10];

  value[0] = 0x42;
  for (i = 0; i  N; i++)
if (i  0)
  {
p = (char *)i - 1;
*(value + (int) p) = (char) i;
  }

  if (value[0] != 1)
abort ();
}

main()
{
  foo ();
  return 0;
}

$ gcc --version
gcc (GCC) 4.2.2 20070816 (prerelease)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc -O2 -o a a.c
$ ./a
Aborted (core dumped)

This was originally a C++ program which I converted into this C snippet from
GIMPLE.  I believe it's valid C, but I am not actually sure.  The original C++
code *is* valid, though.

The problem here starts in tree-vrp.c:adjust_range_with_scev() when we ask for
the scalar evolution of p_8 in the loop

L0:;
  i_24 = ASSERT_EXPR i_1, i_1  N.1_6;
  if (i_24  0) goto L1; else goto L7;
[ ... ]
L1:;
  i_4 = ASSERT_EXPR i_24, i_24  0;
  i.0_7 = (char *) i_4;
  p_8 = i.0_7 - 1B;

[...]

L2:;
  i_11 = i_24 + 1;
  # i_1 = PHI 0(2), i_11(5);
L3:;
  if (i_1  N.1_6) goto L0; else goto L4;

The call to analyze_scalar_evolution(loop, p_8) returns the chrec {-1B, +, 1B}
which is more or less understandable because the initial value i.0_7 can be
traced all the way back to the start of the loop to 0.

However:

1- SCEV has not realized that there is an ASSERT_EXPR in the path.  The initial
value of i.0_7 is actually 1, not 0.

2- When VRP sees the chrec {-1B, +, 1B} it asks whether it may wrap.  Since we
assumes that pointers never wrap, scev_probably_wraps_p returns false.  Which
is understandable, I guess, but in this case we get burnt by the logic that
follows in adjust_range_with_scev:

  * Since the range we have is VARYING, we take the initial value of the given
chrec and set it as the min value for the range.  So, the minimum value for the
new range is set to -1B.

  * Since the scalar evolution goes forward, we set the maximum value to the
max value for the type (upper_bound_in_type).  Which also happens to be -1B.

  * So, we end up with the range [-1B, -1B] which we later propagate into the
pointer dereference, causing the failure.

This problem does not happen in mainline because of the PTR_PLUS_EXPR cleanup.
Pointer arithmetic uses unsigned types and all this is avoided.

I think that the core problem is that we are tripping over the fact that while
we don't consider pointers to wrap, the instantiation of the chrec is giving
wrapped-around pointer values.  This confuses VRP.

So far, I see the following options for fixing this:

1- Teach SCEV that subtracting pointer values from 0 yields an unkown
chrec.  Similarly, adding to upper_bound_in_type will yield an unkown
chrec.  What's the wording in the standard wrt pointer arithmetic?  Is
the following undefined, implementation defined, or valid?

char *p = 0;
--p;
*p = 'x';

2- Teach SCEV about ASSERT_EXPRs when instantiating chrecs.  Would
benefit both mainline and 4.2.  May hide other bugs that occur when
there are no assertions around. But that's unlikely.

3- Tell VRP to refuse to do anything with pointer chrecs that have a constant
initial value.  This may prove suboptimal in some cases where we could've
gotten a good range, but they should be few and far between.

4- In mainline, the representation of pointer arithmetic has been
cleaned up considerably with the PTR_PLUS_EXPR patches.  Bringing those
in to 4.2 is IMO out of the question because of the sheer invasiveness.
But if the problem was widespread enough maybe we could consider it.  I
don't think it is, though.


-- 
   Summary: Scalar evolutions confusing VRP with pointer values that
wrap around
   Product: gcc
   Version: 4.2.2
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dnovillo at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33099



[Bug fortran/20441] -finit-local-zero is missing from gfortran

2007-08-17 Thread patchapp at dberlin dot org


--- Comment #8 from patchapp at dberlin dot org  2007-08-17 20:15 ---
Subject: Bug number PR20441

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is
http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01151.html


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20441



[Bug tree-optimization/33099] [4.2 Regression] Scalar evolutions confusing VRP with pointer values that wrap around

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #1 from pinskia at gcc dot gnu dot org  2007-08-17 20:18 ---
Confirmed (and yes this was fixed by PtrPlus).


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||pinskia at gcc dot gnu dot
   ||org
 Status|UNCONFIRMED |NEW
 Ever Confirmed|0   |1
   Keywords||wrong-code
  Known to fail||4.2.1
  Known to work||4.3.0 4.1.1
   Last reconfirmed|-00-00 00:00:00 |2007-08-17 20:18:57
   date||
Summary|Scalar evolutions confusing |[4.2 Regression] Scalar
   |VRP with pointer values that|evolutions confusing VRP
   |wrap around |with pointer values that
   ||wrap around
   Target Milestone|--- |4.2.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33099



[Bug tree-optimization/33099] [4.2 Regression] Scalar evolutions confusing VRP with pointer values that wrap around

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #2 from pinskia at gcc dot gnu dot org  2007-08-17 20:20 ---
Exposed by:
2006-02-07  Jeff Law  [EMAIL PROTECTED]


Which added VRP after IV-OPTs.


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||law at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33099



[Bug tree-optimization/33099] [4.2 Regression] Scalar evolutions confusing VRP with pointer values that wrap around

2007-08-17 Thread dnovillo at google dot com


--- Comment #3 from dnovillo at google dot com  2007-08-17 20:27 ---
Subject: Re:  [4.2 Regression] Scalar evolutions
 confusing VRP with pointer values that wrap around

On 8/17/07 4:20 PM, pinskia at gcc dot gnu dot org wrote:
 --- Comment #2 from pinskia at gcc dot gnu dot org  2007-08-17 20:20 
 ---
 Exposed by:
 2006-02-07  Jeff Law  [EMAIL PROTECTED]
 
 
 Which added VRP after IV-OPTs.

No, no that is completely unrelated.  This happens in the first VRP
pass.  It's all inside adjust_range_with_scev which specifically calls
scalar evolutions code.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33099



[Bug tree-optimization/33099] [4.2 Regression] Scalar evolutions confusing VRP with pointer values that wrap around

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #4 from pinskia at gcc dot gnu dot org  2007-08-17 20:34 ---
Oh you are correct but this still worked in 4.1.1 though, I have not looked
into what changed between 4.1.1 and 4.2.0 with respect of scev yet.


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 CC|law at gcc dot gnu dot org  |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33099



[Bug tree-optimization/33099] [4.2 Regression] Scalar evolutions confusing VRP with pointer values that wrap around

2007-08-17 Thread dnovillo at google dot com


--- Comment #5 from dnovillo at google dot com  2007-08-17 20:37 ---
Subject: Re:  [4.2 Regression] Scalar evolutions
 confusing VRP with pointer values that wrap around

On 8/17/07 4:34 PM, pinskia at gcc dot gnu dot org wrote:
 --- Comment #4 from pinskia at gcc dot gnu dot org  2007-08-17 20:34 
 ---
 Oh you are correct but this still worked in 4.1.1 though, I have not looked
 into what changed between 4.1.1 and 4.2.0 with respect of scev yet.

Since you are looking, two things to check for: (1) IL representation
for the pointer subtraction, and (2) SCEV may have returned an unknown
chrec back in 4.1.  Or maybe we still didn't consider pointers to not-wrap.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33099



[Bug tree-optimization/33099] [4.2 Regression] Scalar evolutions confusing VRP with pointer values that wrap around

2007-08-17 Thread pinskia at gcc dot gnu dot org


--- Comment #6 from pinskia at gcc dot gnu dot org  2007-08-17 20:42 ---
The IR is the same but scev did something different:
Visiting statement:
p_10 = i.0_9 - 1B;

(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = p_10)
(get_scalar_evolution 
  (scalar = p_10)
  (scalar_evolution = ))
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = i.0_9)
(get_scalar_evolution 
  (scalar = i.0_9)
  (scalar_evolution = {0B, +, 1B}_1))
(set_scalar_evolution 
  (scalar = i.0_9)
  (scalar_evolution = {0B, +, 1B}_1))
)
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = 1B)
(get_scalar_evolution 
  (scalar = 1B)
  (scalar_evolution = 1B))
)
(set_scalar_evolution 
  (scalar = p_10)
  (scalar_evolution = {4294967295B, +, 1B}_1))
)
(instantiate_parameters 
  (loop_nb = 1)
  (chrec = {4294967295B, +, 1B}_1)
  (res = {4294967295B, +, 1B}_1))
Found new range for p_10: VARYING

vs (in 4.2):
 Visiting statement:
i.0_4 = (char *) i_23;

(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = i.0_4)
(get_scalar_evolution 
  (scalar = i.0_4)
  (scalar_evolution = ))
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = i_23)
(get_scalar_evolution 
  (scalar = i_23)
  (scalar_evolution = {0, +, 1}_1))
(set_scalar_evolution 
  (scalar = i_23)
  (scalar_evolution = {0, +, 1}_1))
)
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = i_1)
(get_scalar_evolution 
  (scalar = i_1)
  (scalar_evolution = {0, +, 1}_1))
(set_scalar_evolution 
  (scalar = i_1)
  (scalar_evolution = {0, +, 1}_1))
)
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = N.1_3)
(get_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = ))
(set_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = N.1_3))
)
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = N.1_3)
(get_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = N.1_3))
(set_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = N.1_3))
)
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = N.1_3)
(get_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = N.1_3))
(set_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = N.1_3))
)
(instantiate_parameters 
  (loop_nb = 1)
  (chrec = N.1_3)
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = N.1_3)
(get_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = N.1_3))
(set_scalar_evolution 
  (scalar = N.1_3)
  (scalar_evolution = N.1_3))
)
  (res = scev_not_known))
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = i_8)
(get_scalar_evolution 
  (scalar = i_8)
  (scalar_evolution = ))
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = i_25)
(get_scalar_evolution 
  (scalar = i_25)
  (scalar_evolution = {0, +, 1}_1))
(set_scalar_evolution 
  (scalar = i_25)
  (scalar_evolution = {0, +, 1}_1))
)
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = 1)
(get_scalar_evolution 
  (scalar = 1)
  (scalar_evolution = 1))
)
(set_scalar_evolution 
  (scalar = i_8)
  (scalar_evolution = {1, +, 1}_1))
)
(instantiate_parameters 
  (loop_nb = 1)
  (chrec = {1, +, 1}_1)
  (res = {1, +, 1}_1))
Induction variable (int) 1 + 1 * iteration does not wrap in statement i_8 =
i_25 + 1 in loop 1.
Statement i_8 = i_25 + 1 is executed at most 2147483646 (bounded by 2147483646)
+ 1 times in loop 1.
(analyze_scalar_evolution 
  (loop_nb = 1)
  (scalar = i_25)
(get_scalar_evolution 
  (scalar = i_25)
  (scalar_evolution = {0, +, 1}_1))
(set_scalar_evolution 
  (scalar = i_25)
  (scalar_evolution = {0, +, 1}_1))
)
(instantiate_parameters 
  (loop_nb = 1)
  (chrec = {0, +, 1}_1)
  (res = {0, +, 1}_1))
Induction variable (int) 0 + 1 * iteration does not wrap in statement i_25 =
ASSERT_EXPR i_1, i_1  N.1_3 in loop 1.
Statement i_25 = ASSERT_EXPR i_1, i_1  N.1_3 is executed at most 2147483647
(bounded by 2147483647) + 1 times in loop 1.
(set_scalar_evolution 
  (scalar = i.0_4)
  (scalar_evolution = {0B, +, 1B}_1))
)
(instantiate_parameters 
  (loop_nb = 1)
  (chrec = {0B, +, 1B}_1)
  (res = {0B, +, 1B}_1))
Found new range for i.0_4: [0B, -1B]


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33099



[Bug c/30013] Multiple flaws in decimal floating-point arithmetic conversions fixed

2007-08-17 Thread janis at gcc dot gnu dot org


--- Comment #5 from janis at gcc dot gnu dot org  2007-08-17 20:44 ---
Why use %.9e, %.17e, and %.36Le to write the binary float values to a
string, instead of using lengths of FLT_DIG, DBL_DIG, and LDBL_DIG?  For
i686-linux those are 6, 15, and 18.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30013



[Bug c++/32112] [4.1/4.2/4.3 regression] #'unbound_class_template' not supported by dump_decl#

2007-08-17 Thread paolo at gcc dot gnu dot org


--- Comment #3 from paolo at gcc dot gnu dot org  2007-08-17 20:47 ---
Subject: Bug 32112

Author: paolo
Date: Fri Aug 17 20:46:59 2007
New Revision: 127596

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127596
Log:
/cp
2007-08-17  Paolo Carlini  [EMAIL PROTECTED]

PR c++/32112
* error.c (dump_decl): Deal with UNBOUND_CLASS_TEMPLATE.
* cxx-pretty-print.c (pp_cxx_unqualified_id): Likewise.

/testsuite
2007-08-17  Paolo Carlini  [EMAIL PROTECTED]

PR c++/32112
* g++.dg/template/error26.C: New.

Added:
trunk/gcc/testsuite/g++.dg/template/error26.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/cxx-pretty-print.c
trunk/gcc/cp/error.c
trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32112



[Bug bootstrap/33100] New: on bootstrap getting section .eh_frame: bad cie version 0: offset 0x0

2007-08-17 Thread brett dot albertson at stratech dot com
I now get this during bootstrap on Solaris x86 using the native linker
(/usr/ccs/bin/ld):

ld: fatal: unwind table: file
/u01/var/tmp/gcc_trunk_svn/gcc_20070817/./gcc/amd64/crtend.o: section
.eh_frame: bad cie version 0: offset 0x0

collect2: ld returned 1 exit status
gmake[5]: *** [libgcc_s.so] Error 1
gmake[5]: Leaving directory
`/u01/var/tmp/gcc_trunk_svn/gcc_20070817/i386-pc-solaris2.11/amd64/libgcc'

Let me know if you need more information.  It seems to occur when linking the
64bit libgcc.

Brett Albertson


-- 
   Summary: on bootstrap getting section .eh_frame: bad cie version
0: offset 0x0
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: bootstrap
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: brett dot albertson at stratech dot com
 GCC build triplet: i386-pc-solaris2.11
  GCC host triplet: i386-pc-solaris2.11
GCC target triplet: i386-pc-solaris2.11


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33100



[Bug c++/32190] wrong error recovery on parsing template arguments

2007-08-17 Thread paolo at gcc dot gnu dot org


--- Comment #12 from paolo at gcc dot gnu dot org  2007-08-17 21:31 ---
Subject: Bug 32190

Author: paolo
Date: Fri Aug 17 21:31:40 2007
New Revision: 127597

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=127597
Log:
2007-08-17  Paolo Carlini  [EMAIL PROTECTED]

PR c++/32190
* g++.dg/parse/error31.C: New.

Added:
trunk/gcc/testsuite/g++.dg/parse/error31.C
Modified:
trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32190



  1   2   >