Re: Use of FLAGS_REGNUM clashes with generates insn

2011-09-23 Thread Joern Rennecke

Quoting Paulo J. Matos pa...@matos-sorge.com:


My addition instruction sets all the flags. So I have:


This is annoying, but can be handled.  Been there, done that.
dse.c needs a small patch, which I intend to submit sometime in the future.


And all my (define_insn *mov... are tagged with a (clobber (reg:CC
RCC)). This generates all kinds of trouble since GCC generates moves
internally without the clobber that fail to match.


I don't think that can be overcome without cc0.  Unless you want to
hide your flags register altogether.


Question on _GLIBCXX_HOSTED macro libstdc++ and libsupc++

2011-09-23 Thread Amker.Cheng
Hi,

In libstdc++-v3/libsupc++/eh_term_handler.cc, it says by default the
demangler things are pulled in,
according to whether _GLIBCXX_HOSTED is defined. the demangler
exception terminating handler
are really big, especially for embedded system.

Secondly, _GLIBCXX_HOSTED is now defined if --enable-hosted-libstdcxx
is given(by default it is).
This option also controls whether libstdc++.a itself is built for target system.

So, for an embedded system, how could I provide the earlier silent
death handler by defining _GLIBCXX_HOSTED,
also with libstdc++ built?

Any suggestion? Thanks in advance.
FYI, all above are talking about cross-toolchain.

-- 
Best Regards.


Re: Question on _GLIBCXX_HOSTED macro libstdc++ and libsupc++

2011-09-23 Thread Jonathan Wakely
On 23 September 2011 09:14, Amker.Cheng wrote:
 Hi,

 In libstdc++-v3/libsupc++/eh_term_handler.cc, it says by default the
 demangler things are pulled in,
 according to whether _GLIBCXX_HOSTED is defined. the demangler
 exception terminating handler
 are really big, especially for embedded system.

 Secondly, _GLIBCXX_HOSTED is now defined if --enable-hosted-libstdcxx
 is given(by default it is).
 This option also controls whether libstdc++.a itself is built for target 
 system.

 So, for an embedded system, how could I provide the earlier silent
 death handler by defining _GLIBCXX_HOSTED,
 also with libstdc++ built?

 Any suggestion? Thanks in advance.
 FYI, all above are talking about cross-toolchain.

(Any reason this wasn't sent to the libstdc++ list?)

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43852 proposes a quiet
mode which would reduce code size by disabling some of the code in
eh_term_handler.cc and pure.cc - would that do what you want?

I've not had time to do anything about it, but I think Sebastian
(CC'd) has a copyright assignment in place now, and he's provided a
patch implementing it.


Re: Question on _GLIBCXX_HOSTED macro libstdc++ and libsupc++

2011-09-23 Thread Amker.Cheng
 (Any reason this wasn't sent to the libstdc++ list?)

 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43852 proposes a quiet
 mode which would reduce code size by disabling some of the code in
 eh_term_handler.cc and pure.cc - would that do what you want?

 I've not had time to do anything about it, but I think Sebastian
 (CC'd) has a copyright assignment in place now, and he's provided a
 patch implementing it.

Sorry for missing the list, cced now.

It is exactly what I meant, thanks very much.

-- 
Best Regards.


Re: Volatile qualification on pointer and data

2011-09-23 Thread Paulo J. Matos

On 22/09/11 22:15, Richard Guenther wrote:


Btw, I think this is an old bug that has been resolved.  Did you make sure to
test a recent 4.6 branch snapshot or svn head?



Should have tested git head. Compiling git head now to check the current 
status of this issue.



--
PMatos



Re: Volatile qualification on pointer and data

2011-09-23 Thread Paulo J. Matos

On 23/09/11 12:33, Paulo J. Matos wrote:

On 22/09/11 22:15, Richard Guenther wrote:


Btw, I think this is an old bug that has been resolved. Did you make
sure to
test a recent 4.6 branch snapshot or svn head?



Should have tested git head. Compiling git head now to check the current
status of this issue.




Git head 36181f98f doesn't compile (x86_64, --enable-checking=all, GCC 
4.5.2):
gcc -c   -g -fkeep-inline-functions -DIN_GCC   -W -Wall -Wwrite-strings 
-Wcast-qual -Wstrict-prototypes -Wmissing-prototypes 
-Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros 
-Wno-overlength-strings -Wold-style-definition -Wc++-compat -fno-common 
 -DHAVE_CONFIG_H -I. -I. -I../../../repositories/gcc/gcc 
-I../../../repositories/gcc/gcc/. 
-I../../../repositories/gcc/gcc/../include 
-I../../../repositories/gcc/gcc/../libcpp/include 
-I../../../repositories/gcc/gcc/../libdecnumber 
-I../../../repositories/gcc/gcc/../libdecnumber/bid -I../libdecnumber 
 ../../../repositories/gcc/gcc/fold-const.c -o fold-const.o
../../../repositories/gcc/gcc/fold-const.c: In function 
‘fold_overflow_warning’:
../../../repositories/gcc/gcc/fold-const.c:326:5: warning: format not a 
string literal and no format arguments
../../../repositories/gcc/gcc/fold-const.c: In function 
‘fold_checksum_tree’:
../../../repositories/gcc/gcc/fold-const.c:13803:3: error: invalid 
application of ‘sizeof’ to incomplete type ‘struct tree_type’


--
PMatos



Re: Use of FLAGS_REGNUM clashes with generates insn

2011-09-23 Thread Paulo J. Matos

On 23/09/11 08:21, Joern Rennecke wrote:

Quoting Paulo J. Matos pa...@matos-sorge.com:


My addition instruction sets all the flags. So I have:


This is annoying, but can be handled. Been there, done that.
dse.c needs a small patch, which I intend to submit sometime in the future.



Ok. Actually I was quite happy with my solution too which avoided having 
to change the core. However, it was not heavily tested.



And all my (define_insn *mov... are tagged with a (clobber (reg:CC
RCC)). This generates all kinds of trouble since GCC generates moves
internally without the clobber that fail to match.


I don't think that can be overcome without cc0. Unless you want to
hide your flags register altogether.



That's seriously annoying. The idea was to ditch cc0 and explicitly 
represent CC in a register to perform optimizations like splitting add 
and addc for a double word addition. If by hiding my register flags 
means going back to cc0, then it seems that the only way to go unless I 
get it to work somehow. If you having anything else in mind to get it to 
work let me know.


What I currently have in mind is to have a backend macro listing all the 
move for which a move clobber CC_REG, then whenever GCC generates a 
move, it queries the macro to know if the move requires clobbering and 
emits the clobber if required. However, I am unsure how deep the rabbit 
hole goes.


--
PMatos



Re: RFC: Improving support for known testsuite failures

2011-09-23 Thread Diego Novillo
On Thu, Sep 22, 2011 at 20:06, Hans-Peter Nilsson h...@bitrange.com wrote:
 On Thu, 8 Sep 2011, Diego Novillo wrote:

 On Thu, Sep 8, 2011 at 04:31, Richard Guenther
 richard.guent...@gmail.com wrote:

  I think it would be more useful to have a script parse gcc-testresults@
  postings from the various autotesters and produce a nice webpage
  with revisions and known FAIL/XPASSes for the target triplets that
  are tested.

 Sure, though that describes a different tool.  I'm after a tool that
 will 'exit 0' if the testsuite finished with nominal results.

 Not to stop you from (partly) reinventing the wheel, but that's
 pretty much what contrib/regression/btest-gcc.sh already does,
 though you have to feed it a baseline a set of processed .sum
 files which could (for a calling script or a modified
 btest-gcc.sh) live in, say, contrib/target-results/target.
 It handles duplicate test names by marking it as failing if
 any of them has failed.  Works good enough.

Yeah, I actually considered using it by extracting the actual .sum
file processing out of it (I was not interested in it running the
build nor the tests).

However, I also needed to add support for marking flaky tests and
putting an expiration date on failures.  Additionally, I needed
versioned failure manifests, and I could not justify storing in SVN
multiple directories with 12Mb worth of .sum files in them.

The small manifest file also has the local advantage of serving as
release documentation for what we expect to fail and why.


Diego.


Re: Volatile qualification on pointer and data

2011-09-23 Thread Paulo J. Matos

On 22/09/11 22:15, Richard Guenther wrote:


Btw, I think this is an old bug that has been resolved.  Did you make sure to
test a recent 4.6 branch snapshot or svn head?



My hopes were high but unfortunately it is not fixed yet.
git head 36181f98 still generates the same unexpected code.

Cheers,
--
PMatos



Re: Use of FLAGS_REGNUM clashes with generates insn

2011-09-23 Thread amylaar

Quoting Paulo J. Matos pa...@matos-sorge.com:


That's seriously annoying. The idea was to ditch cc0 and explicitly
represent CC in a register to perform optimizations like splitting add
and addc for a double word addition. If by hiding my register flags
means going back to cc0, then it seems that the only way to go unless I
get it to work somehow. If you having anything else in mind to get it
to work let me know.


Hiding the flags register would mean it is not represented in the rtl at
all.  You can have combined compare-branch instructions.
Of course, going that route would mean that the model you present to
GCC is even further from the hardware than one that uses cc0.


What I currently have in mind is to have a backend macro listing all
the move for which a move clobber CC_REG, then whenever GCC generates a
move, it queries the macro to know if the move requires clobbering and
emits the clobber if required. However, I am unsure how deep the rabbit
hole goes.


Oh, so you do have variants that can do without the clobber.
If you can make all the reloads without introducing explicit flag
clobbers, that it should work.
But you can't just pull a flag clobber out of thin air.  You should
have some way to generate valid code when the flags register is
unavailable / must be saved.  Then you can use peephole2 to add
flag clobbers where the flags register is available.

Or you can use machine_dependent_reorg or another machine-specific pass
inserted with the pass manager to rewrite clobber-free instructions into
ones that have a hardware equivalent; but you must make sure that your
data flow remains sound in the process.


Re: RFC: DWARF Extensions for Separate Debug Info Files (Fission)

2011-09-23 Thread Jan Kratochvil
On Fri, 23 Sep 2011 02:21:44 +0200, Cary Coutant wrote:
 * .debug_pubtypes - Public types for use in building the
   .gdb_index section at link time. This section will have an
   extended format to allow it to represent both types in the
   .debug_dwo_info section and type units in .debug_types.
^^^
= .dwo_info , maybe both .debug_info and .dwo_info


 * .dwo_abbrev - Defines the abbreviation codes used by the
   .debug_dwo_info section.
^^^
= .dwo_info


I find this .dwo_* setup is great for rapid development rebuilds but it should
remain optional as the currently used DWARF final separate .debug info file is
smaller than all the .dwo files together.  In the case of the final linked
.debug builds (rpm/deb/...) one does not consider the build speed as important.
It probably does not make sense to merge + convert .dwo files back to a single
.debug file for the rpm/deb/... build performance reasons.


Thanks,
Jan


Re: Use of FLAGS_REGNUM clashes with generates insn

2011-09-23 Thread Paulo J. Matos
On Fri, 23 Sep 2011 09:30:48 -0400, amylaar wrote:

 Hiding the flags register would mean it is not represented in the rtl at
 all.  You can have combined compare-branch instructions. Of course,
 going that route would mean that the model you present to GCC is even
 further from the hardware than one that uses cc0.


Got it! That seems that it would go against the whole point of replacing 
cc0 for CC_REGNUM in my specific case. Oh well...
 
 What I currently have in mind is to have a backend macro listing all
 the move for which a move clobber CC_REG, then whenever GCC generates a
 move, it queries the macro to know if the move requires clobbering and
 emits the clobber if required. However, I am unsure how deep the rabbit
 hole goes.
 
 Oh, so you do have variants that can do without the clobber. 

Actually I don't... My explanation was supposed to be referring to a 
general solution. In my case, the macro would list all moves since all 
moves clobber CC.

 If you can
 make all the reloads without introducing explicit flag clobbers, that it
 should work.

Unfortunately I can't.

 But you can't just pull a flag clobber out of thin air.  

Understood.

 You should have
 some way to generate valid code when the flags register is unavailable /
 must be saved.  Then you can use peephole2 to add flag clobbers where
 the flags register is available.
 
 Or you can use machine_dependent_reorg or another machine-specific pass
 inserted with the pass manager to rewrite clobber-free instructions into
 ones that have a hardware equivalent; but you must make sure that your
 data flow remains sound in the process.

I think your last suggestion of having a pass to rewrite the clobber free 
instructions into one with a hardware equivalent seems the one to go for 
me. 

Thanks for the suggestions,

-- 
PMatos



misbehaviour with md5_process_bytes and maybe in optimization

2011-09-23 Thread Pierre Vittet
Hello,

I recently asked for some help as I got a problem when using
md5_process_bytes (in libiberty/md5.c):
http://gcc.gnu.org/ml/gcc-help/2011-09/msg00126.html,
http://gcc.gnu.org/ml/gcc-help/2011-09/msg00127.html and it appears that
there is a bug in md5_process_bytes.

The bug can conduct to a miscomputed md5 result.

It tooks time to me to make the bug reproducible but I was finally able
to do so. The fact is that it only appears in very particular situation.
I have written a small gcc plugin, allowing to reproduce it (see
attachment).
The bad news is that the bug only appears when use libiberty compiled in
-g -O0 (it works well with -O2). It is quite sad, because It could means
another bug in an optimization function.

I have attached a README which detail how to use the plugin and how to
explain the bug. I have tried to explain as good as possible (and I
apologize for my very bad english).

The bug appears when:
1) We use libiberty compiled with -O0
2) We first call md5_process_bytes with a less than 64 bits buffer (we
call his size len1).
3) We make a new call of md5_process_bytes with a buffer which has a
size len2 such as:
len2  127 + 65 (so test in line 228 of md5.C will be true)
128 -len1 != Mulint with Mulint %  __alignof__ (md5_uint32) != 0 (so
condition on line 238 is true)
len2 - (128 - len1) = Mul64 and Mul64 such as Mul %64=0 (so the loop of
line 239 is broken with len = 64, this leads to the bug as, line 249,
(len  ~63) = 64 and we shift the buffer without processing the data).


Please, can you reproduce the bug? Is there any useful informations I
can add? Must I contact somebody from libiberty (I don't know the status
of this library (is this part of gcc or from another project?)).

I already sent a patch correcting this issue (it does not correct the
fact that we don't get the bug with an optimised libiberty):
http://gcc.gnu.org/ml/gcc-patches/2011-09/msg01098.html. It has not been
reviewed, could someone reviews this?

Thanks!

Pierre Vittet


md5sum_plugin.tar.gz
Description: application/gzip


Re: misbehaviour with md5_process_bytes and maybe in optimization

2011-09-23 Thread Ian Lance Taylor
Pierre Vittet pier...@pvittet.com writes:

 The bug appears when:
   1) We use libiberty compiled with -O0
   2) We first call md5_process_bytes with a less than 64 bits buffer (we
 call his size len1).
   3) We make a new call of md5_process_bytes with a buffer which has a
 size len2 such as:
   len2  127 + 65 (so test in line 228 of md5.C will be true)
   128 -len1 != Mulint with Mulint %  __alignof__ (md5_uint32) != 0 (so
 condition on line 238 is true)
   len2 - (128 - len1) = Mul64 and Mul64 such as Mul %64=0 (so the loop of
 line 239 is broken with len = 64, this leads to the bug as, line 249,
 (len  ~63) = 64 and we shift the buffer without processing the data).

The line numbers you mention do not correspond to any version of
libiberty/md5.c that I can see.  Can you list the exact line for each
line number you mention, so that your explanation is easier to follow?
Thanks.

Ian


Re: passing arguments to gcc build in eclipse

2011-09-23 Thread pankajsejwal

ok sorrythanks for replying..!!

Andrew Haley wrote:
 
 On 09/16/2011 11:30 AM, pankajsejwal wrote:

 I have build gcc and imported it on eclipse and started to debug it from
 main
 but after a few steps it stops and sends malloc.c not found error and
 asks
 to give a source path to it.
 I believe the problem is because of the arguments that it requires to
 proceed for example filename.c as gcc takes some arguments to work on
 in
 terminal.

 Can someone please tell me the error I am facing and it i am correct can
 u
 tell me how to pass arguments to the built code that it can recognize it
 as
 a .C file.
 
 This is not an appropriate message for gcc@gcc.gnu.org, which is
 only about the development of gcc itself.
 
 Most of us don't use Eclipse.  I think you'd be much better advised
 to direct this to an Eclipse-specific list, where the experts will be.
 
 Andrew.
 
 

-- 
View this message in context: 
http://old.nabble.com/passing-arguments-to-gcc-build-in-eclipse-tp32477948p32503880.html
Sent from the gcc - Dev mailing list archive at Nabble.com.



Wrong documentation of TARGET_ADDR_SPACE_SUBSET_P

2011-09-23 Thread Bingfeng Mei
Hi, 
I notice the following description is different from how spu  m32c use it. 

In internal manual:

bool TARGET_ADDR_SPACE_SUBSET_P (addr space t superset, [Target Hook]
addr space t subset)
Define this to return whether the subset named address space is contained 
within the
superset named address space. Pointers to a named address space that is a subset
of another named address space will be converted automatically without a cast if
used together in arithmetic operations. Pointers to a superset address space 
can be
converted to pointers to a subset address space via explicit casts.

In spu  m32c ports:
m32c_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
spu_addr_space_subset_p (addr_space_t subset, addr_space_t superset)

I believe the document is wrong. The first argument is subset and the second
one is superset.  Should I submit a patch?

Cheers,
Bingfeng Mei



Re: RFC: DWARF Extensions for Separate Debug Info Files (Fission)

2011-09-23 Thread Cary Coutant
 * .debug_pubtypes - Public types for use in building the
   .gdb_index section at link time. This section will have an
   extended format to allow it to represent both types in the
   .debug_dwo_info section and type units in .debug_types.
    ^^^
    = .dwo_info , maybe both .debug_info and .dwo_info


 * .dwo_abbrev - Defines the abbreviation codes used by the
   .debug_dwo_info section.
    ^^^
    = .dwo_info

Thanks, I've fixed the wiki page.

 I find this .dwo_* setup is great for rapid development rebuilds but it should
 remain optional as the currently used DWARF final separate .debug info file is
 smaller than all the .dwo files together.  In the case of the final linked
 .debug builds (rpm/deb/...) one does not consider the build speed as 
 important.
 It probably does not make sense to merge + convert .dwo files back to a single
 .debug file for the rpm/deb/... build performance reasons.

Yes, we'll definitely make this a compile-time option.

While I haven't finished designing the package format for collecting
all the .dwo files, I do plan on having the packaging tool do at least
duplicate type elimination to reduce the size of the package file.

-cary


Re: RFC: DWARF Extensions for Separate Debug Info Files (Fission)

2011-09-23 Thread Cary Coutant
 The Apple approach has both the features of the Sun/HP implementation as well 
 as the ability to create a standalone debug info file.

Thanks for the clarifications. I based my comments on a description
you sent me a couple of years ago, and I apologize for any
oversimplifications I introduced.

 The compiler puts DWARF in the .o file, the linker adds some records in the 
 executable which help us to understand where files/function/symbols landed in 
 the final executable[1].

Did you intend to add a footnote?

  If the user runs our gdb or lldb on one of these binaries, the debugger will 
 read the DWARF directly out of the .o files on the fly.  Because the linker 
 doesn't need to copy around/update/modify the DWARF, link times are very 
 fast.  If the developer decides to debug the program, no extra steps are 
 required - the debugger can be started up  used with the debug info still in 
 the .o files.

We're trying to achieve something very similar, but we have the
additional goal of separating the info from the .o files because of
our distributed build environment. I also wanted to attempt to
standardize the approach, instead of having each vendor go in separate
directions.

Thanks,

-cary


Re: misbehaviour with md5_process_bytes and maybe in optimization

2011-09-23 Thread Pierre Vittet

Thanks for your interest,

I just checked revision 179127 of GCC. Last revision is 177700, it has
not been change for 6 weeks.

My file is the same as this one:
http://gcc.gnu.org/viewcvs/trunk/libiberty/md5.c?revision=177700view=markup

in libiberty/md5.c, function md5_process_bytes start line 203.

On 23/09/2011 17:13, Ian Lance Taylor wrote:
 Pierre Vittet pier...@pvittet.com writes:
 
 The bug appears when:
  1) We use libiberty compiled with -O0
  2) We first call md5_process_bytes with a less than 64 bits buffer (we
 call his size len1).
  3) We make a new call of md5_process_bytes with a buffer which has a
 size len2 such as:
  len2  127 + 65 (so test in line 228 of md5.C will be true)
line 228 is the following:if (len  64)
  128 -len1 != Mulint with Mulint %  __alignof__ (md5_uint32) != 0 (so
 condition on line 238 is true)
line 238 is the following: if (UNALIGNED_P (buffer))
  len2 - (128 - len1) = Mul64 and Mul64 such as Mul %64=0 (so the loop of
 line 239 is broken with len = 64, this leads to the bug as, line 249,
 (len  ~63) = 64 and we shift the buffer without processing the data).

line 239 is the following: while (len  64)
line 249: buffer = (const void *) ((const char *) buffer + (len  ~63));
 
 The line numbers you mention do not correspond to any version of
 libiberty/md5.c that I can see.  Can you list the exact line for each
 line number you mention, so that your explanation is easier to follow?
 Thanks.

I give about the same explanation in the README (which is in the
attached archive of my previous mail) but I does not use line number but
direct quote of the code. It mights be more easy to try the plugin with
gdb but it needs to compile libiberty.a with -O0.
 
 Ian
 






Re: misbehaviour with md5_process_bytes and maybe in optimization

2011-09-23 Thread Ian Lance Taylor
Pierre Vittet pier...@pvittet.com writes:

 Thanks for your interest,

 I just checked revision 179127 of GCC. Last revision is 177700, it has
 not been change for 6 weeks.

 My file is the same as this one:
 http://gcc.gnu.org/viewcvs/trunk/libiberty/md5.c?revision=177700view=markup

 in libiberty/md5.c, function md5_process_bytes start line 203.

 On 23/09/2011 17:13, Ian Lance Taylor wrote:
 Pierre Vittet pier...@pvittet.com writes:
 
 The bug appears when:
 1) We use libiberty compiled with -O0
 2) We first call md5_process_bytes with a less than 64 bits buffer (we
 call his size len1).
 3) We make a new call of md5_process_bytes with a buffer which has a
 size len2 such as:
 len2  127 + 65 (so test in line 228 of md5.C will be true)
 line 228 is the following:if (len  64)
 128 -len1 != Mulint with Mulint %  __alignof__ (md5_uint32) != 0 (so
 condition on line 238 is true)
 line 238 is the following: if (UNALIGNED_P (buffer))
 len2 - (128 - len1) = Mul64 and Mul64 such as Mul %64=0 (so the loop of
 line 239 is broken with len = 64, this leads to the bug as, line 249,
 (len  ~63) = 64 and we shift the buffer without processing the data).

 line 239 is the following: while (len  64)
 line 249: buffer = (const void *) ((const char *) buffer + (len  ~63));
 
 The line numbers you mention do not correspond to any version of
 libiberty/md5.c that I can see.  Can you list the exact line for each
 line number you mention, so that your explanation is easier to follow?
 Thanks.

 I give about the same explanation in the README (which is in the
 attached archive of my previous mail) but I does not use line number but
 direct quote of the code. It mights be more easy to try the plugin with
 gdb but it needs to compile libiberty.a with -O0.

Thanks, I think I have it sorted out now.

It does not happen on x86 glibc-based systems at -O2 because at -O2
string.h #defines STRING_ARCH_unaligned, so the problematic code is
not compiled or executed.

The error was introduced by this change:

2005-07-03  Steve Ellcey  s...@cup.hp.com

PR other/13906
* md5.c (md5_process_bytes): Check alignment.

Thanks for noticing this problem, analyzing it, and reporting it.

I committed this patch to mainline to fix the problem.  Bootstrapped on
x86_64-unknown-linux-gnu.

Ian


2011-09-23  Ian Lance Taylor  i...@google.com

* md5.c (md5_process_bytes): Correct handling of unaligned
buffer.


Index: md5.c
===
--- md5.c	(revision 179127)
+++ md5.c	(working copy)
@@ -1,6 +1,6 @@
 /* md5.c - Functions to compute MD5 message digest of files or memory blocks
according to the definition of MD5 in RFC 1321 from April 1992.
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 2011 Free Software Foundation, Inc.
 
NOTE: This source is derived from an old version taken from the GNU C
Library (glibc).
@@ -245,9 +245,11 @@ md5_process_bytes (const void *buffer, s
   }
   else
 #endif
-  md5_process_block (buffer, len  ~63, ctx);
-  buffer = (const void *) ((const char *) buffer + (len  ~63));
-  len = 63;
+	{
+	  md5_process_block (buffer, len  ~63, ctx);
+	  buffer = (const void *) ((const char *) buffer + (len  ~63));
+	  len = 63;
+	}
 }
 
   /* Move remaining bytes in internal buffer.  */


Re: Incorrect optimized (-O2) linked list code with 4.3.2

2011-09-23 Thread Richard Guenther
On Mon, Sep 12, 2011 at 10:10 AM, pavan tc pavan...@gmail.com wrote:
 Hi,

 I would like to know if there have been issues with optimized linked
 list code with GCC 4.3.2. [optiimization flag : -O2]

 The following is the inlined code that has the problem:

 static inline void
 list_add_tail (struct list_head *new, struct list_head *head)
 {
        new-next = head;
        new-prev = head-prev;

        new-prev-next = new;
        new-next-prev = new;
 }

 The above code has been used in the loop as below:

        pool = GF_CALLOC (count, padded_sizeof_type, gf_common_mt_long);
        if (!pool) {
                GF_FREE (mem_pool);
                return NULL;
        }

        for (i = 0; i  count; i++) {
                list = pool + (i * (padded_sizeof_type));
                INIT_LIST_HEAD (list);
                list_add_tail (list, mem_pool-list);
                
        }

 'mem_pool- list' is used as the list head. mem_pool is a pointer to type :
 struct mem_pool {
        struct list_head  list;
        int               hot_count;
        int               cold_count;
        gf_lock_t         lock;
        unsigned long     padded_sizeof_type;
        void             *pool;
        void             *pool_end;
        int               real_sizeof_type;
 };

 'list' is the new member being added to the tail of the list pointed to by 
 head.
 It is a pointer to type:
 struct list_head {
        struct list_head *next;
        struct list_head *prev;
 };

 The generated assembly for the loop (with the linined list_add_tail())
 is as below:

   40a1c:       e8 0f 03 fd ff         callq  10d30 __gf_calloc@plt
   40a21:       48 85 c0               test   %rax,%rax
   40a24:       48 89 c7               mov    %rax,%rdi
   40a27:       0f 84 bf 00 00 00   je     40aec mem_pool_new_fn+0x14c
   40a2d:       48 8b 73 08          mov    0x8(%rbx),%rsi
   40a31:       4d 8d 44 24 01      lea    0x1(%r12),%r8
   40a36:       31 c0                   xor    %eax,%eax
   40a38:       b9 01 00 00 00     mov    $0x1,%ecx
   40a3d:       0f 1f 00                nopl   (%rax)
   40a40:       49 0f af c5            imul   %r13,%rax
       === loop start
   40a44:       48 8d 04 07          lea    (%rdi,%rax,1),%rax
   40a48:       48 89 18              mov    %rbx,(%rax)
 # list-next = head
   40a4b:       48 89 06              mov    %rax,(%rsi)
 #  !! head-prev-next = list
   40a4e:       48 8b 10              mov    (%rax),%rdx
 # rdx holds list-next
   40a51:       48 89 70 08         mov    %rsi,0x8(%rax)          #
 list-prev = head-prev;
   40a55:       48 89 42 08         mov    %rax,0x8(%rdx)         #
 list-next-prev = list
   40a59:       48 89 c8              mov    %rcx,%rax
   40a5c:       48 83 c1 01          add    $0x1,%rcx
   40a60:       4c 39 c1               cmp    %r8,%rcx
   40a63:       75 db                   jne    40a40 mem_pool_new_fn+0xa0

 In the assembly above, %rbx  holds the address of 'head'.
 %rsi holds the value of head-prev. This is assigned outside the loop and the
 compiler classifies it as a loop invariant, which is where, I think,
 the problem is.
 This line of code should have been inside the loop.
 !! - %rsi still holds the value of head-prev that was assigned
 outside the loop.

 The following experiments eliminate the problem:

 1. Using 'volatile' on the address that 'head' points to.
 2. Using a function call (logging calls, for example) inside the loop.
 3. Using the direct libc calloc instead of the GF_CALLOC.
 [GF_CALLOC does some accounting when accounting is enabled. Calls vanilla
 libc calloc() otherwise].

 So, anything that necessitates a different usage of %rsi seems to be 
 correcting
 the behaviour.

 4. Using gcc 4.4.3 [ The obvious solution would then be to use 4.4.3,
 but I would
 like to understand if this is a known problem with 4.3.2. Small
 programs written to
 emulate this problem do not exhibit the erroneous behaviour.]

 Please let me know if any more details about this behaviour are required.
 I'll be glad to provide them.

Use -fno-strict-aliasing.  Your code invokes undefined behavior.

 TIA,
 Pavan



Re: A case that PRE optimization hurts performance

2011-09-23 Thread Richard Guenther
On Fri, Sep 16, 2011 at 4:00 AM, Jiangning Liu jiangning@arm.com wrote:
 Hi Richard,

 I slightly changed the case to be like below,

 int f(char *t) {
    int s=0;

    while (*t  s != 1) {
        switch (s) {
        case 0:   /* path 1 */
            s = 2;
            break;
        case 2:   /* path 2 */
            s = 3; /* changed */
            break;
        default:  /* path 3 */
            if (*t == '-')
                s = 2;
            break;
        }
        t++;
    }

    return s;
 }

 -O2 is still worse than -O2 -fno-tree-pre.

 -O2 -fno-tree-pre result is

 f:
        pushl   %ebp
        xorl    %eax, %eax
        movl    %esp, %ebp
        movl    8(%ebp), %edx
        movzbl  (%edx), %ecx
        jmp     .L14
        .p2align 4,,7
        .p2align 3
 .L5:
        movl    $2, %eax
 .L7:
        addl    $1, %edx
        cmpl    $1, %eax
        movzbl  (%edx), %ecx
        je      .L3
 .L14:
        testb   %cl, %cl
        je      .L3
        testl   %eax, %eax
        je      .L5
        cmpl    $2, %eax
        .p2align 4,,5
        je      .L17
        cmpb    $45, %cl
        .p2align 4,,5
        je      .L5
        addl    $1, %edx
        cmpl    $1, %eax
        movzbl  (%edx), %ecx
        jne     .L14
        .p2align 4,,7
        .p2align 3
 .L3:
        popl    %ebp
        .p2align 4,,2
        ret
        .p2align 4,,7
        .p2align 3
 .L17:
        movb    $3, %al
        .p2align 4,,3
        jmp     .L7

 While -O2 result is

 f:
        pushl   %ebp
        xorl    %eax, %eax
        movl    %esp, %ebp
        movl    8(%ebp), %edx
        pushl   %ebx
        movzbl  (%edx), %ecx
        jmp     .L14
        .p2align 4,,7
        .p2align 3
 .L5:
        movl    $1, %ebx
        movl    $2, %eax
 .L7:
        addl    $1, %edx
        testb   %bl, %bl
        movzbl  (%edx), %ecx
        je      .L3
 .L14:
        testb   %cl, %cl
        je      .L3
        testl   %eax, %eax
        je      .L5
        cmpl    $2, %eax
        .p2align 4,,5
        je      .L16
        cmpb    $45, %cl
        .p2align 4,,5
        je      .L5
        cmpl    $1, %eax
        setne   %bl
        addl    $1, %edx
        testb   %bl, %bl
        movzbl  (%edx), %ecx
        jne     .L14
        .p2align 4,,7
        .p2align 3
 .L3:
        popl    %ebx
        popl    %ebp
        ret
        .p2align 4,,7
        .p2align 3
 .L16:
        movl    $1, %ebx
        movb    $3, %al
        jmp     .L7

 You may notice that register ebx is introduced, and some more instructions
 around ebx are generated as well. i.e.

        setne   %bl
        testb   %bl, %bl

 I agree with you that in theory PRE does the right thing to minimize the
 computation cost on gimple level. However, the problem is the cost of
 converting comparison result to a bool value is not considered, so it
 actually makes binary code worse. For this case, as I summarized below, to
 complete the same functionality With PRE is worse than Without PRE for
 all three paths,

 * Without PRE,

 Path1:
        movl    $2, %eax
        cmpl    $1, %eax
        je      .L3

 Path2:
        movb    $3, %al
        cmpl    $1, %eax
        je      .L3

 Path3:
        cmpl    $1, %eax
        jne     .L14

 * With PRE,

 Path1:
        movl    $1, %ebx
        movl    $2, %eax
        testb   %bl, %bl
        je      .L3

 Path2:
        movl    $1, %ebx
        movb    $3, %al
        testb   %bl, %bl
        je      .L3

 Path3:
        cmpl    $1, %eax
        setne   %bl
        testb   %bl, %bl
        jne     .L14

 Do you have any more thoughts?

It seems to me that with PRE all the testb %bl, %bl
should be evaluated at compile-time considering the
preceeding movl $1, %ebx.  Am I missing something?

Richard.

 Thanks,
 -Jiangning

 -Original Message-
 From: Richard Guenther [mailto:richard.guent...@gmail.com]
 Sent: Tuesday, August 02, 2011 5:23 PM
 To: Jiangning Liu
 Cc: gcc@gcc.gnu.org
 Subject: Re: A case that PRE optimization hurts performance

 On Tue, Aug 2, 2011 at 4:37 AM, Jiangning Liu jiangning@arm.com
 wrote:
  Hi,
 
  For the following simple test case, PRE optimization hoists
 computation
  (s!=1) into the default branch of the switch statement, and finally
 causes
  very poor code generation. This problem occurs in both X86 and ARM,
 and I
  believe it is also a problem for other targets.
 
  int f(char *t) {
     int s=0;
 
     while (*t  s != 1) {
         switch (s) {
         case 0:
             s = 2;
             break;
         case 2:
             s = 1;
             break;
         default:
             if (*t == '-')
                 s = 1;
             break;
         }
         t++;
     }
 
     return s;
  }
 
  Taking X86 as an example, with option -O2 you may find 52
 instructions
  generated like below,
 
   f:
    0:   55                      push   %ebp
    1:   31 c0                   xor    %eax,%eax
    3:   89 e5                   mov    %esp,%ebp
    

Re: RFC: DWARF Extensions for Separate Debug Info Files (Fission)

2011-09-23 Thread Jason Molenda

On Sep 23, 2011, at 10:58 AM, Cary Coutant wrote:

 The compiler puts DWARF in the .o file, the linker adds some records in the 
 executable which help us to understand where files/function/symbols landed 
 in the final executable[1].
 
 Did you intend to add a footnote?

Yeah, I realized after I sent the email - it didn't seem interesting enough to 
warrant a separate followup.

The records that our linker puts in the executable are in the form of stabs 
entries.  There are a handful of stabs records created - file start, file end, 
function start, function end, symbol, pointer to a .o file, maybe one or two 
others.  We chose that format because it was trivial to support and we already 
had tools for stripping these records out of the executable once the dSYM had 
been created.

Once a dSYM has been created with all of the DWARF collected in a single file, 
our DWARF is parseable by any debug info consumer with minimal changes -- they 
need to know to look in a separate file for the DWARF from the main executable, 
but the format itself is unchanged.  Supporting the 
debug-information-in-.o-files is more involved, I don't know if any of the 
third-party debuggers on our platform work with it.


 We're trying to achieve something very similar, but we have the
 additional goal of separating the info from the .o files because of
 our distributed build environment. I also wanted to attempt to
 standardize the approach, instead of having each vendor go in separate
 directions.


Yeah, if your regular build environment involves distributed compilation, and 
the .o files need to be copied to a central system for the linker, then I can 
see why you're pursuing this approach.  For us, the most common usage is 
single-computer compilation  linking -- where the linker never pages in the 
debug info sections from the .o files so their size is not particular important.

J


Re: [Dwarf-Discuss] RFC: DWARF Extensions for Separate Debug Info Files (Fission)

2011-09-23 Thread John DelSignore
Hi Jason,

Jason Molenda wrote:
 On Sep 23, 2011, at 10:58 AM, Cary Coutant wrote:
 
 The compiler puts DWARF in the .o file, the linker adds some records in the 
 executable which help us to understand where files/function/symbols landed 
 in the final executable[1].
 Did you intend to add a footnote?
 
 Yeah, I realized after I sent the email - it didn't seem interesting enough 
 to warrant a separate followup.
 
 The records that our linker puts in the executable are in the form of stabs 
 entries.  There are a handful of stabs records created - file start, file 
 end, function start, function end, symbol, pointer to a .o file, maybe one or 
 two others.  We chose that format because it was trivial to support and we 
 already had tools for stripping these records out of the executable once the 
 dSYM had been created.

I don't remember the exact details, but the problem I recall with the Darwin 
scheme is that it builds an incomplete index in the Mach-O symbol table. IIRC, 
it was missing things that a user might want to lookup by-name in the debugger, 
like static functions or variables, and type names with external linkage. 
Without a reasonably complete index, the debugger can't know where to find the 
definitions of certain things, and that forces the user to navigate using other 
information, like source file name or global function definitions to force the 
debug information in the object to be read.

Of course, the current DWARF indexes (like pubnames/pubtypes) have the same 
problem, and some compilers do a really bad job at generating those sections. 
But at least when there's a single .debug_info section, the debugger can decide 
to ignore the indexes and skim the full debug information. The compilers on 
IRIX did a better job at generating indexes, so the debugger could find by-name 
static functions/objects.

 Once a dSYM has been created with all of the DWARF collected in a single 
 file, our DWARF is parseable by any debug info consumer with minimal changes 
 -- they need to know to look in a separate file for the DWARF from the main 
 executable, but the format itself is unchanged.  Supporting the 
 debug-information-in-.o-files is more involved, I don't know if any of the 
 third-party debuggers on our platform work with it.

TotalView supports debug information in .o files on Darwin, and has since day 
one. Perhaps you recall all those email exchanges you and I had several years 
back. It was a modest amount of work, given that we already supported debug 
information in .o files on the Sun and HP platforms.

I seem to recall one of the sore spots for us on Dawrin was getting good 
address information for certain DWARF location operations, like DW_OP_addr. 
Fortran was a particularly messy because some compilers didn't supply a linkage 
name attribute, so the debugger had to make several guesses at the name, and 
look things up by trial and error.

Cheers, John D.

 We're trying to achieve something very similar, but we have the
 additional goal of separating the info from the .o files because of
 our distributed build environment. I also wanted to attempt to
 standardize the approach, instead of having each vendor go in separate
 directions.
 
 
 Yeah, if your regular build environment involves distributed compilation, and 
 the .o files need to be copied to a central system for the linker, then I can 
 see why you're pursuing this approach.  For us, the most common usage is 
 single-computer compilation  linking -- where the linker never pages in the 
 debug info sections from the .o files so their size is not particular 
 important.
 
 J
 ___
 Dwarf-Discuss mailing list
 dwarf-disc...@lists.dwarfstd.org
 http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org
 


AIX libstdc++ missing symbols

2011-09-23 Thread David Edelsohn
My latest bootstrap of GCC on AIX failed due to missing symbols in
libstdc++ expected by libgmpxx:

exec(): 0509-036 Cannot load program exec(): 0509-036 Cannot load
program /tmp/20110922/./gcc/cc1plus/tmp/20110922/./g
cc/cc1plus because of the following errors:
 because of the following errors:
0509-130 Symbol resolution failed for   0509-130 Symbol
resolution failed for /usr/gnu/lib/libgmpxx.a(libgmpxx
.so.4)/usr/gnu/lib/libgmpxx.a(libgmpxx.so.4) because:
 because:
0509-136   Symbol   0509-136   Symbol
_ZNSt6localeD1Ev_ZNSt6localeD1Ev (number  (number 44) is not exporte
d from
   dependent module ) is not exported from
   dependent module
/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.
so.6)/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.so.6).
.
0509-136   Symbol   0509-136   Symbol
_ZNSt6localeC1ERKS__ZNSt6localeC1ERKS_ (number  (number 66) is not e
xported from
   dependent module ) is not exported from
   dependent module
/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.
so.6)/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.so.6).
.
0509-136   Symbol   0509-136   Symbol
_ZNSt8ios_base4InitD1Ev_ZNSt8ios_base4InitD1Ev (number  (number 1010
) is not exported from
   dependent module ) is not exported from
   dependent module
/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.
so.6)/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.so.6).
.
0509-136   Symbol   0509-136   Symbol
_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitC1Ev (number  (number 
) is not exported from
   dependent module ) is not exported from
   dependent module
/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.
so.6)/tmp/20110922/powerpc-ibm-aix5.3.0.0/libstdc++-v3/src/.libs/libstdc++.a(libstdc++.so.6).

Any idea what has changed and why those symbols no longer are exported
by libstdc++?  This seems like a libstdc++ ABI change if they really
disappeared.

Thanks, David


Re: AIX libstdc++ missing symbols

2011-09-23 Thread Paolo Carlini

On 09/24/2011 12:23 AM, David Edelsohn wrote:

My latest bootstrap of GCC on AIX failed due to missing symbols in
libstdc++ expected by libgmpxx:
On x86_64-linux are both still exported. And for sure nobody worked on 
the code itself. I would say, it's a compiler issue..


Paolo.


gcc-4.6-20110923 is now available

2011-09-23 Thread gccadmin
Snapshot gcc-4.6-20110923 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/4.6-20110923/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.6 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch 
revision 179133

You'll find:

 gcc-4.6-20110923.tar.bz2 Complete GCC

  MD5=85f2513ed81259e02029c7b20e0a53bb
  SHA1=bdef841f21d3e2753bc7f5fad8505eef500456b3

Diffs from 4.6-20110916 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.6
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.


[Bug c++/49433] internal compiler error: in write_builtin_type, at cp/mangle.c:2167

2011-09-23 Thread vash at vasiliyshlykov dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49433

Vasiliy vash at vasiliyshlykov dot org changed:

   What|Removed |Added

 CC||vash at vasiliyshlykov dot
   ||org

--- Comment #1 from Vasiliy vash at vasiliyshlykov dot org 2011-09-23 
06:11:44 UTC ---
Same result on PowerPC with gcc 4.6.1:
/usr/lib/gcc/powerpc-lynx-lynxos/4.6.1/../../../../powerpc-lynx-lynxos/include/boost/lexical_cast.hpp:
In instantiation of 'bool boost::detail::lexical_stream_limited_srcCharT,
Base, Traits::operator(long double) [with CharT = char, Base =
std::basic_streambufchar, Traits = std::char_traitschar]':
conversion.cpp:45:1:   instantiated from here
/usr/lib/gcc/powerpc-lynx-lynxos/4.6.1/../../../../powerpc-lynx-lynxos/include/boost/lexical_cast.hpp:971:21:
internal compiler error: in write_builtin_type, at cp/mangle.c:2167

This only appears with -O2 -flto and passes -Os -flto.

gcc -v:
Using built-in specs.
COLLECT_GCC=powerpc-lynx-lynxos-gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/powerpc-lynx-lynxos/4.6.1/lto-wrapper
Target: powerpc-lynx-lynxos
Configured with: ../src/configure --prefix=/usr --target=powerpc-lynx-lynxos
--disable-nls --enable-multilib --with-gnu-as --with-gnu-ld
--enable-languages=c,c++ --disable-libstdcxx-pch --enable-plugin
--disable-softfloat --with-tune=750 --with-system-zlib --enable-threads=posix
Thread model: lynx
gcc version 4.6.1 (GCC)


[Bug middle-end/50460] [4.7 Regression] __builtin___strcpy_chk/__builtin_object_size don't work

2011-09-23 Thread jakub at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50460

--- Comment #4 from Jakub Jelinek jakub at gcc dot gnu.org 2011-09-23 
07:26:10 UTC ---
Looking at:
const char *str1 = JIHGFEDCBA;
#define strcpy(x,y) __builtin___strcpy_chk (x, y, __builtin_object_size (x, 1))

int
f1 (void)
{
  struct A { char buf1[9]; char buf2[1]; } a;
  strcpy (a.buf1 + (0 + 4), str1 + 5);
  return 0;
}

int
f2 (void)
{
  struct A { char buf1[9]; char buf2[1]; } a;
  strcpy ((char *) a + (0 + 4), str1 + 5);
  return 0;
}

int
f3 (void)
{
  struct A { char buf1[9]; char buf2[1]; } a;
  char *p = (char *) a;
  strcpy (p + (0 + 4), str1 + 5);
  return 0;
}

int
f4 (void)
{
  struct A { char buf0; char buf1[9]; char buf2[1]; } a;
  char *p = (char *) a;
  strcpy (p + (0 + 5), str1 + 5);
  return 0;
}

int
f5 (void)
{
  struct A { char buf0; char buf1[9]; char buf2[1]; } a;
  strcpy ((char *) a + (0 + 5), str1 + 5);
  return 0;
}

with GCC 4.4, seems we have always reconstructed it into a.buf1[4].
So likely we want to reconstruct it from the MEM_REF in the *.objsz pass then.
If there is union involved, we probably want to reconstruct it to the
alternative with the largest possible __builtin_object_size (X, 1) resp.
smallest possible __builtin_object_size (X, 3).


[Bug c++/50477] -Wunused-parameter should not warn about virtual method declarations with bodies

2011-09-23 Thread jakub at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50477

Jakub Jelinek jakub at gcc dot gnu.org changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek jakub at gcc dot gnu.org 2011-09-23 
08:27:09 UTC ---
So just use -Wno-unused-parameter if you want to give the arguments names,
don't use them and don't like unused attribute.  I don't see why inline
methods, virtual or non-virtual, should be any different in this regard from
any other functions.


[Bug lto/50394] [meta-bug] Issues with building libreoffice with LTO

2011-09-23 Thread michael.meeks at suse dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50394

--- Comment #24 from Michael Meeks michael.meeks at suse dot com 2011-09-23 
08:33:17 UTC ---
 I can imagine that this sort of magic breaks with LTO. Is the solution as 
 simple as using non-LTO version of libgcc3_uno.so? I will try to take a look 
 how this is implemented.

Great - so, we wouldn't loose much by having the bridge compiled without
optimisation - it is ultimately used to map C++ - Java or python so all
performance is already shot by that stage ;-)

bridges/source/cpp_uno/gcc3_linux_intel/call.s
bridges/source/cpp_uno/gcc3_linux_x86-64/call.s

are the places to dig - unfortunately there is -far- too much cut/paste going
on in here, though we've done some work to try to share more IIRC.

These snippets are used by cpp2uno.cxx - to build trampolines cf. 'codeSnippet'
- which (I hope) should work fine, and by uno2cpp.cxx to invoke things eg.
'uno2cpp.cxx's callVirtualMethod - which has some fun assembler in each case.

Does that help ?


[Bug c++/50477] -Wunused-parameter should not warn about virtual method declarations with bodies

2011-09-23 Thread miles at gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50477

--- Comment #4 from miles at gnu dot org 2011-09-23 08:59:47 UTC ---
It's different because unlike most function/method definitions, this is _two_
things together -- a virtual method declaration, which pertains to this class
and all subclasses, and a method definition, which only instead only really
pertains to this class.

Note that if you separate the definition and the declaration, there's no issue
-- the definition can have the parameter name omitted, or use the unused
attribute, and it makes perfect sense, both to the compiler, and to readers. 
But if one uses the inline definition, there's no way to separate these two
uses; the compiler still understands of course; it's readers who are
inconvenienced, because they see code obfuscation intended for the _definition_
when they read the code to see the _declaration_.

If it were a simple function (or an out-of-line method definition, or a
non-virtual method), I'd happily use attribute unused (or whatever), because
it clearly does apply to the definition, and indeed makes the code more
readable by documenting something.

It's only in this case where two different things are mixed together that I'm
uncomfortable doing so.

I'm not denying that there are many ways to make the compiler happy; my
complaint is that they all make the code less readable, and I think readability
is important.


[Bug rtl-optimization/50489] [UPC/IA64] mis-schedule of MEM ref with -ftree-vectorize and -fschedule-insns2

2011-09-23 Thread amonakov at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50489

Alexander Monakov amonakov at gcc dot gnu.org changed:

   What|Removed |Added

 CC||amonakov at gcc dot gnu.org

--- Comment #3 from Alexander Monakov amonakov at gcc dot gnu.org 2011-09-23 
09:30:01 UTC ---
Does the problem vanish if you add -fno-strict-aliasing?

One more thing, you mention -O2 in the flags, but then refer to selective
scheduler, which is only enabled at -O3.  Perhaps you meant Haifa scheduler.


[Bug c++/49433] internal compiler error: in write_builtin_type, at cp/mangle.c:2167

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49433

--- Comment #2 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
10:00:10 UTC ---
I would say put a breakpoint on write_builtin_type and see what a heck is that
type!


[Bug bootstrap/38607] AIX error messages about TOC during build

2011-09-23 Thread lukasz.filipkowski at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38607

Lukasz Filipkowski lukasz.filipkowski at gmail dot com changed:

   What|Removed |Added

 CC||lukasz.filipkowski at gmail
   ||dot com

--- Comment #15 from Lukasz Filipkowski lukasz.filipkowski at gmail dot com 
2011-09-23 10:10:58 UTC ---
Hello,

regarding ld: 0711-768 WARNING when compiling:

   #include string
   #include map
   void foo()
   {
 std::mapstd::string, std::string bar;
   }

into rtl-enabled shared library. Warning is caused by code construction similar
to the one presented in the following example:

   //g++ -save-temps -shared -Wl,-G -o libshare.so share.cc
   #include iostream
   #include string
   using namespace std;

   templatetypename Key class MyClass
   {
public:
 typedef Key KeyType;
 MyClass(KeyType aNumber)
 {
 cout  aNumber  ! =   factorial(aNumber)  endl;
 }
 ~MyClass(){}
private:
 long factorial(KeyType __x);
 long factorialHelper(KeyType __x);
   };

   templatetypename Key long MyClassKey::factorial(KeyType __x)
   {
if (__x = 0) return 1;
else return __x * factorial(__x-1);
//else return __x * factorialHelper(__x-1);
   }

   templatetypename Key long MyClassKey::factorialHelper(KeyType __x)
   {
return factorial(__x);
   }

   void foo()
   {
MyClassint myClass(5);
   }


$ g++ -save-temps -shared -Wl,-G -o libshare.so share.cc
ld: 0711-768 WARNING: Object share.o, section 1, function
.MyClassint::factorial(int):
The branch at address 0x36c is not followed by a recognized no-op
or TOC-reload instruction. The unrecognized instruction is 0x7C691B78.


Example code is based on contents of stl_tree.h file in which class _Rb_tree is
defined. 
Warning is generated in case creation of shared libraries using TEMPLATE
CLASSES with RECURSIVE METHODS.
In the presented example factorial method is a recursive one.

When modifying:

   templatetypename Key long MyClassKey::factorial(KeyType __x)
   {
if (__x = 0) return 1;
else return __x * factorial(__x-1);
//else return __x * factorialHelper(__x-1);
   }

into:

   templatetypename Key long MyClassKey::factorial(KeyType __x)
   {
if (__x = 0) return 1;
//else return __x * factorial(__x-1);
else return __x * factorialHelper(__x-1);
   }

there is no linker warning.


The _Rb_tree class, defined in stl_tree.h, contains _M_erase and _M_copy
methods, both recursive.

Warning is present when using both GCC4.4.5 and GCC4.6.1 on AIX 5300-11-03-1013
(AIX5.3 TL11 SP03)
When using assembler program (as) from AIX 5300-08-02-0822 (AIX5.3 TL08 SP02)
there is no warning generated.

I'm not sure but problematic warning might be a result of fixes similar to
https://www-304.ibm.com/support/docview.wss?uid=isg1IZ24688


[Bug bootstrap/50492] New: Bootstrap failure on x86_64-apple-darwin10 when using --with-build-config=bootstrap-lto

2011-09-23 Thread dominiq at lps dot ens.fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50492

 Bug #: 50492
   Summary: Bootstrap failure on x86_64-apple-darwin10 when using
--with-build-config=bootstrap-lto
Classification: Unclassified
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: bootstrap
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: domi...@lps.ens.fr
CC: ebotca...@gcc.gnu.org, ia...@gcc.gnu.org, j...@suse.cz,
t...@moene.org


On x86_64-apple-darwin10 bootstrap fails when building gnat* at stage 2 if
--with-build-config=bootstrap-lto is used in configure:

/opt/gcc/build_l/./prev-gcc/g++ -B/opt/gcc/build_l/./prev-gcc/
-B/opt/gcc/gcc4.7l/x86_64-apple-darwin10.8.0/bin/ -nostdinc++
-B/opt/gcc/build_l/prev-x86_64-apple-darwin10.8.0/libstdc++-v3/src/.libs
-B/opt/gcc/build_l/prev-x86_64-apple-darwin10.8.0/libstdc++-v3/libsupc++/.libs
-I/opt/gcc/build_l/prev-x86_64-apple-darwin10.8.0/libstdc++-v3/include/x86_64-apple-darwin10.8.0
-I/opt/gcc/build_l/prev-x86_64-apple-darwin10.8.0/libstdc++-v3/include
-I/opt/gcc/_clean/libstdc++-v3/libsupc++
-L/opt/gcc/build_l/prev-x86_64-apple-darwin10.8.0/libstdc++-v3/src/.libs
-L/opt/gcc/build_l/prev-x86_64-apple-darwin10.8.0/libstdc++-v3/libsupc++/.libs 
 -g -O2 -mdynamic-no-pic -flto=jobserver -frandom-seed=1 -DIN_GCC   -W -Wall
-Wwrite-strings -Wcast-qual -Wmissing-format-attribute -pedantic -Wno-long-long
-Wno-variadic-macros -Wno-overlength-strings -Werror -fno-common 
-DHAVE_CONFIG_H -static-libgcc -static-libstdc++ -static-libgcc  -o gnatbind
ada/b_gnatb.o ada/adaint.o ada/argv.o ada/cio.o ada/cstreams.o ada/env.o
ada/exit.o ada/final.o ada/init.o ada/initialize.o ada/link.o ada/raise.o
ada/seh_init.o ada/targext.o ada/tracebak.o ada/ada.o ada/a-clrefi.o
ada/a-comlin.o ada/a-elchha.o ada/a-except.o ada/ali-util.o ada/ali.o
ada/alloc.o ada/aspects.o ada/atree.o ada/bcheck.o ada/binde.o ada/binderr.o
ada/bindgen.o ada/bindusg.o ada/butil.o ada/casing.o ada/csets.o ada/debug.o
ada/einfo.o ada/elists.o ada/err_vars.o ada/errout.o ada/erroutc.o ada/fmap.o
ada/fname.o ada/fname-uf.o ada/g-hesora.o ada/g-htable.o ada/s-os_lib.o
ada/s-string.o ada/gnat.o ada/gnatbind.o ada/gnatvsn.o ada/hostparm.o
ada/interfac.o ada/krunch.o ada/lib.o ada/namet.o ada/nlists.o ada/opt.o
ada/osint-b.o ada/osint.o ada/output.o ada/restrict.o ada/rident.o
ada/s-addope.o ada/s-assert.o ada/s-carun8.o ada/s-casuti.o ada/s-conca2.o
ada/s-conca3.o ada/s-conca4.o ada/s-conca5.o ada/s-conca6.o ada/s-conca7.o
ada/s-conca8.o ada/s-conca9.o ada/s-crc32.o ada/s-crtl.o ada/s-excdeb.o
ada/s-except.o ada/s-exctab.o ada/s-htable.o ada/s-imenne.o ada/s-imgenu.o
ada/s-mastop.o ada/s-memory.o ada/s-parame.o ada/s-restri.o ada/s-secsta.o
ada/s-soflin.o ada/s-sopco3.o ada/s-sopco4.o ada/s-sopco5.o ada/s-stache.o
ada/s-stalib.o ada/s-stoele.o ada/s-strhas.o ada/s-strops.o ada/s-traceb.o
ada/s-traent.o ada/s-unstyp.o ada/s-utf_32.o ada/s-wchcnv.o ada/s-wchcon.o
ada/s-wchjis.o ada/scng.o ada/scans.o ada/scil_ll.o ada/sdefault.o
ada/sem_aux.o ada/sinfo.o ada/sinput.o ada/sinput-c.o ada/snames.o ada/stand.o
ada/stringt.o ada/switch-b.o ada/switch.o ada/style.o ada/styleg.o
ada/stylesw.o ada/system.o ada/table.o ada/targparm.o ada/tree_io.o ada/types.o
ada/uintp.o ada/uname.o ada/urealp.o ada/widechar.o ggc-none.o
libcommon-target.a libcommon.a ../libcpp/libcpp.a -lintl -L/opt/sw64/lib
-liconv  ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a   -g -O2
-mdynamic-no-pic -flto=jobserver -frandom-seed=1

ada/b_gnatb.ads:8:4: warning: type of 'ada_main__gnat_envp' does not match
original declaration [enabled by default]
../../_clean/gcc/ada/argv.c:65:14: note: previously declared here
../../_clean/gcc/ada/gnatbind.adb:480:7: warning: type of
'shared_libgnat_default' does not match original declaration [enabled by
default]
../../_clean/gcc/ada/link.c:182:6: note: previously declared here
../../_clean/gcc/version.h:3:19: warning: type of 'version_string' does not
match original declaration [enabled by default]
../../_clean/gcc/ada/gnatvsn.adb:57:4: note: previously declared here
../../_clean/gcc/ada/s-os_lib.adb:1092:7: warning: type of
'target_object_ext_ptr' does not match original declaration [enabled by
default]
../../_clean/gcc/ada/targext.c:60:13: note: previously declared here
ada/b_gnatb.adb:96:7: warning: type of 'task_dispatching_policy' does not match
original declaration [enabled by default]
../../_clean/gcc/ada/init.c:98:7: note: previously declared here
ada/b_gnatb.adb:104:7: warning: type of 'interrupt_states' does not match
original declaration [enabled by default]
../../_clean/gcc/ada/init.c:101:7: note: previously declared here
../../_clean/gcc/ada/s-os_lib.adb:1062:7: warning: type of
'target_exec_ext_ptr' does not match original declaration [enabled by default]
../../_clean/gcc/ada/targext.c:61:13: note: previously declared here

[Bug target/50446] [avr] Implement rotate patterns with offset 1

2011-09-23 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50446

--- Comment #2 from Georg-Johann Lay gjl at gcc dot gnu.org 2011-09-23 
10:14:26 UTC ---
Author: gjl
Date: Fri Sep 23 10:14:23 2011
New Revision: 179116

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=179116
Log:
PR target/50446
* config/avr/avr.md (rotlqi3): Support all offsets 0..7.
(rotlqi3_4): Turn insn into expander.
(*rotlqi3): New insn.
(rotlhi3, rotlsi3): Support rotate left/right by 1.
(*rotlhi2.1, *rotlhi2.15): New insns.
(*rotlsi2.1, *rotlsi2.31): New insns.
* config/avr/constraints.md (C03, C05, C06, C07): New constraints.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/avr/avr.md
trunk/gcc/config/avr/constraints.md


[Bug target/49992] lto-bootstrap reveals duplicate symbols on x86_64-apple-darwin11

2011-09-23 Thread dominiq at lps dot ens.fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49992

--- Comment #57 from Dominique d'Humieres dominiq at lps dot ens.fr 
2011-09-23 10:16:28 UTC ---
 I would appreciate some help with testing on Darwin 11 and with lto-bootstraps
 on Darwin 10 (since my resources are stretched to the limit right now).

See pr50492 for bootstrap with --with-build-config=bootstrap-lto which blocks
any testing of the patch with it. Without this option, the results are the same
as those without the patch.


[Bug target/50446] [avr] Implement rotate patterns with offset 1

2011-09-23 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50446

Georg-Johann Lay gjl at gcc dot gnu.org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED

--- Comment #3 from Georg-Johann Lay gjl at gcc dot gnu.org 2011-09-23 
10:17:11 UTC ---
Closed for 4.7 milestone.


[Bug c++/50108] [C++0x] Variadic templates with both type and non-type parameters

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50108

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #2 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
11:03:05 UTC ---
Invalid then.


[Bug c++/50400] compiler accepts invalid X::Impl::Impl::Impl::.....::foo

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50400

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #2 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
11:05:09 UTC ---
Closing.


[Bug c++/50258] [C++0x] -std=gnu++0x should allow in-class initialization of static const floating types without constexpr

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50258

--- Comment #2 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
11:27:49 UTC ---
Jason, what are we going to do about this? For the record, something like the
below would pass the testsuite...

///

Index: cp/decl.c
===
--- cp/decl.c   (revision 179115)
+++ cp/decl.c   (working copy)
@@ -7716,8 +7716,9 @@ check_static_variable_definition (tree decl, tree
   else if (cxx_dialect = cxx0x  !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
 {
   if (literal_type_p (type))
-   error (%constexpr% needed for in-class initialization of static 
-  data member %q#D of non-integral type, decl);
+   pedwarn (input_location, OPT_pedantic,
+%constexpr% needed for in-class initialization of static 
+data member %q#D of non-integral type %qT, decl, type);
   else
error (in-class initialization of static data member %q#D of 
   non-literal type, decl);


[Bug c++/50117] [C++0x] Segmentation fault when using std::make_pair with std::ofstream

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50117

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||WORKSFORME

--- Comment #2 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
11:47:00 UTC ---
Worksforme with r179116. It you see it again, please re-open, thanks.


[Bug lto/50492] [4.7 regression] Ada bootstrap failure --with-build-config=bootstrap-lto

2011-09-23 Thread ebotcazou at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50492

Eric Botcazou ebotcazou at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
  Known to work||4.6.1
   Keywords||ice-on-valid-code
   Last reconfirmed||2011-09-23
  Component|bootstrap   |lto
   Host||x86_64-*-*
 Ever Confirmed|0   |1
Summary|Bootstrap failure on|[4.7 regression] Ada
   |x86_64-apple-darwin10 when  |bootstrap failure
   |using   |--with-build-config=bootstr
   |--with-build-config=bootstr |ap-lto
   |ap-lto  |
   Target Milestone|--- |4.7.0

--- Comment #1 from Eric Botcazou ebotcazou at gcc dot gnu.org 2011-09-23 
11:59:06 UTC ---
I can reproduce on Linux.


[Bug lto/50492] [4.7 regression] Ada bootstrap failure --with-build-config=bootstrap-lto

2011-09-23 Thread ebotcazou at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50492

Eric Botcazou ebotcazou at gcc dot gnu.org changed:

   What|Removed |Added

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

--- Comment #2 from Eric Botcazou ebotcazou at gcc dot gnu.org 2011-09-23 
11:59:56 UTC ---
Investigating.


[Bug c++/45993] ICE in uses_template_parms, at cp/pt.c:7064

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45993

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
  Known to work||4.6.2, 4.7.0
 Resolution||WORKSFORME

--- Comment #1 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
12:15:54 UTC ---
Worksforme in current mainline and 4_6-branch.


[Bug c++/50258] [C++0x] -std=gnu++0x should allow in-class initialization of static const floating types without constexpr

2011-09-23 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50258

--- Comment #3 from Jonathan Wakely redi at gcc dot gnu.org 2011-09-23 
12:18:03 UTC ---
How about using a permerror instead?  Since it's deprecated, requiring users to
give -fpermissive if they want to use it in C++11 seems reasonable to me.


[Bug c++/45853] Segfault while experimenting with c++-0x initializer lists

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45853

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|WAITING |RESOLVED
 Resolution||WORKSFORME

--- Comment #7 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
12:26:37 UTC ---
Let's close this.


[Bug lto/50492] [4.7 regression] Ada bootstrap failure --with-build-config=bootstrap-lto

2011-09-23 Thread iains at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50492

--- Comment #3 from Iain Sandoe iains at gcc dot gnu.org 2011-09-23 12:28:21 
UTC ---
also on i686-darwin9.


[Bug c++/45855] switched ; and : causes compile crash

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45855

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||WORKSFORME

--- Comment #5 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
12:31:26 UTC ---
Let's close this too, then.


[Bug lto/50492] [4.7 regression] Ada bootstrap failure --with-build-config=bootstrap-lto

2011-09-23 Thread howarth at nitro dot med.uc.edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50492

Jack Howarth howarth at nitro dot med.uc.edu changed:

   What|Removed |Added

 CC||howarth at nitro dot
   ||med.uc.edu

--- Comment #4 from Jack Howarth howarth at nitro dot med.uc.edu 2011-09-23 
12:39:03 UTC ---
This is a duplicate of PR50279.


[Bug c++/45755] [C++0x] Member function template is instantiated to perform the copy

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45755

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

Summary|Member function template is |[C++0x] Member function
   |instantiated to perform the |template is instantiated to
   |copy|perform the copy

--- Comment #1 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
12:41:24 UTC ---
This is still behaving the same, and I can't believe GCC is still wrong vs the
current C++0x, aka C++11. Can you double check?


[Bug c++/45382] internal compiler error: tree code ‘call_expr’ is not supported in gimple streams

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45382

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||WORKSFORME

--- Comment #6 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
12:42:38 UTC ---
Let's close this.


[Bug lto/50394] [meta-bug] Issues with building libreoffice with LTO

2011-09-23 Thread markus at trippelsdorf dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50394

--- Comment #25 from Markus Trippelsdorf markus at trippelsdorf dot de 
2011-09-23 12:42:26 UTC ---
New ICE with today's gcc and today's libreoffice: 

[ build PAG ] writer
[ build LNK ] Executable/oosplash
[ build LNK ] Library/libspl_unxlo.so
[ build CMP ] desktop/unx/splash/splash
[ build CMP ] desktop/unx/splash/splash
[ build LNK ] Library/libevtattlo.so
[ build CMP ] eventattacher/source/evtatt
[ build CMP ] eventattacher/source/evtatt
[ build LNK ] Library/libfileacc.so
[ build CMP ] fileaccess/source/fileacc
[ build CMP ] fileaccess/source/fileacc
[ build LNK ] Library/libfrmlo.so
[ build CMP ] forms/util/frm
[ build CMP ] forms/util/frm
[ build LNK ] Library/libforlo.so
[ build CMP ] formula/util/for
[ build CMP ] formula/util/for
[ build LNK ] Library/libhwplo.so
[ build CMP ] hwpfilter/source/hwp
In file included from
/var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/solver/unxlngx6.pro/inc/cppu/unotype.hxx:3740:0,
 from :3330:
/var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/dbaccess/source/core/api/table.cxx:
In member function 'columnDropped':
/var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/dbaccess/source/core/api/table.cxx:158:1:
internal compiler error: in redirect_jump, at jump.c:1497
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.
make[2]: ***
[/var/tmp/portage/app-office/libreoffice--r1/temp/ccoLHzyy.ltrans2.ltrans.o]
Error 1
make[2]: *** Waiting for unfinished jobs
lto-wrapper: make returned 2 exit status
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.0/../../../../x86_64-pc-linux-gnu/bin/ld:
fatal error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[1]: ***
[/var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/workdir/unxlngx6.pro/LinkTarget/Library/libdbalo.so]
Error 1
make[1]: *** Waiting for unfinished jobs...


[Bug c++/44906] g++ is giving error: parse error in template argument list while using a c++ code.

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44906

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #7 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
12:43:53 UTC ---
Closing as invalid.


[Bug c++/50258] [C++0x] -std=gnu++0x should allow in-class initialization of static const floating types without constexpr

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50258

--- Comment #4 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
12:45:43 UTC ---
Of course would work for me.


[Bug c++/45755] [C++0x] Member function template is instantiated to perform the copy

2011-09-23 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45755

--- Comment #2 from Jonathan Wakely redi at gcc dot gnu.org 2011-09-23 
12:55:23 UTC ---
That wording was changed to clarify that it means a template will never be
instantiated to produce S::S(S), it does not mean a template cannot be used to
perform copies, see
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1080

I beleive G++ is correct here, the constructor is instantied with T = S, to
produce S::S(S) which is a valid constructor for copy-initialization


[Bug c++/45755] [C++0x] Member function template is instantiated to perform the copy

2011-09-23 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45755

--- Comment #3 from Jonathan Wakely redi at gcc dot gnu.org 2011-09-23 
12:56:54 UTC ---
... so I think this is a dup of PR 46004


[Bug c++/46004] [C++0x] template constructor used to copy object

2011-09-23 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46004

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

 CC||boostcpp at gmail dot com

--- Comment #4 from Jonathan Wakely redi at gcc dot gnu.org 2011-09-23 
12:58:17 UTC ---
*** Bug 45755 has been marked as a duplicate of this bug. ***


[Bug c++/45755] [C++0x] Member function template is instantiated to perform the copy

2011-09-23 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45755

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||DUPLICATE

--- Comment #4 from Jonathan Wakely redi at gcc dot gnu.org 2011-09-23 
12:58:16 UTC ---
.

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


[Bug c++/50258] [C++0x] -std=gnu++0x should allow in-class initialization of static const floating types without constexpr

2011-09-23 Thread jason at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50258

--- Comment #5 from Jason Merrill jason at gcc dot gnu.org 2011-09-23 
13:07:33 UTC ---
permerror sounds good to me.


[Bug c++/45755] [C++0x] Member function template is instantiated to perform the copy

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45755

--- Comment #5 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
13:09:22 UTC ---
Ah, great, quite misleading indeed.


[Bug c++/50258] [C++0x] -std=gnu++0x should allow in-class initialization of static const floating types without constexpr

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50258

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2011-09-23
 AssignedTo|unassigned at gcc dot   |paolo.carlini at oracle dot
   |gnu.org |com
 Ever Confirmed|0   |1

--- Comment #6 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
13:13:28 UTC ---
Ok, let me test that + testcase.


[Bug regression/50472] Volatile qualification in data is not enough to avoid optimization over pointer to data

2011-09-23 Thread Paulo.Matos at csr dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50472

--- Comment #2 from Paulo J. Matos Paulo.Matos at csr dot com 2011-09-23 
13:18:10 UTC ---
(In reply to comment #1)
 Duplicate of PR50078?

Might be but I can't confirm. Surely we will know once Mat fixes PR50078.


[Bug tree-optimization/49601] [4.7 Regression] ICE at ipa-inline-analysis.c:1188

2011-09-23 Thread Paulo.Matos at csr dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49601

Paulo J. Matos Paulo.Matos at csr dot com changed:

   What|Removed |Added

 CC||Paulo.Matos at csr dot com

--- Comment #3 from Paulo J. Matos Paulo.Matos at csr dot com 2011-09-23 
13:19:33 UTC ---
Richard raised concerns about this PR being an old bug and already fixed.
Initially I only confirmed it in 4.6.1 but I can reproduce it in git head
36181f98f (that's from 30mins ago).


[Bug regression/50472] Volatile qualification in data is not enough to avoid optimization over pointer to data

2011-09-23 Thread Paulo.Matos at csr dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50472

Paulo J. Matos Paulo.Matos at csr dot com changed:

   What|Removed |Added

 CC||Paulo.Matos at csr dot com

--- Comment #3 from Paulo J. Matos Paulo.Matos at csr dot com 2011-09-23 
13:20:57 UTC ---
Richard raised concerns about this PR being an old bug and already fixed.
Initially I only confirmed it in 4.6.1 but I can reproduce it in git head
36181f98f (that's from 30mins ago).


[Bug tree-optimization/49601] [4.7 Regression] ICE at ipa-inline-analysis.c:1188

2011-09-23 Thread Paulo.Matos at csr dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49601

--- Comment #4 from Paulo J. Matos Paulo.Matos at csr dot com 2011-09-23 
13:22:15 UTC ---
(In reply to comment #3)
 Richard raised concerns about this PR being an old bug and already fixed.
 Initially I only confirmed it in 4.6.1 but I can reproduce it in git head
 36181f98f (that's from 30mins ago).

Ignore previous comment. Wrong bug.


[Bug tree-optimization/49601] [4.7 Regression] ICE at ipa-inline-analysis.c:1188

2011-09-23 Thread hubicka at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49601

--- Comment #5 from Jan Hubicka hubicka at gcc dot gnu.org 2011-09-23 
13:29:23 UTC ---
I believe I fixed this one, will double check.


[Bug tree-optimization/49601] [4.7 Regression] ICE at ipa-inline-analysis.c:1188

2011-09-23 Thread hubicka at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49601

Jan Hubicka hubicka at gcc dot gnu.org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||WORKSFORME

--- Comment #6 from Jan Hubicka hubicka at gcc dot gnu.org 2011-09-23 
13:33:00 UTC ---
Seems it is indeed fixed.


[Bug tree-optimization/10980] vararg functions are not inlined

2011-09-23 Thread vanboxem.ruben at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10980

Ruben Van Boxem vanboxem.ruben at gmail dot com changed:

   What|Removed |Added

 CC||vanboxem.ruben at gmail dot
   ||com

--- Comment #7 from Ruben Van Boxem vanboxem.ruben at gmail dot com 
2011-09-23 13:34:52 UTC ---
This problem popped up when compiling LLVM's libc++:
M:\Development\Source\libc++\src\locale.cpp:1:0: warning: -fPIC ignored for
target (all code is position independent) [enabled by default]
M:\Development\Source\libc++\include/locale: In function 'int
std::__1::__asprintf_l(char**, _locale_t, const char*, ...)':
M:\Development\Source\libc++\include/locale:372:5: sorry, unimplemented:
function 'int std::__1::__asprintf_l(char**, _locale_t, const char*, ...)' can
never be inlined because it uses variable argument lists
M:\Development\Source\libc++\include/locale: In function 'int
std::__1::__sprintf_l(char*, _locale_t, const char*, ...)':
M:\Development\Source\libc++\include/locale:344:5: sorry, unimplemented:
function 'int std::__1::__sprintf_l(char*, _locale_t, const char*, ...)' can
never be inlined because it uses variable argument lists
M:\Development\Source\libc++\include/locale: In function 'int
std::__1::__snprintf_l(char*, size_t, _locale_t, const char*, ...)':
M:\Development\Source\libc++\include/locale:358:5: sorry, unimplemented:
function 'int std::__1::__snprintf_l(char*, size_t, _locale_t, const char*,
...)' can never be inlined because it uses variable argument lists
M:\Development\Source\libc++\include/locale: In function 'int
std::__1::__sscanf_l(const char*, _locale_t, const char*, ...)':
M:\Development\Source\libc++\include/locale:386:5: sorry, unimplemented:
function 'int std::__1::__sscanf_l(const char*, _locale_t, const char*, ...)'
can never be inlined because it uses variable argument lists

The code can be found here:
http://llvm.org/svn/llvm-project/libcxx/trunk/include/locale


[Bug tree-optimization/10980] vararg functions are not inlined

2011-09-23 Thread hubicka at ucw dot cz
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10980

--- Comment #8 from Jan Hubicka hubicka at ucw dot cz 2011-09-23 13:40:55 UTC 
---
 This problem popped up when compiling LLVM's libc++:
 M:\Development\Source\libc++\src\locale.cpp:1:0: warning: -fPIC ignored for
 target (all code is position independent) [enabled by default]
 M:\Development\Source\libc++\include/locale: In function 'int
 std::__1::__asprintf_l(char**, _locale_t, const char*, ...)':
 M:\Development\Source\libc++\include/locale:372:5: sorry, unimplemented:
 function 'int std::__1::__asprintf_l(char**, _locale_t, const char*, ...)' can
 never be inlined because it uses variable argument lists
 M:\Development\Source\libc++\include/locale: In function 'int
 std::__1::__sprintf_l(char*, _locale_t, const char*, ...)':

It seems wrong to add always_inline attribute on something like this.  I am not
aware
that LLVM would be inlining variadic function either
(even though it is doable in some trivial cases)

Honza


[Bug tree-optimization/10980] vararg functions are not inlined

2011-09-23 Thread vanboxem.ruben at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10980

--- Comment #9 from Ruben Van Boxem vanboxem.ruben at gmail dot com 
2011-09-23 13:46:27 UTC ---
Current Clang compiled everything without a hitch. It might ignore the
attribute, I haven't checked. Perhaps this error should be made a warning?


[Bug c++/44906] g++ is giving error: parse error in template argument list while using a c++ code.

2011-09-23 Thread manu at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44906

--- Comment #8 from Manuel López-Ibáñez manu at gcc dot gnu.org 2011-09-23 
13:59:07 UTC ---
(In reply to comment #6)
 Honestly, nothing similar will happen any time soon, it means changing
 completely the semantics of templates. Maybe we can produce a better
 diagnostics, let's add Manuel in CC to hear his opinion...

The code is invalid but the diagnostic could be much better (I only have GCC
4.5.2, so perhaps it is better in trunk).

Smaller testcase:

templatetypename T
class MISC{
public:
T vec1;
templateT* vc void addVecVals(){};
void add(void) { addVecValsvec1();  };
};

void foo(void) {
MISCint m;
m.add();
}

Clang++ gives a somewhat better message:

/tmp/webcompile/_14512_0.cc:6:22: error: no matching member function for call
to 'addVecVals'
void add(void) { addVecValsvec1();  };
 ^
/tmp/webcompile/_14512_0.cc:11:7: note: in instantiation of member function
'MISCint::add' requested here
m.add();
  ^
/tmp/webcompile/_14512_0.cc:5:26: note: candidate template ignored: invalid
explicitly-specified argument for template parameter 'vc'
templateT* vc void addVecVals(){};
 ^
1 error generated.


I would argue for reopening it...


Re: [Bug tree-optimization/10980] vararg functions are not inlined

2011-09-23 Thread Jan Hubicka
I bet it just ignores the attribute that is not how the attribute is
supposed to work.

We output error in this case intentionally (and warning in at the same
spot if function is declared inline and -Winline is given).
Functions marked always_inlined really ought to be always inlined and
attribute is supposed to be useable in the cases where compilation would
fail otherwise (such as SSE buitins).

Our documentation is however not particularly clear here, perhaps it should
be updated...

Honza


[Bug tree-optimization/10980] vararg functions are not inlined

2011-09-23 Thread hubicka at ucw dot cz
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10980

--- Comment #10 from Jan Hubicka hubicka at ucw dot cz 2011-09-23 14:10:53 
UTC ---
I bet it just ignores the attribute that is not how the attribute is
supposed to work.

We output error in this case intentionally (and warning in at the same
spot if function is declared inline and -Winline is given).
Functions marked always_inlined really ought to be always inlined and
attribute is supposed to be useable in the cases where compilation would
fail otherwise (such as SSE buitins).

Our documentation is however not particularly clear here, perhaps it should
be updated...

Honza


[Bug target/50493] New: ICE in neon_disambiguate_copy, at config/arm/arm.c:20388

2011-09-23 Thread rmansfield at qnx dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50493

 Bug #: 50493
   Summary: ICE in neon_disambiguate_copy, at
config/arm/arm.c:20388
Classification: Unclassified
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: rmansfi...@qnx.com
  Host: x86_64-linux-gnu
Target: arm-unknown-linux-gnueabi
 Build: x86_64-linux-gnu


Created attachment 25347
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=25347
preprocessed source

$ ./xgcc -v
Using built-in specs.
COLLECT_GCC=./xgcc
Target: arm-unknown-linux-gnueabi
Configured with: ../configure --target=arm-unknown-linux-gnueabi
--prefix=/home/ryan/x-tools/arm-unknown-linux-gnueabi
--with-sysroot=/home/ryan/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi//sys-root
--disable-multilib
--with-local-prefix=/home/ryan/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sys-root
--disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99
--enable-long-long --enable-target-optspace
target_alias=arm-unknown-linux-gnueabi --enable-languages=c++ --disable-shared
--disable-libmudflap --disable-libssp
Thread model: posix
gcc version 4.7.0 20110923 (experimental) [trunk revision 179117] (GCC) 

$ ./xgcc -B. -O3 -mfpu=neon -mfloat-abi=softfp ~/ice.i -fpic
/home/ryan/ice.i: In function 'SetupUSEVertexShader':
/home/ryan/ice.i:342:38: warning: incompatible implicit declaration of built-in
function 'calloc' [enabled by default]
/home/ryan/ice.i:353:1: internal compiler error: in neon_disambiguate_copy, at
config/arm/arm.c:20388
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.


[Bug target/50494] New: gcc.dg/vect/vect-reduc-2char.c fails spuriously on ppc with -flto

2011-09-23 Thread vries at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50494

 Bug #: 50494
   Summary: gcc.dg/vect/vect-reduc-2char.c fails spuriously on ppc
with -flto
Classification: Unclassified
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: vr...@gcc.gnu.org


The testcase contains 2 char array initializers:
...
__attribute__ ((noinline))
void main1 (signed char x, signed char max_result, signed char min_result)
{
  int i;

  signed char b[N] = {1,2,3,6,8,10,12,14,16,18,20,22,24,26,28,30};
  signed char c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
...

The initializer data is put into .rodata, and copied to stack at the start of
the function by 2 blockmoves.

When we do expand_block_move during cc1, the blockmove source looks like this
as a tree:
...
 var_decl 0xf7e37180 *.LC0
type array_type 0xf7e317e0
type integer_type 0xf7d53180 signed char sizes-gimplified public
string-flag QI
size integer_cst 0xf7d406c8 constant 8
unit size integer_cst 0xf7d406e4 constant 1
align 8 symtab 0 alias set 0 canonical type 0xf7d53180 precision 8
min integer_cst 0xf7d40674 -128 max integer_cst 0xf7d406ac 127
pointer_to_this pointer_type 0xf7e31840
sizes-gimplified BLK
size integer_cst 0xf7d409f4 constant 128
unit size integer_cst 0xf7d40a10 constant 16
align 8 symtab 0 alias set 0 canonical type 0xf7e317e0
domain integer_type 0xf7e1ff00 type integer_type 0xf7d53000 sizetype
sizes-gimplified SI
size integer_cst 0xf7d40508 constant 32
unit size integer_cst 0xf7d40524 constant 4
align 32 symtab 0 alias set -1 canonical type 0xf7e1ff00 precision
32 min integer_cst 0xf7d40540 0 max integer_cst 0xf7e1c524 15
pointer_to_this pointer_type 0xf7e37780
readonly used static ignored in-constant-pool BLK file (null) line 0 col 0
size integer_cst 0xf7d409f4 128 unit size integer_cst 0xf7d40a10 16
user align 128 initial constructor 0xf7db5860
(mem/s/c:BLK (symbol_ref/f:SI (*.LC0) [flags 0x82] var_decl 0xf7e37180
*.LC0) [1 S16 A8])
...

and like this as rtl:
...
(mem/s/c:BLK (reg/f:SI 180) [1 S16 A8])
...

This case is chosen in expand_block_move, and the blockmoves are expanded as 
4-byte wordmoves.
...
  else if (bytes = 4  (align = 32 || !STRICT_ALIGNMENT))
{/* move 4 bytes */
  move_bytes = 4;
  mode = SImode;
  gen_func.mov = gen_movsi;
}
...

The .rodata section written by cc1 has align 2^4 == 16 bytes.
...
.section.rodata
.align 4
.set.LANCHOR0,. + 0
.LC0:
.byte1
.byte2
...


However, when we do expand_block_move during lto1, the blockmove source looks
like this as a tree:
...
 mem_ref 0xf7dc76c8
type array_type 0xf7dc67e0
type integer_type 0xf7d51180 signed char public string-flag QI
size integer_cst 0xf7d4071c constant 8
unit size integer_cst 0xf7d40738 constant 1
align 8 symtab 0 alias set -1 canonical type 0xf7d51180 precision 8
min integer_cst 0xf7d406ac -128 max integer_cst 0xf7d40700 127
pointer_to_this pointer_type 0xf7dce8a0
BLK
size integer_cst 0xf7d40a48 constant 128
unit size integer_cst 0xf7d40a64 constant 16
align 8 symtab 0 alias set 0 canonical type 0xf7dc67e0
domain integer_type 0xf7dc6840 type integer_type 0xf7d51000 sizetype
SI
size integer_cst 0xf7d40524 constant 32
unit size integer_cst 0xf7d40540 constant 4
align 32 symtab 0 alias set -1 canonical type 0xf7d51360 precision
32 min integer_cst 0xf7d4055c 0 max integer_cst 0xf7dc7118 15
pointer_to_this pointer_type 0xf7dc6a20
readonly
arg 0 addr_expr 0xf7dc0a38
type pointer_type 0xf7dc6a20 type array_type 0xf7dc67e0
public unsigned SI size integer_cst 0xf7d40524 32 unit size
integer_cst 0xf7d40540 4
align 32 symtab 0 alias set -1 canonical type 0xf7dc6a20
readonly constant
arg 0 var_decl 0xf7dc6780 *.LC0 type array_type 0xf7dc67e0
readonly used static ignored in-constant-pool BLK file (null) line
0 col 0 size integer_cst 0xf7d40a48 128 unit size integer_cst 0xf7d40a64 16
user align 128 initial constructor 0xf7dc51f0
(mem/s/c:BLK (symbol_ref/f:SI (*.LC0) [flags 0x82] var_decl
0xf7dd9060 *.LC0) [1 S16 A8])
arg 1 integer_cst 0xf7dc76e4 type pointer_type 0xf7dc6a20 constant 0
   
/scratch/vries/b6/pr43864.42.all-fsf-mainline-powerpc-linux-gnu.cfg/src/gcc-mainline/gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c:11:15
...

and like this as rtx:
...
(mem/s/u/c:BLK (reg/f:SI 180) [0 *.LC0+0 S16 A128])
...

This case is now chosen in expand_block_move, and the blockmoves are expanded
as 16-byte 

[Bug c++/44906] g++ is giving error: parse error in template argument list while using a c++ code.

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44906

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
   Last reconfirmed||2011-09-23
 Resolution|INVALID |
 Ever Confirmed|0   |1

--- Comment #9 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
14:43:26 UTC ---
Hey, you woke up! ;) Sure, let's re-open is a diagnostic issue, your call.


[Bug c++/50495] New: Optimize exact matches in overload resolution

2011-09-23 Thread mathias at gaunard dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50495

 Bug #: 50495
   Summary: Optimize exact matches in overload resolution
Classification: Unclassified
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: enhancement
  Priority: P3
 Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: math...@gaunard.com


Overload resolution in GCC (and in C++ in general) is quite slow, and I would
like to suggest the following enhancement: look-up (in constant or logarithmic
time) for exact matches first, then perform regular overload resolution if
necessary.

The idea is that

struct id_0 {};
void f(id_0);

struct id_1;
void f(id_1) {};

...

and then calling

f(id_x());

should be as fast as

void f_0();
void f_1();
...

and then calling

f_x();

Now if this could be made to work for things like

struct h0 {};
struct h1 : h0 {};

struct id_0 {};
templateclass T void f(id_0, h0T);
templateclass T void f(id_0, h1T);

to reduce the set of possible overloads to 2 early (templates inserted to make
it non-absolutely orderable), that would be perfect.

According to my benchmarks, resolving a function with an exact match on the
first argument among 1,000 tags with 10 overloads each takes 30s, while with
1,000 differently named functions of 10 overloads each it takes 100ms.


[Bug target/50494] gcc.dg/vect/vect-reduc-2char.c fails spuriously on ppc with -flto

2011-09-23 Thread vries at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50494

--- Comment #1 from vries at gcc dot gnu.org 2011-09-23 14:52:55 UTC ---
Created attachment 25348
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=25348
test.c minimized from gcc.dg/vect/vect-reduc-2char.c

To reproduce:

$ powerpc-linux-gnu-gcc -O2 -ftree-vectorize test.c -flto -maltivec -static
$ ./a.out ; echo $?
218

The problematic code is still generated without -static, but for me this
minimal testcase does not fail runtime without the -static.


[Bug c++/50495] Optimize exact matches in overload resolution

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50495

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 CC||jason at gcc dot gnu.org

--- Comment #1 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
14:54:15 UTC ---
At some point Jason mentioned that other improvements were in principle
possible beyond those already implemented relatively recently. No idea if this
has been considered already...


[Bug target/50494] gcc.dg/vect/vect-reduc-2char.c fails spuriously on ppc with -flto

2011-09-23 Thread vries at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50494

--- Comment #2 from vries at gcc dot gnu.org 2011-09-23 15:05:19 UTC ---
Same issue occurs for gcc.dg/vect/pr44507.c with -m64.


[Bug lto/50492] [4.7 regression] Ada bootstrap failure --with-build-config=bootstrap-lto

2011-09-23 Thread iains at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50492

--- Comment #5 from Iain Sandoe iains at gcc dot gnu.org 2011-09-23 15:06:41 
UTC ---
two more data points:

1/ powerpc-darwin9 also fails, so this is not x86-centric.

2/ the following succeeded.
Target: i686-apple-darwin9
Configured with: /GCC/gcc-4-6-branch/configure --prefix=/GCC/gcc-4-6-install
--target=i686-apple-darwin9 --host=i686-apple-darwin9
--build=i686-apple-darwin9 --enable-version-specific-runtime-libs
--enable-checking=release --with-gmp=/GCC/multiprec-math/x86
--with-mpfr=/GCC/multiprec-math/x86 --with-mpc=/GCC/multiprec-math/x86
--with-libiconv-prefix=/usr --enable-languages=all,ada,java,obj-c++
--with-build-config='bootstrap-lto bootstrap-debug'
Thread model: posix
gcc version 4.6.2 20110923 (prerelease) [gcc-4_6-branch revision 179117] (GCC)


[Bug middle-end/50481] builtin to reverse the bit order

2011-09-23 Thread de...@the-user.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50481

Jonathan Schmidt-Dominé de...@the-user.org changed:

   What|Removed |Added

 CC||de...@the-user.org

--- Comment #1 from Jonathan Schmidt-Dominé de...@the-user.org 2011-09-23 
15:30:33 UTC ---
Informative web-page listing some methods:
http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64BitsDiv


[Bug lto/50496] New: [4.7 regression] ICE in redirect_jump, at jump.c:1497

2011-09-23 Thread markus at trippelsdorf dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50496

 Bug #: 50496
   Summary: [4.7 regression] ICE in redirect_jump, at jump.c:1497
Classification: Unclassified
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: lto
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: mar...@trippelsdorf.de


This ICE happened while compiling LibreOffice with --enable-lto.

 # g++ -r -nostdlib CRowSetColumn.ii CRowSetDataColumn.ii  datacolumn.ii 
definitioncolumn.ii  table.ii -flto -std=c++0x -O2
In file included from
/var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/solver/unxlngx6.pro/inc/comphelper/IdPropArrayHelper.hxx:231:0,
 from :631:
/var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/dbaccess/source/core/api/table.cxx:
In member function ‘columnDropped’:
/var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/dbaccess/source/core/api/table.cxx:158:1:
internal compiler error: in redirect_jump, at jump.c:1497
Please submit a full bug report

I will try to reduce the .ii files further.


[Bug c++/50495] Optimize exact matches in overload resolution

2011-09-23 Thread mathias at gaunard dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50495

--- Comment #2 from Mathias Gaunard mathias at gaunard dot com 2011-09-23 
15:46:50 UTC ---
Would you happen to have a reference to those changes or discussed
improvements?
I'm not testing with a very recent GCC.


[Bug lto/50496] [4.7 regression] ICE in redirect_jump, at jump.c:1497

2011-09-23 Thread markus at trippelsdorf dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50496

--- Comment #1 from Markus Trippelsdorf markus at trippelsdorf dot de 
2011-09-23 15:50:00 UTC ---
Testcase is too big ATM: 1193 kilobytes.
Will post reduced testcase later.


[Bug lto/50394] [meta-bug] Issues with building libreoffice with LTO

2011-09-23 Thread markus at trippelsdorf dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50394

--- Comment #26 from Markus Trippelsdorf markus at trippelsdorf dot de 
2011-09-23 15:52:02 UTC ---
(In reply to comment #25)
 New ICE with today's gcc and today's libreoffice: 
 
 /var/tmp/portage/app-office/libreoffice--r1/work/libreoffice-core-/dbaccess/source/core/api/table.cxx:158:1:
 internal compiler error: in redirect_jump, at jump.c:1497

This is now PR50496. I'm still reducing with delta.


[Bug c++/50495] Optimize exact matches in overload resolution

2011-09-23 Thread jason at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50495

Jason Merrill jason at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2011-09-23
 Ever Confirmed|0   |1

--- Comment #3 from Jason Merrill jason at gcc dot gnu.org 2011-09-23 
15:58:12 UTC ---
I recently made a number of improvements that will be in 4.7.0; see PR 48481.

It certainly would be possible to do more optimization:
1) Once we have seen a valid exact match, quickly disqualify any later
candidates that are not.
2) Try to find that exact match faster with a hash or splay tree lookup.

#2 would only be useful for large overload sets, but #1 could be a minor
optimization for all code.


[Bug c++/50495] Optimize exact matches in overload resolution

2011-09-23 Thread jason at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50495

--- Comment #4 from Jason Merrill jason at gcc dot gnu.org 2011-09-23 
16:00:37 UTC ---
(In reply to comment #3)
 I recently made a number of improvements that will be in 4.7.0; see PR 48481.

The fn_set change in particular should cut your overload resolution time by
50%.  The other changes are to avoid memory bloat, which may or may not affect
you.


[Bug libgomp/50386] [4.7 Regression] libgomp.h:87:5: error: unnamed struct/union that defines no instances

2011-09-23 Thread dave.anglin at bell dot net
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50386

--- Comment #5 from dave.anglin at bell dot net 2011-09-23 16:04:18 UTC ---
On 9/20/2011 6:32 PM, ramana at gcc dot gnu.org wrote:
 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50386

 --- Comment #4 from Ramana Radhakrishnanramana at gcc dot gnu.org  
 2011-09-20 22:32:49 UTC ---
 I think this is a bootstrap issue rather than a problem with libgomp . A
 reduced testcase of this form fails with the stage2 compiler but is ok with 
 the
 stage1 compiler.


 struct gomp_work_share
 {
/* This member records the SCHEDULE clause to be used for this construct.
   The user specification of runtime will already have been resolved.
   If this is a SECTIONS construct, this value will always be DYNAMIC.  */
union {
  struct {
/* This is the chunk_size argument to the SCHEDULE clause.  */
long chunk_size;

/* This is the iteration end point.  If this is a SECTIONS construct,
   this is the number of contained sections.  */
long end;

/* This is the iteration step.  If this is a SECTIONS construct, this
   is always 1.  */
long incr;
  }u;

};
 }a;

 Where the stage2 compiler goes :

 /home/4/t1.i:21:3: warning: unnamed struct/union that defines no instances
 [enabled by default]


 and the stage1 compiler goes quietly.

 Could you check if you see similar behaviour ?

Yes, exactly.  I noted in my original report that the error occurred in 
stage2.

While not fully confirmed, it looks like this was introduced by r178692.

Dave


[Bug c++/50258] [C++0x] -std=gnu++0x should allow in-class initialization of static const floating types without constexpr

2011-09-23 Thread paolo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50258

--- Comment #7 from paolo at gcc dot gnu.org paolo at gcc dot gnu.org 
2011-09-23 16:20:00 UTC ---
Author: paolo
Date: Fri Sep 23 16:19:52 2011
New Revision: 179121

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=179121
Log:
/cp
2011-09-23  Paolo Carlini  paolo.carl...@oracle.com

PR c++/50258
* decl.c (check_static_variable_definition): Allow in-class
initialization of static data member of non-integral type in
permissive mode.

/testsuite
2011-09-23  Paolo Carlini  paolo.carl...@oracle.com

PR c++/50258
* g++.dg/cpp0x/constexpr-static8.C: New.

Added:
trunk/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/decl.c
trunk/gcc/testsuite/ChangeLog


[Bug c++/50258] [C++0x] -std=gnu++0x should allow in-class initialization of static const floating types without constexpr

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50258

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

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

--- Comment #8 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
16:22:32 UTC ---
Done.


[Bug c++/50495] Optimize exact matches in overload resolution

2011-09-23 Thread mathias at gaunard dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50495

--- Comment #5 from Mathias Gaunard mathias at gaunard dot com 2011-09-23 
16:38:11 UTC ---
clang was already 50% faster in my tests, so I guess that will put gcc 4.7 on
par with it.


[Bug target/50447] [avr] Better support of AND, OR, XOR and PLUS with constant integers for 16- and 32-bit values

2011-09-23 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50447

--- Comment #2 from Georg-Johann Lay gjl at gcc dot gnu.org 2011-09-23 
17:02:20 UTC ---
Author: gjl
Date: Fri Sep 23 17:02:10 2011
New Revision: 179123

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=179123
Log:
PR target/50447
* config/avr/avr.md: (adjust_len): Add alternative out_plus.
(addsi3): Rewrite using QI scratch register.  Adjust text
peepholes using plus:SI.
(*addsi3_zero_extend.hi): New insn.
(*subsi3_zero_extend.hi): New insn.
(*subhi3_zero_extend1): Set attribute cc to set_czn.
(*subsi3_zero_extend): Ditto.
(subsi3): Change predicate #2 to register_operand.
* config/avr/avr-protos.h (avr_out_plus): New prototype.
(avr_out_plus_1): New static function.
(avr_out_plus): New function.
(adjust_insn_length): Handle ADJUST_LEN_OUT_PLUS.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/avr/avr-protos.h
trunk/gcc/config/avr/avr.c
trunk/gcc/config/avr/avr.md


[Bug target/50447] [avr] Better support of AND, OR, XOR and PLUS with constant integers for 16- and 32-bit values

2011-09-23 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50447

--- Comment #3 from Georg-Johann Lay gjl at gcc dot gnu.org 2011-09-23 
17:06:49 UTC ---
Author: gjl
Date: Fri Sep 23 17:06:44 2011
New Revision: 179124

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=179124
Log:
* config/avr/avr.md (adjust_len): Add alternatives tsthi,
tstsi, compare.
(*cmpqi_sign_extend): Use s8_operand.
(*cmphi, *cmpsi): Rewrite using avr_out_compare.
* config/avr/avr-protos.h (compare_diff_p, compare_eq_p): Remove
prototypes.
(out_tsthi, out_tstsi): Remove prototypes.
(avr_out_tsthi, avr_out_tstsi): New prototypes.
* config/avr/avr.c (out_tsthi, out_tstsi): Remove functions.
(avr_asm_len): Negative length now sets *plen to -length.
(compare_sign_p): Return bool instead of int.
(compare_diff_p, compare_eq_p): Ditto and make static.
(avr_out_tsthi): New function.
(avr_out_tstsi): New function.
(avr_out_compare): New function.
(adjust_insn_length): Handle ADJUST_LEN_TSTHI, ADJUST_LEN_TSTSI,
ADJUST_LEN_COMPARE.
PR target/50447


Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/avr/avr-protos.h
trunk/gcc/config/avr/avr.c
trunk/gcc/config/avr/avr.md


[Bug c++/50495] Optimize exact matches in overload resolution

2011-09-23 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50495

--- Comment #6 from Paolo Carlini paolo.carlini at oracle dot com 2011-09-23 
17:08:57 UTC ---
By the way, since apparently you ran actual benchmarks, some testcases (and
relative numbers?) would not hurt here...


[Bug target/50447] [avr] Better support of AND, OR, XOR and PLUS with constant integers for 16- and 32-bit values

2011-09-23 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50447

Georg-Johann Lay gjl at gcc dot gnu.org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED

--- Comment #4 from Georg-Johann Lay gjl at gcc dot gnu.org 2011-09-23 
17:11:06 UTC ---
Closed this one as fixed for 4.7 trunk.


[Bug debug/50497] New: gcc 4.6.x '-g' option no longer emits the .debug_pubnames section

2011-09-23 Thread geir at cray dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50497

 Bug #: 50497
   Summary: gcc 4.6.x '-g' option no longer emits the
.debug_pubnames section
Classification: Unclassified
   Product: gcc
   Version: 4.6.1
Status: UNCONFIRMED
  Severity: critical
  Priority: P3
 Component: debug
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: g...@cray.com


Our performance tool collection relies on the DWARF .debug_pubnames
section to quickly find global symbols. As of GCC 4.6.0 this section is no
longer emitted when -g is specified, imposing an unnecessary hardship upon the
performance tools. Signification problems it causes includes:

1. preventing users of the tool to instrument entry points in user-defined
source code (although -finstrument-functions can circumvent this it requires a
re-compilation of source not previously required)

2. imposing a severe processing overhead penalty if using other means to gather
subprogram details for all globally defined entry points

This bug requests that the .debug_pubnames section again be emitted when -g is
specified. Otherwise, an option should be provided that will allow this as I am
sure other tools have experienced this imposition of a seemingly short-sided
decision (and least I can not find any logical reason why this section was
removed)


Test case:

$ cat abc.c

void a () { }
void b () { }
void c () { }

$

 ** Here is GCC 4.5.3 working: **

$ gcc --version
gcc (GCC) 4.5.3 20110428 (Cray Inc.)
Copyright (C) 2010 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.

$ dwarfdump abc.o   

 snip

.debug_pubnames
global a   die-in-sect 45, cu-in-sect 11, die-in-cu 45,
cu-header-in
-sect 0
global b   die-in-sect 71, cu-in-sect 11, die-in-cu 71,
cu-header-in
-sect 0
global c   die-in-sect 97, cu-in-sect 11, die-in-cu 97,
cu-header-in
-sect 0

.debug_macinfo

  snip



 ** Here is GCC 4.6.1 not working: **


$ gcc --version
gcc (GCC) 4.6.1 20110627 (Cray Inc.)
Copyright (C) 2011 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 -c -g abc.c
$ dwarfdump abc.o

 snip

.debug_pubnames

.debug_macinfo

 snip


[Bug debug/50497] gcc 4.6.x '-g' option no longer emits the .debug_pubnames section

2011-09-23 Thread geir at cray dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50497

--- Comment #1 from Geir Johansen geir at cray dot com 2011-09-23 17:20:49 
UTC ---
If there is some workaround that will enable previous behavior please add
that to this bug.


  1   2   >