Re: debugging

2011-03-23 Thread Jakub Jelinek
On Tue, Mar 22, 2011 at 03:29:26PM -0700, Ian Lance Taylor wrote:
 Mike Stump mikest...@comcast.net writes:
 
  So, I was trying to debug some stuff with the top of the tree on a suse 
  linux x86_64 box and got:
 
  (gdb) p mode
  Unhandled dwarf expression opcode 0xf3
 
  which I don't find entertaining.  I know I _could_ install a new gdb, and 
  most likely this would fix the problem, but, I don't want to do that right 
  now.  I think gcc should avoid codes that gdb doesn't support.  I rebuilt 
  with --O0, just to try and avoid the issue, and that didn't work either.  
  :-(

At -O0 -g DW_OP_GNU_entry_value isn't emitted, you need var-tracking for it,
nothing else creates it.
 
 I haven't looked, but you should be able to use, e.g., -gdwarf-2
 -gstrict-dwarf.  If that doesn't work then something has gone wrong.

Even -gdwarf-3 -gstrict-dwarf or -gdwarf-4 -gstrict-dwarf or
-fno-var-tracking-assignments will stop emitting them.
Alternatively, new enough gdb will ignore them:
http://sources.redhat.com/ml/gdb-cvs/2011-03/msg00268.html
or alternatively
http://sourceware.org/git/?p=archer.git;a=shortlog;h=refs/heads/archer-jankratochvil-entryval
is the git branch with gdb support for this, though as I was told
it is a GDB 7.4 material rather than 7.3 (the msg00268.html
commit is hopefully GDB 7.3 material).

Jakub


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Guenther
On Tue, Mar 22, 2011 at 8:43 PM, Richard Sandiford
rdsandif...@googlemail.com wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 Simple.  Just make them registers anyway (I did that in the past
 when working on middle-end arrays).  You'd set DECL_GIMPLE_REG_P
 on the decl.

 OK, thanks, I'll give that a go.  TBH, I'm still hopeful we can
 do without it, because we do seem to cope quite well as things stand.
 But I suppose that might not hold true as the examples get more complicated.

   4. a vector-of-vectors type

      Cons
         * I don't think we want that ;)

 Yeah :-)

    __builtin_load_lanes (REF : array N*M of X)
      returns array N of vector M of X
      maps to vldN on ARM
      in practice, the result would be used in assignments of the form:
        vectorY = ARRAY_REF result, Y

    __builtin_store_lanes (VECTORS : array N of vector M of X)
      returns array N*M of X
      maps to vstN on ARM
      in practice, the argument would be populated by assignments of the 
 form:
        ARRAY_REF VECTORS, Y = vectorY

    __builtin_load_lane (REF : array N of X,
                         VECTORS : array N of vector M of X,
                         LANE : integer)
      returns array N of vector M of X
      maps to vldN_lane on ARM

    __builtin_store_lane (VECTORS : array N of vector M of X,
                          LANE : integer)
      returns array N of X
      maps to vstN_lane on ARM

    __builtin_load_dup (REF : array N of X)
      returns array N of vector M of X
      maps to vldN_dup on ARM

 I've hacked up a prototype of this and it seems to produce good code.
 What do you think?

 How do you expect these to be used?  That is, would you ever expect
 components of those large vectors/arrays be used in operations
 like add, or does the HW provide vector-lane variants for those as well?

 The individual vectors would be used for add, etc.  That's what the
 ARRAY_REF stuff above is supposed to be getting at.  So...

 Thus, will

   for (i=0; iN; ++i)
     X[i] = Y[i] + Z[i];

 result in a single add per vector lane load or a single vector lane load
 for M unrolled instances of (small) vector adds?  If the latter then
 we have to think about indexing the vector lanes as well as allowing
 partial stores (or have a vector-lane construct operation).  Representing
 vector lanes as automatic memory (with array of vector type) makes
 things easy, but eventually not very efficient.

 ...Ira would know best, but I don't think it would be used for this
 kind of loop.  It would be more something like:

   for (i=0; iN; ++i)
     X[i] = Y[i].red + Y[i].blue + Y[i].green;

 (not a realistic example).  You'd then have:

    compoundY = __builtin_load_lanes (Y);
    red = ARRAY_REF compoundY, 0
    green = ARRAY_REF compoundY, 1
    blue = ARRAY_REF compoundY, 2
    D1 = red + green
    D2 = D1 + blue
    MEM_REF X = D2;

 My understanding is that'd we never do any operations besides ARRAY_REFs
 on the compound value, and that the individual vectors would be treated
 pretty much like any other.

Ok, I thought it might be used to have a larger vectorization factor for
loads and stores, basically make further unrolling cheaper because you
don't have to duplicate the loads and stores.

 I had new tree/stmt codes for array loads/stores for middle-end arrays.
 Eventually the vector lane support can at least walk in the same direction
 that middle-end arrays would ;)

 What's the status of the middle-end array stuff?  A quick search
 showed up your paper, but is it still WIP, or has it already gone in?
 (Showing my ignorance of tree-level stuff here. :-))  It does sound
 like it'd be a good fit for these ops.

Well, the work is basically suspended (though a lot of middle-end
surgery that was required went in) - I was stuck on the necessity
to have the Fortran frontend generate these expressions to have
testing on real code (rather than constructing examples from my
lame C frontend + builtins hack).  ISTR porting the patch to tuples,
the current patch seems to have two or three places that adjust
the middle-end in order to allow aggregate typed SSA names.

But as you have partial defs of the vector lane array the simplest
approach is probably to not make them a register.  Be prepared
for some surprises during RTL expansion though ;)

Richard.

 Richard



Re: Using secondary reload to reload CONST_INT?

2011-03-23 Thread Richard Sandiford
Georg-Johann Lay a...@gjlay.de writes:
 1) The internals just mention TARGET_SECONDARY_RELOAD for REG-MEM and
 for REG-REG moves, no word about REG-CONST moves. So is using
 secondary reloads for CONST_INT (or other consts) like outlined
 above a defined use case I can rely on?

Yeah, it should be.  Other targets rely on this too.  E.g. MIPS allows
integers to be stored in FPRs as well as GPRs, but you can't load a
symbolic constant directly into an FPR; it has to go through a GPR.

 2) The secondary reload hook is always called with
 regclass = GENERAL_REGS, even in cases where the class
 is known to be NO_LD_REGS like, e.g. when preparing arguments
 for a function call. Why this? I would expect to get the smallest
 available regclass. If a reg lies in LD_REGS, a secondary reload
 is not needed, but how can I know if class is always GENERAL_REGS?
 Is it ensured that secondary reload hook gets never called when
 a constraint alternative matches, like d,i?

As far as the last bit goes: once reload has decided that it needs to
reload A into B, it's uses the secondary reload hook (and only that hook)
to decide whether a secondary reload is needed.  The movsi constraints
only matter when reloading a pre-reload movsi instruction.

I think the reason you only ever see GENERAL_REGS being passed in is
because (from a quick look at avr.md) very few non-move patterns use
the d and l constraints.  They all seem to use the r constraint.
Thus reloads from those instructions will use GENERAL_REGS rather than
NO_LD_REGS.

If you want to make reload use NO_LD_REGS for these GENERAL_REGS reloads,
at least when the reloaded value is a constant, then it might be worth
defining TARGET_PREFERRED_RELOAD_CLASS.

 3) What is the unit of sri-extra_cost? Compared to COST_N_INSNS?
 Or compared to ? constraint cost?

I think it's measured in the same units as REGISTER_MOVE_COST.
(2 == a simple register move).

Richard


coreutils fails to compile wih GCC 4.6.0-rc2 but compile fine with

2011-03-23 Thread tnut
I heard you would like to release gtcc4.6.0 next week, so I quickly set up
a new pass 1 from LFS. With gcc-4.6-20110205, I Manage to compile
coreutils (and almost the all set of ports of NuTyX)  but with this
version of gcc I get stuck at coreutils in the first pass. May be it's me
but I prefer to ask your opignion. Maybe have look at the logs so far:

http://kiao.no-ip.info/NuTyX/logs/2011/i686/pass1/17_coreutils.log

You can have the all history of what I did so far. For me its very
strange, I did change much in the scripts which are doing the job:

http://kiao.no-ip.info/NuTyX/git/?p=MakeNuTyX;a=summary

Thierry





Re: coreutils fails to compile wih GCC 4.6.0-rc2 but compile fine with

2011-03-23 Thread Jakub Jelinek
On Wed, Mar 23, 2011 at 10:30:46AM +0100, t...@nutyx.com wrote:
 I heard you would like to release gtcc4.6.0 next week, so I quickly set up
 a new pass 1 from LFS. With gcc-4.6-20110205, I Manage to compile
 coreutils (and almost the all set of ports of NuTyX)  but with this
 version of gcc I get stuck at coreutils in the first pass. May be it's me
 but I prefer to ask your opignion. Maybe have look at the logs so far:
 
 http://kiao.no-ip.info/NuTyX/logs/2011/i686/pass1/17_coreutils.log

Tbat's almost certainly a user error.
The:
./configure ... --with-gmp-include=/tmp/work/src/coreutils-8.10/gmp
configure: WARNING: unrecognized options: --with-gmp-include
warning might hint you at the error.  If you don't have gmp.h available
in standard include paths, it isn't surprising the compilation fails.
Nothing to do with gcc.

Jakub


Re: Fw: RFC: Representing vector lane load/store operations

2011-03-23 Thread Ira Rosen
 ...Ira would know best, but I don't think it would be used for this
 kind of loop.  It would be more something like:

   for (i=0; iN; ++i)
     X[i] = Y[i].red + Y[i].blue + Y[i].green;

 (not a realistic example).  You'd then have:

    compoundY = __builtin_load_lanes (Y);
    red = ARRAY_REF compoundY, 0
    green = ARRAY_REF compoundY, 1
    blue = ARRAY_REF compoundY, 2
    D1 = red + green
    D2 = D1 + blue
    MEM_REF X = D2;

 My understanding is that'd we never do any operations besides ARRAY_REFs
 on the compound value, and that the individual vectors would be treated
 pretty much like any other.

 Ok, I thought it might be used to have a larger vectorization factor for
 loads and stores, basically make further unrolling cheaper because you
 don't have to duplicate the loads and stores.

Right, we can do that using vld1/vst1 instructions (full load/store
with N=1) and operate on up to 4 doubleword vectors in parallel. But
at the moment we are concentrating on efficient support of strided
memory accesses.

Ira


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Sandiford
Richard Guenther richard.guent...@gmail.com writes:
 But as you have partial defs of the vector lane array the simplest
 approach is probably to not make them a register.  Be prepared
 for some surprises during RTL expansion though ;)

OK.  It's there I'd like to start, specifically with:

  These arrays of vectors would still need to have a non-BLK mode,
  so that they can be stored in _rtl_ registers.  But we need that anyway
  for ARM's arm_neon.h; the code that today's GCC produces for the intrinsic
  functions is very poor.

because I'd like to fix the bad code we generate for intrinsics.

Thing is, this is going to be another case where the mode of a type
depends on the current target.  E.g. on ARM, we don't want to use
a 24-byte mode for an array of 3 2xSI vectors unless V2SI is also
available.  Both the mode of the vector type and the mode of the
array type will therefore depend on whether Neon is enabled.

I know you don't like the way we handle TYPE_MODE for vectors:

  #define TYPE_MODE(NODE) \
(TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \
 ? vector_type_mode (NODE) : (NODE)-type.mode)

so I'm guessing you wouldn't be too happy to see ARRAY_TYPE popping
up there as well. :-)  What's the best way of handling this?

Richard


Re: Target library disabling at toplevel

2011-03-23 Thread Richard Sandiford
Joseph S. Myers jos...@codesourcery.com writes:
 (And why (CC to maintainer) do some CRIS and MMIX targets list Fortran
 in unsupported languages?  I didn't think the Fortran libraries had
 any porting issues, unlike Java and Go and Ada.)

For the record, builds with mipsisa64-elf fail with:

libgfortran/intrinsics/time_1.h:99:1: error: static declaration of 
‘localtime_r’ follows non-static declaration
newlib/libc/include/time.h:61:12: note: previous declaration of ‘localtime_r’ 
was here

This is a long-standing problem.  It got stalled a while ago because of
a disagreement (in my eyes anyway) about how libgloss targets should be
handled.  We started down the path of using -Ttarget.ld, so that they
could be treated like other targets.  But I preferred (and still prefer)
the idea of making libgfortran handle newlib in the same way as libstdc++,
or disabling libgfortran if we don't care.  I think Rask Ingemann
Lambertsen also had a patch that used a config.cache-style approach.

Richard


Re: Target library disabling at toplevel

2011-03-23 Thread NightStrike
On Tue, Mar 22, 2011 at 6:07 PM, Ian Lance Taylor i...@google.com wrote:
 Joseph S. Myers jos...@codesourcery.com writes:

 Why do a great many targets disable libgcj by default in the toplevel
 configure.ac?

 I believe that it's just a hack: libgcj doesn't build on the target, but
 gcc/java does.  Disabling libgcj lets the gcc configure/make complete in
 a natural way.

 unsupported_languages is a clearly superior approach, but it postdates
 many of the cases in which libgcj is added to noconfigdirs.

In some cases, like for x86_64-w64-mingw (Win64), we can build gcj
fine, and we intend to support a java compiler.  However, at present,
we cannot build libgcj because the boehm-gc in the tree is several
years out of date.  Once Hans, or someone else with enough skill,
updates that, we can turn on libgcj.  Until then, we'd like to make
sure that building the compiler doesn't break.

Given how out of date certain dependencies are for libgcj, I would not
be surprised if other targets suffered the same fate.


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Guenther
On Wed, Mar 23, 2011 at 11:38 AM, Richard Sandiford
richard.sandif...@linaro.org wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 But as you have partial defs of the vector lane array the simplest
 approach is probably to not make them a register.  Be prepared
 for some surprises during RTL expansion though ;)

 OK.  It's there I'd like to start, specifically with:

  These arrays of vectors would still need to have a non-BLK mode,
  so that they can be stored in _rtl_ registers.  But we need that anyway
  for ARM's arm_neon.h; the code that today's GCC produces for the intrinsic
  functions is very poor.

 because I'd like to fix the bad code we generate for intrinsics.

 Thing is, this is going to be another case where the mode of a type
 depends on the current target.  E.g. on ARM, we don't want to use
 a 24-byte mode for an array of 3 2xSI vectors unless V2SI is also
 available.  Both the mode of the vector type and the mode of the
 array type will therefore depend on whether Neon is enabled.

 I know you don't like the way we handle TYPE_MODE for vectors:

  #define TYPE_MODE(NODE) \
    (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \
     ? vector_type_mode (NODE) : (NODE)-type.mode)

 so I'm guessing you wouldn't be too happy to see ARRAY_TYPE popping
 up there as well. :-)  What's the best way of handling this?

I'd say use either DECL_MODE at the point where we decide on
expanding vars (setting it from a target hook), or simply ask such
a hook at expansion time.  That should have worked for the target
atttribute stuff as well instead of dispatching in TYPE_MODE (types
are global and TYPE_MODE with the target attribute depends on
the context, but decls are local to the declaration context, so the
mode persists and is not dependent on the attribute). Might
need some surgery in places where we assume TYPE_MODE == DECL_MODE,
but I suspect it's mostly around RTL expansion.

Richard.

 Richard



Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Sandiford
Richard Guenther richard.guent...@gmail.com writes:
 On Wed, Mar 23, 2011 at 11:38 AM, Richard Sandiford
 richard.sandif...@linaro.org wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 But as you have partial defs of the vector lane array the simplest
 approach is probably to not make them a register.  Be prepared
 for some surprises during RTL expansion though ;)

 OK.  It's there I'd like to start, specifically with:

  These arrays of vectors would still need to have a non-BLK mode,
  so that they can be stored in _rtl_ registers.  But we need that anyway
  for ARM's arm_neon.h; the code that today's GCC produces for the intrinsic
  functions is very poor.

 because I'd like to fix the bad code we generate for intrinsics.

 Thing is, this is going to be another case where the mode of a type
 depends on the current target.  E.g. on ARM, we don't want to use
 a 24-byte mode for an array of 3 2xSI vectors unless V2SI is also
 available.  Both the mode of the vector type and the mode of the
 array type will therefore depend on whether Neon is enabled.

 I know you don't like the way we handle TYPE_MODE for vectors:

  #define TYPE_MODE(NODE) \
    (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \
     ? vector_type_mode (NODE) : (NODE)-type.mode)

 so I'm guessing you wouldn't be too happy to see ARRAY_TYPE popping
 up there as well. :-)  What's the best way of handling this?

 I'd say use either DECL_MODE at the point where we decide on
 expanding vars (setting it from a target hook), or simply ask such
 a hook at expansion time.  That should have worked for the target
 atttribute stuff as well instead of dispatching in TYPE_MODE (types
 are global and TYPE_MODE with the target attribute depends on
 the context, but decls are local to the declaration context, so the
 mode persists and is not dependent on the attribute). Might
 need some surgery in places where we assume TYPE_MODE == DECL_MODE,
 but I suspect it's mostly around RTL expansion.

Hmm, but if we do that, when is it correct to look at TYPE_MODE?

E.g. when expanding the new __builtin_load_lanes function described
earlier, it wouldn't be valid to base the target register's mode on
TYPE_MODE, so I suppose we'd have to call the hook instead.  And if we
did revert the TYPE_MODE change for vector types, the vector optabs
would need to do the same thing.  Wouldn't we just end up replacing
most/all uses of TYPE_MODE with calls to the hook?  What would any
remaining uses of TYPE_MODE actually be testing?

E.g. I suppose we really ought to do the same thing for 128-bit types,
since this:

/* TODO: This isn't correct, but as logic depends at the moment on
   host's instead of target's wide-integer.
   If there is a target not supporting TImode, but has an 128-bit
   integer-scalar register, this target check needs to be adjusted. */
if (targetm.scalar_mode_supported_p (TImode))
  {
int128_integer_type_node = make_signed_type (128);
int128_unsigned_type_node = make_unsigned_type (128);
  }

seems to apply one value of scalar_mode_supported_p to the whole compilation.
(TImode support seems to depend on TARGET_ZARCH for s390.)

Richard


Re: Cross compiler build instructions - PowerPC

2011-03-23 Thread Joseph S. Myers
On Wed, 23 Mar 2011, Rohit Arul Raj wrote:

 Hello All,
 
 I have been trying to build a cross compiler (for PowerPC) on x86_64
 linux host. I followed the build procedure given in the link below:
 
 http://www.eglibc.org/archives/patches/msg00078.html

You should be referring to the current checked-in version of this 
documentation, not a four-year-old draft.  However, it doesn't appear to 
have relevant changes.  Maxim, perhaps we should add 
--disable-decimal-float --disable-libffi --disable-libquadmath to the 
configure options for the first GCC in EGLIBC.cross-building?

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Guenther
On Wed, Mar 23, 2011 at 1:18 PM, Richard Sandiford
richard.sandif...@linaro.org wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 On Wed, Mar 23, 2011 at 11:38 AM, Richard Sandiford
 richard.sandif...@linaro.org wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 But as you have partial defs of the vector lane array the simplest
 approach is probably to not make them a register.  Be prepared
 for some surprises during RTL expansion though ;)

 OK.  It's there I'd like to start, specifically with:

  These arrays of vectors would still need to have a non-BLK mode,
  so that they can be stored in _rtl_ registers.  But we need that anyway
  for ARM's arm_neon.h; the code that today's GCC produces for the intrinsic
  functions is very poor.

 because I'd like to fix the bad code we generate for intrinsics.

 Thing is, this is going to be another case where the mode of a type
 depends on the current target.  E.g. on ARM, we don't want to use
 a 24-byte mode for an array of 3 2xSI vectors unless V2SI is also
 available.  Both the mode of the vector type and the mode of the
 array type will therefore depend on whether Neon is enabled.

 I know you don't like the way we handle TYPE_MODE for vectors:

  #define TYPE_MODE(NODE) \
    (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \
     ? vector_type_mode (NODE) : (NODE)-type.mode)

 so I'm guessing you wouldn't be too happy to see ARRAY_TYPE popping
 up there as well. :-)  What's the best way of handling this?

 I'd say use either DECL_MODE at the point where we decide on
 expanding vars (setting it from a target hook), or simply ask such
 a hook at expansion time.  That should have worked for the target
 atttribute stuff as well instead of dispatching in TYPE_MODE (types
 are global and TYPE_MODE with the target attribute depends on
 the context, but decls are local to the declaration context, so the
 mode persists and is not dependent on the attribute). Might
 need some surgery in places where we assume TYPE_MODE == DECL_MODE,
 but I suspect it's mostly around RTL expansion.

 Hmm, but if we do that, when is it correct to look at TYPE_MODE?

Most of the tree passes shouldn't care about TYPE_MODE (nor
DECL_MODE) and on RTL we shouldn't need to care about trees.

 E.g. when expanding the new __builtin_load_lanes function described
 earlier, it wouldn't be valid to base the target register's mode on
 TYPE_MODE, so I suppose we'd have to call the hook instead.

Well, you'd expand __builtin_load_lanes only if the mode is available, no?
So you know the mode in advance and don't need to get it from anywhere.

  And if we
 did revert the TYPE_MODE change for vector types, the vector optabs
 would need to do the same thing.  Wouldn't we just end up replacing
 most/all uses of TYPE_MODE with calls to the hook?  What would any
 remaining uses of TYPE_MODE actually be testing?

I think a lot of TYPE_MODE users are just lazy, like the optabs should
get a mode input and not use a type - the vectorizer knows what target
support it targets for so it can supply a proper mode.  Alternatively
extract the mode from the operands instead, using DECL_MODE.

That said, I think given that target support can change across functions
using something global like TYPE_MODE is fundamentally flawed
(unless you start doing ugly things like that callback in the TYPE_MODE
implementation).

 E.g. I suppose we really ought to do the same thing for 128-bit types,
 since this:

    /* TODO: This isn't correct, but as logic depends at the moment on
       host's instead of target's wide-integer.
       If there is a target not supporting TImode, but has an 128-bit
       integer-scalar register, this target check needs to be adjusted. */
    if (targetm.scalar_mode_supported_p (TImode))
      {
        int128_integer_type_node = make_signed_type (128);
        int128_unsigned_type_node = make_unsigned_type (128);
      }

 seems to apply one value of scalar_mode_supported_p to the whole compilation.
 (TImode support seems to depend on TARGET_ZARCH for s390.)

Well, it depends on where int128_integer_type_node is used.  I think
if the target with some settings supports TImode then we probably
want to have that type node.  At the point the user declares some vars
with it you can error out dependent on local support.  At expansion
time you'd need to check whether accesses in a given mode are
really possible and dispatch to BLKmode handling if they are not.

The tree level really doesn't care, and most TYPE_MODE uses there
are bogus - the valid ones want to check targetm._mode_supported_p
instead.  During RTL expansion we have to deal with handling modes
we don't support (or ICE, as we do now with a lot of target attribute
uses).

For your case in question the vectorizer would create local vars with
that mode, knowing it is supported, so I don't see big problems for
that particular case.

Richard.


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Sandiford
Richard Guenther richard.guent...@gmail.com writes:
 Hmm, but if we do that, when is it correct to look at TYPE_MODE?

 Most of the tree passes shouldn't care about TYPE_MODE (nor
 DECL_MODE) and on RTL we shouldn't need to care about trees.

It sounds like you think it would be better to get rid of TYPE_MODE.
I can see why that's appealing, but it also sounds very ambitious :-)
As well as all the uses in the middle-end, targets have (wrongly) tended
to use type modes to define the ABI.  It might be quite difficult to
untangle the whole mess now.

Of course, that's also an argument in favour of what you say about
TYPE_MODE not changing unless we can help it...

 For your case in question the vectorizer would create local vars with
 that mode, knowing it is supported, so I don't see big problems for
 that particular case.

The problem is that I'd like to use this for intrinsics as well as for
automatic vectorisation.  E.g. I'd like:

typedef struct int8x16x4_t
{
  int8x16_t val[4];
} int8x16x4_t;

to have non-BLKmode as well.  arm_neon.h uses this type of structure
to represent compounds vectors.  But once the type is defined (with Neon
support enabled), there's nothing to stop someone using the type
(not the intrinsics) in a function that has Neon disabled.  We mustn't
use the special mode in such cases, because there aren't enough GPRs to
store it.  It should be treated as BLKmode instead.  Which I suppose
is the same situation as...

  E.g. I suppose we really ought to do the same thing for 128-bit types,
  since this:
 
     /* TODO: This isn't correct, but as logic depends at the moment on
        host's instead of target's wide-integer.
        If there is a target not supporting TImode, but has an 128-bit
        integer-scalar register, this target check needs to be adjusted. */
     if (targetm.scalar_mode_supported_p (TImode))
       {
         int128_integer_type_node = make_signed_type (128);
         int128_unsigned_type_node = make_unsigned_type (128);
       }
 
  seems to apply one value of scalar_mode_supported_p to the whole 
  compilation.
  (TImode support seems to depend on TARGET_ZARCH for s390.)

 Well, it depends on where int128_integer_type_node is used.  I think
 if the target with some settings supports TImode then we probably
 want to have that type node.  At the point the user declares some vars
 with it you can error out dependent on local support. At expansion
 time you'd need to check whether accesses in a given mode are
 really possible and dispatch to BLKmode handling if they are not.

...this.  Do you mean that we'd error for local declarations, but fall
back to BLKmode for operations on already-defined (global) declarations?
I'm just worried that might be a bit inconsistent.

Richard


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Guenther
On Wed, Mar 23, 2011 at 2:01 PM, Richard Sandiford
richard.sandif...@linaro.org wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 Hmm, but if we do that, when is it correct to look at TYPE_MODE?

 Most of the tree passes shouldn't care about TYPE_MODE (nor
 DECL_MODE) and on RTL we shouldn't need to care about trees.

 It sounds like you think it would be better to get rid of TYPE_MODE.
 I can see why that's appealing, but it also sounds very ambitious :-)
 As well as all the uses in the middle-end, targets have (wrongly) tended
 to use type modes to define the ABI.  It might be quite difficult to
 untangle the whole mess now.

 Of course, that's also an argument in favour of what you say about
 TYPE_MODE not changing unless we can help it...

Indeed.

 For your case in question the vectorizer would create local vars with
 that mode, knowing it is supported, so I don't see big problems for
 that particular case.

 The problem is that I'd like to use this for intrinsics as well as for
 automatic vectorisation.  E.g. I'd like:

 typedef struct int8x16x4_t
 {
  int8x16_t val[4];
 } int8x16x4_t;

 to have non-BLKmode as well.  arm_neon.h uses this type of structure
 to represent compounds vectors.  But once the type is defined (with Neon
 support enabled), there's nothing to stop someone using the type
 (not the intrinsics) in a function that has Neon disabled.  We mustn't
 use the special mode in such cases, because there aren't enough GPRs to
 store it.  It should be treated as BLKmode instead.  Which I suppose
 is the same situation as...

I'd use non-BLKmode for the above unconditionally.

  E.g. I suppose we really ought to do the same thing for 128-bit types,
  since this:
 
     /* TODO: This isn't correct, but as logic depends at the moment on
        host's instead of target's wide-integer.
        If there is a target not supporting TImode, but has an 128-bit
        integer-scalar register, this target check needs to be adjusted. */
     if (targetm.scalar_mode_supported_p (TImode))
       {
         int128_integer_type_node = make_signed_type (128);
         int128_unsigned_type_node = make_unsigned_type (128);
       }
 
  seems to apply one value of scalar_mode_supported_p to the whole 
  compilation.
  (TImode support seems to depend on TARGET_ZARCH for s390.)

 Well, it depends on where int128_integer_type_node is used.  I think
 if the target with some settings supports TImode then we probably
 want to have that type node.  At the point the user declares some vars
 with it you can error out dependent on local support. At expansion
 time you'd need to check whether accesses in a given mode are
 really possible and dispatch to BLKmode handling if they are not.

 ...this.  Do you mean that we'd error for local declarations, but fall
 back to BLKmode for operations on already-defined (global) declarations?
 I'm just worried that might be a bit inconsistent.

I'd say if somebody writes

v4sf float_vec;

void __attribute__((target(no-sse)))
foo (void)
{
  float_vec += float_vec;
}

he deserves to get a diagnostic.  Thus, even for global decls I think we
can reject such uses.  Complication arises whenever we do not see
a decl, like for

void foo(v4sf *x)
{
}

which we could of course reject (at function definition time) if an
unsupported type is used in this way.  But the function might
not even dereference that pointer ...

That said, I think for your case in question we should set possible
target attribute issues aside (because we have those issues already).
In that case you wouldn't need to touch TYPE_MODE at all as
it would have non-BLKmode as soon as you create a vector-lane
type or decl?

And I still think that only changing DECL_MODEs based on
target attributes and not TYPE_MODEs is appealing ;)

Richard.


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Sandiford
Richard Guenther richard.guent...@gmail.com writes:
 For your case in question the vectorizer would create local vars with
 that mode, knowing it is supported, so I don't see big problems for
 that particular case.

 The problem is that I'd like to use this for intrinsics as well as for
 automatic vectorisation.  E.g. I'd like:

 typedef struct int8x16x4_t
 {
  int8x16_t val[4];
 } int8x16x4_t;

 to have non-BLKmode as well.  arm_neon.h uses this type of structure
 to represent compounds vectors.  But once the type is defined (with Neon
 support enabled), there's nothing to stop someone using the type
 (not the intrinsics) in a function that has Neon disabled.  We mustn't
 use the special mode in such cases, because there aren't enough GPRs to
 store it.  It should be treated as BLKmode instead.  Which I suppose
 is the same situation as...

 I'd use non-BLKmode for the above unconditionally.

But without Neon, there aren't enough registers to store the structure.
Any use of the Neon mode would just lead to a reload failure.  Even if
we think it's not sensible to use the type without Neon, we need a better
diagnostic than that.

So I think this mode has to be conditional in exactly the way that
vector modes are, or be subject to the same diagnostics that you
were suggesting for 128-bit types.

I was actually thinking along the lines of having a target hook such as:

   array_mode_supported_p (tree elemtype, unsigned HOST_WIDE_INT size)

which would return true if ELEMTYPE[SIZE] should use non-BLKmode where
possible.  When it returns true, we'd pass 0 rather than 1 to this
mode_for_size_tree call (from the ARRAY_TYPE case in layout_type):

/* One-element arrays get the component type's mode.  */
if (simple_cst_equal (TYPE_SIZE (type),
  TYPE_SIZE (TREE_TYPE (type
  SET_TYPE_MODE (type, TYPE_MODE (TREE_TYPE (type)));
else
  SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type),
   MODE_INT, 1));

This would have the advantage (as I see it) of working with the
generic vector extensions too.  E.g. if a user defines their own
3-element-array-of-vector type, they would benefit from the same
handling as the Neon-specific intrinsics and the vectoriser-generated
arrays.

We still make generic vectors available when there's no underlying
hardware support, so I'd have expected these 3-element-array-of-vector
types to be available too.  That's why I prefer the idea of making the
mode conditional, as for vector types, rather than rejecting uses of
the type outright.

But from this:

 I'd say if somebody writes

 v4sf float_vec;

 void __attribute__((target(no-sse)))
 foo (void)
 {
   float_vec += float_vec;
 }

 he deserves to get a diagnostic.  Thus, even for global decls I think we
 can reject such uses.  Complication arises whenever we do not see
 a decl, like for

 void foo(v4sf *x)
 {
 }

 which we could of course reject (at function definition time) if an
 unsupported type is used in this way.  But the function might
 not even dereference that pointer ...

it sounds like you think there's no point supporting generic vectors
when no underlying hardware support is available.

 And I still think that only changing DECL_MODEs based on
 target attributes and not TYPE_MODEs is appealing ;)

Understood.  I just think that, if we do that, we really should
get rid of TYPE_MODE (as a global property) as well, otherwise there'd
be even more chaos than there is now.  And that sounds like it could
be several months' work in itself.

Richard


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Guenther
On Wed, Mar 23, 2011 at 3:13 PM, Richard Sandiford
richard.sandif...@linaro.org wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 For your case in question the vectorizer would create local vars with
 that mode, knowing it is supported, so I don't see big problems for
 that particular case.

 The problem is that I'd like to use this for intrinsics as well as for
 automatic vectorisation.  E.g. I'd like:

 typedef struct int8x16x4_t
 {
  int8x16_t val[4];
 } int8x16x4_t;

 to have non-BLKmode as well.  arm_neon.h uses this type of structure
 to represent compounds vectors.  But once the type is defined (with Neon
 support enabled), there's nothing to stop someone using the type
 (not the intrinsics) in a function that has Neon disabled.  We mustn't
 use the special mode in such cases, because there aren't enough GPRs to
 store it.  It should be treated as BLKmode instead.  Which I suppose
 is the same situation as...

 I'd use non-BLKmode for the above unconditionally.

 But without Neon, there aren't enough registers to store the structure.
 Any use of the Neon mode would just lead to a reload failure.  Even if
 we think it's not sensible to use the type without Neon, we need a better
 diagnostic than that.

 So I think this mode has to be conditional in exactly the way that
 vector modes are, or be subject to the same diagnostics that you
 were suggesting for 128-bit types.

 I was actually thinking along the lines of having a target hook such as:

   array_mode_supported_p (tree elemtype, unsigned HOST_WIDE_INT size)

 which would return true if ELEMTYPE[SIZE] should use non-BLKmode where
 possible.  When it returns true, we'd pass 0 rather than 1 to this
 mode_for_size_tree call (from the ARRAY_TYPE case in layout_type):

            /* One-element arrays get the component type's mode.  */
            if (simple_cst_equal (TYPE_SIZE (type),
                                  TYPE_SIZE (TREE_TYPE (type
              SET_TYPE_MODE (type, TYPE_MODE (TREE_TYPE (type)));
            else
              SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type),
                                                       MODE_INT, 1));

 This would have the advantage (as I see it) of working with the
 generic vector extensions too.  E.g. if a user defines their own
 3-element-array-of-vector type, they would benefit from the same
 handling as the Neon-specific intrinsics and the vectoriser-generated
 arrays.

So the 3-element-array-of-vector type has the vector mode of a single
element?  I'm confused.  I also don't see how a user could want to
have a non-BLK mode on such array types (consider them being
part of a struct - how would that affect argument passing and other
ABI details?).

 We still make generic vectors available when there's no underlying
 hardware support, so I'd have expected these 3-element-array-of-vector
 types to be available too.  That's why I prefer the idea of making the
 mode conditional, as for vector types, rather than rejecting uses of
 the type outright.

 But from this:

 I'd say if somebody writes

 v4sf float_vec;

 void __attribute__((target(no-sse)))
 foo (void)
 {
   float_vec += float_vec;
 }

 he deserves to get a diagnostic.  Thus, even for global decls I think we
 can reject such uses.  Complication arises whenever we do not see
 a decl, like for

 void foo(v4sf *x)
 {
 }

 which we could of course reject (at function definition time) if an
 unsupported type is used in this way.  But the function might
 not even dereference that pointer ...

 it sounds like you think there's no point supporting generic vectors
 when no underlying hardware support is available.

Well, I meant if the user compiles with -msse, declares such a
global var (which means it gets V4SFmode and not BLKmode)
and then uses it in a function where he explicitly disables SSE
then something is wrong.  If he declares a BLKmode global
then generic vector support will happily trigger and make it work.

I realize this is all a bit tricky and probably nobody properly designed
the target attribute stuff with all these details in mind.  But now
we have to live with it ... :(

 And I still think that only changing DECL_MODEs based on
 target attributes and not TYPE_MODEs is appealing ;)

 Understood.  I just think that, if we do that, we really should
 get rid of TYPE_MODE (as a global property) as well, otherwise there'd
 be even more chaos than there is now.  And that sounds like it could
 be several months' work in itself.

True.  But I like the idea of TYPE_MODE becoming even more dynamic
even less.

If it's just three element array-of-vector types you need why not expose
it via attribute((mode(xyz))) only?  You could alias that mode to BLKmode
if neon is not enabled ...

Richard.


Re: RFC: Representing vector lane load/store operations

2011-03-23 Thread Richard Sandiford
Richard Guenther richard.guent...@gmail.com writes:
 On Wed, Mar 23, 2011 at 3:13 PM, Richard Sandiford
 richard.sandif...@linaro.org wrote:
 Richard Guenther richard.guent...@gmail.com writes:
 For your case in question the vectorizer would create local vars with
 that mode, knowing it is supported, so I don't see big problems for
 that particular case.

 The problem is that I'd like to use this for intrinsics as well as for
 automatic vectorisation.  E.g. I'd like:

 typedef struct int8x16x4_t
 {
  int8x16_t val[4];
 } int8x16x4_t;

 to have non-BLKmode as well.  arm_neon.h uses this type of structure
 to represent compounds vectors.  But once the type is defined (with Neon
 support enabled), there's nothing to stop someone using the type
 (not the intrinsics) in a function that has Neon disabled.  We mustn't
 use the special mode in such cases, because there aren't enough GPRs to
 store it.  It should be treated as BLKmode instead.  Which I suppose
 is the same situation as...

 I'd use non-BLKmode for the above unconditionally.

 But without Neon, there aren't enough registers to store the structure.
 Any use of the Neon mode would just lead to a reload failure.  Even if
 we think it's not sensible to use the type without Neon, we need a better
 diagnostic than that.

 So I think this mode has to be conditional in exactly the way that
 vector modes are, or be subject to the same diagnostics that you
 were suggesting for 128-bit types.

 I was actually thinking along the lines of having a target hook such as:

   array_mode_supported_p (tree elemtype, unsigned HOST_WIDE_INT size)

 which would return true if ELEMTYPE[SIZE] should use non-BLKmode where
 possible.  When it returns true, we'd pass 0 rather than 1 to this
 mode_for_size_tree call (from the ARRAY_TYPE case in layout_type):

            /* One-element arrays get the component type's mode.  */
            if (simple_cst_equal (TYPE_SIZE (type),
                                  TYPE_SIZE (TREE_TYPE (type
              SET_TYPE_MODE (type, TYPE_MODE (TREE_TYPE (type)));
            else
              SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type),
                                                       MODE_INT, 1));

 This would have the advantage (as I see it) of working with the
 generic vector extensions too.  E.g. if a user defines their own
 3-element-array-of-vector type, they would benefit from the same
 handling as the Neon-specific intrinsics and the vectoriser-generated
 arrays.

 So the 3-element-array-of-vector type has the vector mode of a single
 element?

No, it has a wider, non-vector mode.  At the moment, ARM uses integer
modes for this, and after trying a few variations, I think that's
actually the best compromise.  So the uint8x16x4_t ought to have a
64-byte integer type(!), which ARM defines as XImode:

INT_MODE (XI, 64);

 I also don't see how a user could want to have a non-BLK mode on such
 array types (consider them being part of a struct - how would that
 affect argument passing and other ABI details?).

The point is that we shouldn't use the mode for the ABI anyway.  Even the
intrinsic-defined types (like uint8x16x4_t above) should be passed in
the same way as BLKmode structures would.

 I'd say if somebody writes

 v4sf float_vec;

 void __attribute__((target(no-sse)))
 foo (void)
 {
   float_vec += float_vec;
 }

 he deserves to get a diagnostic.  Thus, even for global decls I think we
 can reject such uses.  Complication arises whenever we do not see
 a decl, like for

 void foo(v4sf *x)
 {
 }

 which we could of course reject (at function definition time) if an
 unsupported type is used in this way.  But the function might
 not even dereference that pointer ...

 it sounds like you think there's no point supporting generic vectors
 when no underlying hardware support is available.

 Well, I meant if the user compiles with -msse, declares such a
 global var (which means it gets V4SFmode and not BLKmode)
 and then uses it in a function where he explicitly disables SSE
 then something is wrong.  If he declares a BLKmode global
 then generic vector support will happily trigger and make it work.

Ah, OK.  I'm just not sure whether, to take a MIPS example,
MIPS16 functions in a -mno-mips16 compile should behave
differently from unannotated functions in a -mips16 compile.

 If it's just three element array-of-vector types you need why not expose
 it via attribute((mode(xyz))) only?  You could alias that mode to BLKmode
 if neon is not enabled ...

I don't think that really changes anything.  Getting the non-BLK mode
on the array type seems like the easy part.  The difficult part is
dealing with the fallout when the array is defined in a Neon context
and used in a non-Neon context.

Richard


[pph] Adapting LTO streaming for front end AST saving

2011-03-23 Thread Diego Novillo
Over at the PPH branch we are starting to re-use the LTO streaming
routines to save front end trees.  Clearly, there are things that need
to be extended and/or replaced since LTO streaming assumes that we are
in GIMPLE.  However, there is a large intersection that I think can be
commoned out.

- ASTs do not need to concern themselves with language differences.
They are generated and consumed by cc1plus, so saving
language-dependent information is fine.
- LTO streaming has several checks and assumptions that prevent
non-gimple trees (e.g., DECL_SAVED_TREE must be NULL).

I'm looking for opinions on what would be the best approach to factor
out the common code.  So far, I have created a layer of routines and
data structures that the front end calls to manipulate PPH files.
These are wrappers on top of LTO streaming that deal with all the
sections, buffers and streams used by LTO.

I was thinking of using langhooks to do things like checks (like the
check for DECL_SAVED_TREE in
lto_output_ts_decl_non_common_tree_pointers or the asserts in
lto_get_common_nodes).  I'm expecting that there will be other things,
like handling more tree nodes in the tree streaming routines.  But
everything else seems to be already sufficiently flexible for our
needs.

Thoughts?


Thanks.  Diego.


Re: [pph] Adapting LTO streaming for front end AST saving

2011-03-23 Thread Richard Guenther
On Wed, 23 Mar 2011, Diego Novillo wrote:

 Over at the PPH branch we are starting to re-use the LTO streaming
 routines to save front end trees.  Clearly, there are things that need
 to be extended and/or replaced since LTO streaming assumes that we are
 in GIMPLE.  However, there is a large intersection that I think can be
 commoned out.
 
 - ASTs do not need to concern themselves with language differences.
 They are generated and consumed by cc1plus, so saving
 language-dependent information is fine.
 - LTO streaming has several checks and assumptions that prevent
 non-gimple trees (e.g., DECL_SAVED_TREE must be NULL).
 
 I'm looking for opinions on what would be the best approach to factor
 out the common code.  So far, I have created a layer of routines and
 data structures that the front end calls to manipulate PPH files.
 These are wrappers on top of LTO streaming that deal with all the
 sections, buffers and streams used by LTO.
 
 I was thinking of using langhooks to do things like checks (like the
 check for DECL_SAVED_TREE in
 lto_output_ts_decl_non_common_tree_pointers or the asserts in
 lto_get_common_nodes).  I'm expecting that there will be other things,
 like handling more tree nodes in the tree streaming routines.  But
 everything else seems to be already sufficiently flexible for our
 needs.
 
 Thoughts?

Yes, Micha has a load of patches cleaning up streaming and removing
unecessary abstraction.  So, why'd you need to share any of it?  I
think it would be much easier if you worked with a copy (ugh,
streaming trees again).

Richard.


Re: [pph] Adapting LTO streaming for front end AST saving

2011-03-23 Thread Diego Novillo
On Wed, Mar 23, 2011 at 10:53, Richard Guenther rguent...@suse.de wrote:

 Yes, Micha has a load of patches cleaning up streaming and removing
 unecessary abstraction.  So, why'd you need to share any of it?

Removing unnecessary abstraction is fine.  But there is a bunch of
code that will be common, in particular: building string index tables,
symbol tables (the decl index), reading/writing hooks to use other
file formats (pph are not elf files) and basic trees (particularly,
decls, constants, expressions).

We could add anything that is specific to the front end we can add
with callbacks.  But duplicating all that common code seems wasteful.


Diego.


Re: [pph] Adapting LTO streaming for front end AST saving

2011-03-23 Thread Jan Hubicka
 On Wed, 23 Mar 2011, Diego Novillo wrote:
 
  Over at the PPH branch we are starting to re-use the LTO streaming
  routines to save front end trees.  Clearly, there are things that need
  to be extended and/or replaced since LTO streaming assumes that we are
  in GIMPLE.  However, there is a large intersection that I think can be
  commoned out.
  
  - ASTs do not need to concern themselves with language differences.
  They are generated and consumed by cc1plus, so saving
  language-dependent information is fine.
  - LTO streaming has several checks and assumptions that prevent
  non-gimple trees (e.g., DECL_SAVED_TREE must be NULL).
  
  I'm looking for opinions on what would be the best approach to factor
  out the common code.  So far, I have created a layer of routines and
  data structures that the front end calls to manipulate PPH files.
  These are wrappers on top of LTO streaming that deal with all the
  sections, buffers and streams used by LTO.
  
  I was thinking of using langhooks to do things like checks (like the
  check for DECL_SAVED_TREE in
  lto_output_ts_decl_non_common_tree_pointers or the asserts in
  lto_get_common_nodes).  I'm expecting that there will be other things,
  like handling more tree nodes in the tree streaming routines.  But
  everything else seems to be already sufficiently flexible for our
  needs.
  
  Thoughts?
 
 Yes, Micha has a load of patches cleaning up streaming and removing
 unecessary abstraction.  So, why'd you need to share any of it?  I

Cool, I also have some.

 think it would be much easier if you worked with a copy (ugh,
 streaming trees again).

I also think using same machinery for FE/gimple is a mistake.  Trees are making
life hard since they are interface in between FE-gimplifier, part of gimple,
interface for RTL expansion and way we represent debug info.

Those are not neccesarily related things and tying them together makes 
things harder to optimize  cleanup.

I would rather see well define Gimple bitcode rather than designing common
format to handle PCHs, LTO and external templates on the top of existing trees.

Honza

 
 Richard.


Re: [pph] Adapting LTO streaming for front end AST saving

2011-03-23 Thread Diego Novillo
On Wed, Mar 23, 2011 at 12:38, Jan Hubicka hubi...@ucw.cz wrote:

 think it would be much easier if you worked with a copy (ugh,
 streaming trees again).

 I also think using same machinery for FE/gimple is a mistake.  Trees are 
 making
 life hard since they are interface in between FE-gimplifier, part of gimple,
 interface for RTL expansion and way we represent debug info.

Yes, but this is only part of the common machinery.  I'm actually more
interested in the other functionality.  Keeping string tables, symbol
tables, file sections, ability to stream shared pointers by creating
references, etc.

As gimple gets rid of trees, we can transition that code into the
front end.  The common code that remains, we can add hooks so each
user implements its own functionality.

 Those are not neccesarily related things and tying them together makes
 things harder to optimize  cleanup.

No, that's not the intent.  I simply want to re-use common code.  We
will have streamers for debug info, and passes have their own
streamers.  PPH is adding another streamer in the front end.  All I'm
looking for is to have a set of common streaming code I can use.

 I would rather see well define Gimple bitcode rather than designing common
 format to handle PCHs, LTO and external templates on the top of existing 
 trees.

In as much as gimple is still using tree codes, those would remain in
common code.  As gimple gets rid of trees, we handle those in the
front end.  So, I don't think that will be a problem.


Diego.


Re: Target library disabling at toplevel

2011-03-23 Thread Paolo Bonzini

On 03/22/2011 08:51 PM, Joseph S. Myers wrote:

Why do a great many targets disable libgcj by default in the toplevel
configure.ac?


Because that dates to before 2004, which IIRC is when toplevel 
configure.ac started looking at config-lang.in files.


Paolo


Re: debugging

2011-03-23 Thread Jan Kratochvil
On Wed, 23 Mar 2011 08:51:25 +0100, Jakub Jelinek wrote:
 http://sourceware.org/git/?p=archer.git;a=shortlog;h=refs/heads/archer-jankratochvil-entryval
 is the git branch with gdb support for this, though as I was told
 it is a GDB 7.4 material rather than 7.3 (the msg00268.html
 commit is hopefully GDB 7.3 material).

Yes it is on HEAD, 7.3 is not yet branched, gdb-7.3 will consider 0xf3 as
standard optimized out (like before the gcc patch).  Discussed at:
[patch] [entryval] fixup: Unhandled dwarf expression opcode 0xf3
http://sourceware.org/ml/gdb-patches/2011-03/msg00965.html

GDB is now in something like stage 3 for gdb-7.3.  The full support from
archer-jankratochvil-entryval will go in GDB HEAD after 7.3 gets
branched/released.


Thanks,
Jan


Re: [pph] Adapting LTO streaming for front end AST saving

2011-03-23 Thread Diego Novillo
This thread spilled into IRC chatter.  I think we stopped talking past
each other now:

(2011-03-23 12:51:34) froydnj: dnovillo: gimple gets rid of trees?
how does that work?
(2011-03-23 12:52:29) dnovillo: froydnj: we've been talking about
tuplifying more, but i don't think it makes sense past certain point
(say, _CST, IDENTIFIERS, DECLs, etc)
(2011-03-23 12:53:05) dnovillo: i wasn't clear in my initial message,
i think that's what confused honza and richi
(2011-03-23 12:58:26) honza: dnovillo: What would be really nice to
have is an sane (from middle end POV) type representation.  Tree types
makes life quite hard, especially at WPA time.
(2011-03-23 12:58:35) honza: because they tie way too many things together
(2011-03-23 12:59:03) honza: but indeed gimplified/tuplified types are
quite intrusive change.
(2011-03-23 12:59:18) dnovillo: honza: agreed.  but i want to make
sure my point is clear.  i want to reuse common streaming code.  it's
more than just pickling trees.
(2011-03-23 13:00:06) dnovillo: honza: there will be things we will
never change out of trees, so that will stay in common code.  if/when
we start getting rid of trees in gimple, it will make sense to take
that code out of lto-streamer*.c and move it into tree-streamer*c or
some such.
(2011-03-23 13:00:30) dnovillo: does that clarify things?
(2011-03-23 13:02:53) honza: dnovillo: Well, I am trying to get
cleaner idea where we want to go with streaming WRT LTO and WPA in
longer term.  It is obvious that gread deal of ineffecitvity coes from
fact that we stream blindly all the data we currently have in our tree
nodes = a lot of things that is never really used in middle-end.
(2011-03-23 13:03:34) honza: plus I really think we want defined
bytecode in longer run and trees makes this hard too.
(2011-03-23 13:03:35) matz: honza: I'm currently working quite hard to
do merging while reading in the global state, and to reduce the stuff
we have to put into global state.
(2011-03-23 13:03:44) dnovillo: honza: sure.  and we want to get rid
of as much as we can there.
(2011-03-23 13:04:06) matz: But now the IPA passes are quite a road-block :/
(2011-03-23 13:04:17) dnovillo: honza: but i don't want to simply toss
out that pickling code.  i want to move it to tree-streamer*
(2011-03-23 13:04:18) honza: matz: Why?
(2011-03-23 13:04:38) dnovillo: honza: so that we can use from FEs
that want to pickle trees.
(2011-03-23 13:04:40) matz: honza: I managed to get quite far with
merging symbols before reading in the cgraph.
(2011-03-23 13:04:58) honza: matz: and now you need to merge summaries, I see ;)
(2011-03-23 13:05:19) matz: honza: Exactly.  And the info in those
summaries is currently not always self-contained.
(2011-03-23 13:05:59) honza: dnovillo: hmm, I really don't know here.
On one hand clearly I would like to see more separation of gimple and
frontend ASTs. on the other side with current state of affairs I see
that not sharing streamer code is just impractical code duplication...
(2011-03-23 13:06:02) matz: honza: For instance the ipa-prop info
doesn't stream out the number of params, and also depends on the
callee list at stream-in to be exactly as when streaming out.
(2011-03-23 13:06:24) dnovillo: honza: now you lost me.  what?
(2011-03-23 13:08:11) honza: dnovillo: for LTO it makes a lot sense
when the way you stream function bodies is well defined VM (well, like
LLVM). We can't reach this when we will just keep saving our trees
without any more strict specification
(2011-03-23 13:08:38) honza: for AST in FE you have different
requirements, even when they happens to be represented by same tree *
structure in GCC.
(2011-03-23 13:08:51) dnovillo: honza: sure.  i agree with that completely.
(2011-03-23 13:09:18) honza: that is flawed design.  So i am just
concerned that merging the streamer implemetnation still goes
indirection of reusing tree for both purposes.
(2011-03-23 13:09:55) dnovillo: honza: i am not talking about merging
anything.  i don't know how to explain this.  let me try again.
(2011-03-23 13:10:04) dnovillo: honza: there's a bunch of streaming
code that has nothing to do with pickling.
(2011-03-23 13:10:05) honza: but I guess without going all the way and
designing gimple way of implementing tuples/debug info etc. there is
not much help.
(2011-03-23 13:10:28) dnovillo: honza: that code is commonable and
re-usable from various places.
(2011-03-23 13:10:30) dnovillo: right?
(2011-03-23 13:10:59) honza: OK. Depends on how high level of
streaming logic you think of.
(2011-03-23 13:11:21) dnovillo: (keeping of string tables, streams,
sections, hooks to read/write, etc)
(2011-03-23 13:11:35) honza: yep, that is fine for sure.
(2011-03-23 13:11:39) dnovillo: honza: the *pickling* code is what you
are worried about.
(2011-03-23 13:11:50) honza: OK, I guess we are in sync then :0
(2011-03-23 13:12:00) honza: Yes, getting this separated and with
clean API is good idea.
(2011-03-23 13:12:17) matz: And even the pickling code currently can

-Wconversion is very poor

2011-03-23 Thread Lisp2D

I've turned on all warnings to have clean program. 
Turn on -Wconversion but it will not care about BIG trouble in C++:
conversion.

class A{
public:
A(unsigned  int){}
};

class B{
public:
B(A){}
};

B b(-1); //OK without warnings
int main(void){}


-1 = A(FF..FF) = B(FF..FF)
I want to see all program like:

B b(A(-1));

Which warning I must to set?

-- 
View this message in context: 
http://old.nabble.com/-Wconversion-is-very-poor-tp3197p3197.html
Sent from the gcc - Dev mailing list archive at Nabble.com.



Re: -Wconversion is very poor

2011-03-23 Thread Jonathan Wakely
On 23 March 2011 17:58, Lisp2D wrote:

 I've turned on all warnings to have clean program.
 Turn on -Wconversion but it will not care about BIG trouble in C++:
 conversion.

 class A{
 public:
 A(unsigned      int){}
 };

 class B{
 public:
 B(A){}
 };

 B b(-1); //OK without warnings
 int     main(void){}

 
 -1 = A(FF..FF) = B(FF..FF)
 I want to see all program like:

 B b(A(-1));

 Which warning I must to set?

Your question is inappropriate for this mailing list, questions about
using or building gcc should go to gcc-h...@gcc.gnu.org

Please take any follow up question to that list, thanks.

As clearly documented in the manual, you need -Wsign-conversion in C++
http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/Warning-Options.html#index-Wconversion-368


Re: Pruning for torture tests?

2011-03-23 Thread Rainer Orth
Hi Iain,

 On Darwin, we have a number of gcc.c-torture fails reported for both ppc
 and i386 which are bogus (nothing to do with gcc - but simply  warning
 output from a system tool).

 For dg-based tests these are pruned - I wonder if it would be worth adding
 a prune capability to the torture suites?

IMO this is the wrong approach.  I'd like us to move away from the
non-dg testsuites if at all possible.  I had a quick look and it seems
doable, but a complete cleanup of the testsuites is a giant task ;-)

Rainer

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


Re: Pruning for torture tests?

2011-03-23 Thread IainS

Hi Rainer,

On 23 Mar 2011, at 18:45, Rainer Orth wrote:


On Darwin, we have a number of gcc.c-torture fails reported for  
both ppc
and i386 which are bogus (nothing to do with gcc - but simply   
warning

output from a system tool).

For dg-based tests these are pruned - I wonder if it would be worth  
adding

a prune capability to the torture suites?


IMO this is the wrong approach.  I'd like us to move away from the
non-dg testsuites if at all possible.


I personally agree...

... but when I suggested this for the (relatively small) ObjC set of  
torture tests, it was not greeted enthusiastically...


(the  problem voiced,  IIRC, is of maintaining audit history of test  
pass/fails)


... I'd imagine that this would be amplified 100x for the other  
torture suites.


Iain




Re: Pruning for torture tests?

2011-03-23 Thread Rainer Orth
Hi Iain,

 IMO this is the wrong approach.  I'd like us to move away from the
 non-dg testsuites if at all possible.

 I personally agree...

 ... but when I suggested this for the (relatively small) ObjC set of
 torture tests, it was not greeted enthusiastically...

 (the  problem voiced,  IIRC, is of maintaining audit history of test
 pass/fails)

indeed, and I wouldn't certainly advocate moving the tests around, just
using a different dg-based driver for the torture testsuites.

 ... I'd imagine that this would be amplified 100x for the other torture
 suites.

This would clearly be unacceptable.

Rainer

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


Re: Pruning for torture tests?

2011-03-23 Thread Joseph S. Myers
On Wed, 23 Mar 2011, Rainer Orth wrote:

 indeed, and I wouldn't certainly advocate moving the tests around, just
 using a different dg-based driver for the torture testsuites.

gcc.c-torture/compile.exp was moved to using the dg driver a long time 
ago, moving the others (so that .x files are no longer needed, and so that 
people don't get confused and add dg- directives to individual tests that 
have no effect - PR 20567) certainly seems like a good idea.

-- 
Joseph S. Myers
jos...@codesourcery.com


[Bug c++/48247] New: Options -std=gnu++0x -pedantic -Werror produce [-Werror=edantic]

2011-03-23 Thread Denis.Excoffier at airbus dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48247

   Summary: Options -std=gnu++0x -pedantic -Werror produce
[-Werror=edantic]
   Product: gcc
   Version: 4.6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: denis.excoff...@airbus.com


I use GCC 4.6.0 RC 20110314 or 20110321.

% cat foo.cc
#include cstdio

//
int main() {
//
  printf(hello world!\n);
};
% gcc -O -o foo -std=gnu++0x -pedantic -Werror foo.cc
foo.cc:7:2: error: extra ';' [-Werror=edantic]
cc1plus: all warnings being treated as errors

%

Should be [-Werror=pedantic] at least.


[Bug c++/48247] Options -std=gnu++0x -pedantic -Werror produce [-Werror=edantic]

2011-03-23 Thread Denis.Excoffier at airbus dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48247

--- Comment #1 from Denis Excoffier Denis.Excoffier at airbus dot com 
2011-03-23 06:57:23 UTC ---
Okay, see also PR44774. Sorry for the noise.


[Bug c++/45437] Loses reference during update

2011-03-23 Thread phorgan1 at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45437

Patrick Horgan phorgan1 at gmail dot com changed:

   What|Removed |Added

 CC||phorgan1 at gmail dot com

--- Comment #16 from Patrick Horgan phorgan1 at gmail dot com 2011-03-23 
07:03:09 UTC ---
Confirming that this is still occurring in gcc (GCC) 4.6.0 20110113
(experimental) where this code:

int
main()
{
bool b1, b2, b3;
b1 = b2 = b3 = true;
b1 |= b2 |= b1 |=b3;
}

results in the error message:

testit.cpp:10:24: warning: operation on ‘b1’ may be undefined
[-Wsequence-point]


[Bug target/46072] AIX linker chokes on debug info for uninitialized static variables

2011-03-23 Thread michael.haubenwallner at salomon dot at
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46072

--- Comment #11 from Michael Haubenwallner michael.haubenwallner at salomon 
dot at 2011-03-23 07:46:49 UTC ---
(In reply to comment #10)
 IZ81343 (or one of its sister APARs) fixes the original issue.  But, it leaves
 a new issue.  The new error looks like:

Perry, have you seen this on AIX 5.3 or 6.1 ?


[Bug c++/48196] [C++0x] ICE on inclusion of utility, decltype

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

--- Comment #3 from Paolo Carlini paolo.carlini at oracle dot com 2011-03-23 
08:43:48 UTC ---
Can you try either current mainline or 4_6-branch (would be 4.6.0), because
quite a few fixes went into those and if the issue isn't a regression and
affects only older branches is very unlikely to be fixed.


[Bug preprocessor/48248] New: Wrong error message location when compiling preprocessed code

2011-03-23 Thread joerg.rich...@pdv-fs.de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48248

   Summary: Wrong error message location when compiling
preprocessed code
   Product: gcc
   Version: 4.5.2
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: preprocessor
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: joerg.rich...@pdv-fs.de


$ cat  foobar.h  EOF
enum Foo
{
  BAR
};
#define BAR(x) 
#define BARBAR BAR
EOF

$ cat  main.cc  EOF
#include foobar.h



void func()
{
  (void)BARBAR;
  aaa;
}
EOF

$ g++ -c main.cc
main.cc: In function 'void func()':
main.cc:8:3: error: 'aaa' was not declared in this scope

$ g++ -E main.cc  main.ii
$ g++ -c main.ii
foobar.h: In function 'void func()':
foobar.h:8:3: error: 'aaa' was not declared in this scope

Please notice the wrong filename when compiling the preprocessed source.

GCC 4.4 doesn't have this problem.


[Bug c++/48247] Options -std=gnu++0x -pedantic -Werror produce [-Werror=edantic]

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

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||DUPLICATE

--- Comment #2 from Jonathan Wakely redi at gcc dot gnu.org 2011-03-23 
09:04:48 UTC ---
dup

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


[Bug c/44774] -Werror=edantic

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

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

 CC||Denis.Excoffier at airbus
   ||dot com

--- Comment #13 from Jonathan Wakely redi at gcc dot gnu.org 2011-03-23 
09:04:48 UTC ---
*** Bug 48247 has been marked as a duplicate of this bug. ***


[Bug target/45233] FAIL: gcc.c-torture/compile/pr44707.c

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

Iain Sandoe iains at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2011.03.23 09:26:39
 CC||iains at gcc dot gnu.org,
   ||mrs at gcc dot gnu.org
 Ever Confirmed|0   |1

--- Comment #1 from Iain Sandoe iains at gcc dot gnu.org 2011-03-23 09:26:39 
UTC ---
confirmed

for O1 :

Apparently, we have concluded that the indirect references are not required
when there is a 0 offset for the var.   When the offset is non-zero (v.b, v.c,
v.d), we correctly construct the indirect ref.  

for O0, all the references are correctly formed (and there is a corresponding
L_w$non_lazy_ptr).

---

.text
.align2
.globl _foo
_foo:
stw r31,-4(r1);,
mflr r0;,
bcl 20,31,L001$pb;
L001$pb:;
mflr r31;,
mtlr r0;,
addis r2,r31,ha16(_v-L001$pb);,,
la r10,lo16(_v-L001$pb)(r2);,,
addis r2,r31,ha16(_w-L001$pb);,,
la r11,lo16(_w-L001$pb)(r2);,,
addis r2,r31,ha16(L_v$non_lazy_ptr-L001$pb);,,
lwz r2,lo16(L_v$non_lazy_ptr-L001$pb)(r2);,,
addis r8,r31,ha16(L_v$non_lazy_ptr-L001$pb);,,
lwz r8,lo16(L_v$non_lazy_ptr-L001$pb)(r8);,,
addis r9,r31,ha16(L_v$non_lazy_ptr-L001$pb);,,
lwz r9,lo16(L_v$non_lazy_ptr-L001$pb)(r9);,,
; 12
/Volumes/ScratchCS/gcc-live-trunk/gcc/testsuite/gcc.c-torture/compile/pr44707.c
1
/* 0(r10) 0(r11) 4(r2) 8(r8) 12(r9) */; v.a, w, v.b, v.c, v.d
; 0  2
lwz r31,-4(r1);,
blr;
.non_lazy_symbol_pointer
L_v$non_lazy_ptr:
.indirect_symbol _v
.long0
.subsections_via_symbols


[Bug debug/48229] DW_TAG_type_unit has no DW_AT_producer

2011-03-23 Thread dodji at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48229

--- Comment #1 from Dodji Seketeli dodji at gcc dot gnu.org 2011-03-23 
09:31:08 UTC ---
I am not sure to understand why the DW_TAG_type_unit DIE should have a
DW_AT_producer attribute.  From the DWARF-4 specification, I can't see
DW_AT_producer listed as a possible attribute of the DW_TAG_type_unit
DIE. AIUI, the DW_AT_producer attribute is meant to be hung off of
DW_AT_compile_unit and DW_AT_partial_unit.  I guess I am missing
something ...


[Bug c++/48224] ERROR: compile in g++ version 4.5

2011-03-23 Thread evgenij.fokin at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48224

--- Comment #7 from Evgenij evgenij.fokin at gmail dot com 2011-03-23 
09:35:29 UTC ---
Jonathan, I disagree with you.

(In reply to comment #2)
 The C++ standard library says the effects are undefined if an incomplete type
 is used as a template argument when instantiating a template component
 (17.4.3.6p2)

Yes, but instantiation made in cxx file where all types completed.

In any case workaround have been found. Thank you, Andrew.


[Bug preprocessor/48248] [4.5/4.6/4.7 Regression] Wrong error message location when compiling preprocessed code

2011-03-23 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48248

Richard Guenther rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2011.03.23 09:41:27
 CC||tromey at gcc dot gnu.org
   Target Milestone|--- |4.5.3
Summary|Wrong error message |[4.5/4.6/4.7 Regression]
   |location when compiling |Wrong error message
   |preprocessed code   |location when compiling
   ||preprocessed code
 Ever Confirmed|0   |1

--- Comment #1 from Richard Guenther rguenth at gcc dot gnu.org 2011-03-23 
09:41:27 UTC ---
Confirmed.

 g++-4.5 -S foo.c -save-temps
foobar.h: In function ‘void func()’:
foobar.h:8:3: error: ‘aaa’ was not declared in this scope

and preprocessed source looks like

# 1 foo.c
# 1 built-in
# 1 command-line
# 1 foo.c
# 1 foobar.h 1
enum Foo
{
BAR
};
# 2 foo.c 2



void func()
{
  (void)
# 6 foobar.h
   BAR
  ;
  aaa;
}

we miss to switch back to foo.c.  4.4 does not switch to foobar.h at all.


[Bug target/47553] ARM neon vld1q_lane_u8 co. don't accept lanes = 8

2011-03-23 Thread rsandifo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47553

--- Comment #1 from rsandifo at gcc dot gnu.org rsandifo at gcc dot gnu.org 
2011-03-23 09:57:50 UTC ---
Author: rsandifo
Date: Wed Mar 23 09:57:26 2011
New Revision: 171344

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=171344
Log:
gcc/
PR target/47553
* config/arm/predicates.md (neon_lane_number): Accept 0..15.

gcc/testsuite/
PR target/47553
* gcc.target/arm/neon-vld-1.c: New test.

Added:
trunk/gcc/testsuite/gcc.target/arm/neon-vld-1.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/arm/predicates.md
trunk/gcc/testsuite/ChangeLog


[Bug lto/48246] ICE in lto_wpa_write_files

2011-03-23 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48246

Richard Guenther rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2011.03.23 10:00:36
 CC||hubicka at gcc dot gnu.org
 Ever Confirmed|0   |1

--- Comment #1 from Richard Guenther rguenth at gcc dot gnu.org 2011-03-23 
10:00:36 UTC ---
Confirmed.

An intermediate partition is completely empty (ltrans_partitions[2], after
lto_balanced_map (), out of 7 partitions in total).  Sorting moves that
empty partition last.

We do seem to allow a single empty partition (probably for an empty CU):

  gcc_assert (cgraph_node_set_nonempty_p (set)
  || varpool_node_set_nonempty_p (vset) || !i);

so we could change !i for i == n_sets-1, but I suppose we could arrive
with multiple empty partitions here as well.

Honza, why do we even care to assert the above if we handle empty
partitions just fine (in case of !i)?  It looks like some partitioning
sanity check to me, not something we should assert on.


[Bug regression/48249] New: gcc-4.6: __builtin___memmove_chk wrong results

2011-03-23 Thread holger.hopp at sap dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48249

   Summary: gcc-4.6: __builtin___memmove_chk wrong results
   Product: gcc
   Version: 4.6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: regression
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: holger.h...@sap.com


__builtin___memmove_chk produces wrong results if src and dest are
overlapping (gcc-4.6 rev. 171299 and trunk):

this is already wrong (source mm.c):

typedef long unsigned int size_t;

extern __inline __attribute__ ((__always_inline__)) __attribute__
((__artificial__)) void *
__attribute__ ((__nothrow__)) memmove (void *__restrict __dest, __const void
*__restrict __src, size_t __len)
{
  return __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size
(__dest, 0));
}

void memmove2 (void *dest, const void *src, size_t n)
{
  memmove (dest, src, n);
}


correct test program that triggers wrong results (source m.c):

#include string.h
#include stdio.h

void memmove2 (void *dest, const void *src, size_t n);

int main()
{
  char s[50];
  strcpy (s, abcdefghijklmnop);
  memmove2 (s+2, s, 14);
  printf (%s\n, s);
  return 0;
}


reproduce (linux, x86_64):

$ gcc-4.6 -O2 -c mm.c -o mm46.o
$ gcc-4.5 -O2 -c mm.c -o mm45.o

gcc-4.6 is wrong:
$ gcc-4.6 m.c mm46.o  ./a.out
abababefefijklmn

gcc-4.5 produces correct result:
$ gcc-4.6 m.c mm45.o  ./a.out
ababcdefghijklmn


[Bug lto/48200] linking shared library with LTO results in different exported symbols

2011-03-23 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200

Richard Guenther rguenth at gcc dot gnu.org changed:

   What|Removed |Added

   Keywords||lto

--- Comment #8 from Richard Guenther rguenth at gcc dot gnu.org 2011-03-23 
10:06:17 UTC ---
(In reply to comment #7)
 Well, upping it only workarounds the problem and you loose parallelizm linking
 small files.  I did bit of tunning on this compiling one of spec2k benchmarks
 (twolf?) to get smallest time with the cpus I had (4 if I remember)

Well ... I suppose this also heavily depends on your I/O speed.  Nevetheless
the number _looks_ awfully low compared to those others.


[Bug regression/48249] gcc-4.6: __builtin___memmove_chk wrong results

2011-03-23 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48249

Richard Guenther rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #1 from Richard Guenther rguenth at gcc dot gnu.org 2011-03-23 
10:12:27 UTC ---
This is a bug in glibc that has been fixed (the restrict qualification on
the wrapper is obviously wrong).


[Bug target/48239] ARM Thumb: Undefined reference to `__aeabi_lmul'

2011-03-23 Thread sebastian.hu...@embedded-brains.de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48239

Sebastian Huber sebastian.hu...@embedded-brains.de changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #1 from Sebastian Huber sebastian.hu...@embedded-brains.de 
2011-03-23 10:14:01 UTC ---
Sorry for the noise, I had to update the gcc/config.gcc with a new line

tm_file=$tm_file ../../libgcc/config/arm/bpabi-lib.h

in the RTEMS specific ARM part.


[Bug target/47553] ARM neon vld1q_lane_u8 co. don't accept lanes = 8

2011-03-23 Thread rsandifo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47553

--- Comment #2 from rsandifo at gcc dot gnu.org rsandifo at gcc dot gnu.org 
2011-03-23 10:17:13 UTC ---
Fixed on trunk.  Will backport to 4.6.1 and 4.5 once 4.6.0 is released.


[Bug target/46072] AIX linker chokes on debug info for uninitialized static variables

2011-03-23 Thread david.kirkby at onetel dot net
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46072

Dr. David Kirkby david.kirkby at onetel dot net changed:

   What|Removed |Added

 CC||david.kirkby at onetel dot
   ||net

--- Comment #12 from Dr. David Kirkby david.kirkby at onetel dot net 
2011-03-23 10:34:54 UTC ---
I'm seeing this error on AIX 5.3. Two GNU projects effected by this are 
 * GNU patch
 * GSL (GNU Scientific library)

In the case of the former, if one configures with CFLAGS =-g0, so not to
include debugging information, the problem goes away. So when one compiles GNU
patch like this I see:

gcc -c  -DHAVE_CONFIG_H -Ded_PROGRAM=\/usr/bin/ed\ -I. -I. -g0 quotesys.c


But the GSL Scientific library can't be compiled this way, as the users's -g0
gets in before the -g added by GSL, so one see something like:

gcc -g0 -g foo.c

which means the debugging information is still present.


[Bug c++/48224] ERROR: compile in g++ version 4.5

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

--- Comment #8 from Jonathan Wakely redi at gcc dot gnu.org 2011-03-23 
10:37:40 UTC ---
(In reply to comment #7)
 Jonathan, I disagree with you.

You're welcome to disagree, but you're wrong ;)

In your original example the compiler tells you where the template is
instantiated:
compileError.hxx:11:62:   instantiated from here

At that point the type is incomplete.

The example in comment 3 is also undefined, but compiles anyway. That doesn't
make it correct. As I said, undefined means it might work, it might not, you
can't rely on any specific behaviour.

Compiling with -D_GLIBCXX_CONCEPT_CHECKS turns on C++03 concept checking, which
tells you the problem: the concept checks fail for the code in comment 3
because the incomplete type does not meet the requirements of Assignable types
(required by 23.1p3 [lib.containers.requirements] in C++03).  Without concept
checks it compiles OK because you don't do an assignment.  In your original
example you do an assignment on line 11, which is the point of instantiation
that requires 'structure' to be complete.


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread ro at CeBiTec dot Uni-Bielefeld.DE
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48245

--- Comment #1 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE 2011-03-23 10:58:36 UTC ---
 Before revision 171039 the test was unsupported:

 UNSUPPORTED: /opt/gcc/p_work/gcc/testsuite/gcc.dg/lto/pr46940_0.c

 because the test for 'check_linker_plugin_available' in
 /opt/gcc/p_work/gcc/testsuite/lib/target-supports.exp returned

 gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found

 while following revision 171039 the same test compiles and executes without
 error.

Which linker do you use, and what's the value of HAVE_LTO_PLUGIN in
gcc/auto-host.h?  Could you check the gcc/config.log snippet for the
linker plugin support test.

If, as I assume, you're using the Darwin linker, HAVE_LTO_PLUGIN should
be 0 and you should get the following error for the linker_plugin test:

gcc: error: -fuse-linker-plugin is not supported in this configuration

Rainer


[Bug target/48250] New: ICE in reload_cse_simplify_operands, at postreload.c:403

2011-03-23 Thread ams at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48250

   Summary: ICE in reload_cse_simplify_operands, at
postreload.c:403
   Product: gcc
   Version: 4.6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: a...@gcc.gnu.org


Created attachment 23755
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=23755
Reduced testcase.

Using a trunk (svn 171251) compiler, configured for ARMv7-a, I get the
following ICE:

gcc -marm -mfpu=neon -O2 -c lp723185.i 

lp723185.i: In function 'foo':
lp723185.i:29:1: error: insn does not satisfy its constraints:
(insn 30 79 31 5 (set (mem/s:DI (plus:SI (reg:SI 3 r3)
(const_int -3 [0xfffd])) [4 unaligned_S_6-u64+0 S8
A64])
(reg:DI 4 r4 [146])) lp723185.i:25 626 {*arm_movdi_vfp}
 (nil))
lp723185.i:29:1: internal compiler error: in reload_cse_simplify_operands, at
postreload.c:403
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.


It's possible that this is the same as bug #42949, but I'm not qualified to
judge.


[Bug c++/48224] ERROR: compile in g++ version 4.5

2011-03-23 Thread evgenij.fokin at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48224

--- Comment #9 from Evgenij evgenij.fokin at gmail dot com 2011-03-23 
11:09:25 UTC ---
(In reply to comment #8)
 You're welcome to disagree, but you're wrong ;)

The man who never made a mistake, never made anything :)

Thank you for your quick response.


[Bug debug/48229] DW_TAG_type_unit has no DW_AT_producer

2011-03-23 Thread dodji at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48229

--- Comment #2 from Dodji Seketeli dodji at gcc dot gnu.org 2011-03-23 
11:28:28 UTC ---
This is a very lightly tested patch to add the DW_AT_producer
attribute to the DW_TAG_type_unit DIE.

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index f62bb48..ff1adc3 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -6498,6 +6498,7 @@ static inline int local_scope_p (dw_die_ref);
 static inline int class_scope_p (dw_die_ref);
 static inline int class_or_namespace_scope_p (dw_die_ref);
 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
+static void add_producer_attribute (dw_die_ref);
 static void add_calling_convention_attribute (dw_die_ref, tree);
 static const char *type_tag (const_tree);
 static tree member_declared_type (const_tree);
@@ -10298,6 +10299,13 @@ break_out_comdat_types (dw_die_ref die)
 unit = new_die (DW_TAG_type_unit, NULL, NULL);
 add_AT_unsigned (unit, DW_AT_language,
  get_AT_unsigned (comp_unit_die (), DW_AT_language));
+
+/* Add a DW_AT_producer attribute.  This is not mandated by
+   the DWARF-4 specification.  But it appears that GDB needs
+   it for cases where different DW_TAG_type_unit DIEs might
+   be emitted by different compilers.  */
+add_producer_attribute (unit);
+
 type_node = ggc_alloc_cleared_comdat_type_node ();
 type_node-root_die = unit;
 type_node-next = comdat_type_list;
@@ -18014,6 +18022,28 @@ add_type_attribute (dw_die_ref object_die, tree type,
int decl_const,
 add_AT_die_ref (object_die, DW_AT_type, type_die);
 }

+/* Add an DW_AT_producer attribute to a given DIE.  */
+
+static void
+add_producer_attribute (dw_die_ref die)
+{
+  char producer[250];
+  const char *language_string = lang_hooks.name;
+  
+   sprintf (producer, %s %s, language_string, version_string);
+#ifdef MIPS_DEBUGGING_INFO
+  /* The MIPS/SGI compilers place the 'cc' command line options in the
producer
+ string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
+ not appear in the producer string, the debugger reaches the conclusion
+ that the object file is stripped and has no debugging information.
+ To get the MIPS/SGI debugger to believe that there is debugging
+ information in the object file, we add a -g to the producer string.  */
+  if (debug_info_level  DINFO_LEVEL_TERSE)
+strcat (producer,  -g);
+#endif
+  add_AT_string (die, DW_AT_producer, producer);
+}
+
 /* Given an object die, add the calling convention attribute for the
function call type.  */
 static void
@@ -20101,7 +20131,6 @@ static dw_die_ref
 gen_compile_unit_die (const char *filename)
 {
   dw_die_ref die;
-  char producer[250];
   const char *language_string = lang_hooks.name;
   int language;

@@ -20114,21 +20143,8 @@ gen_compile_unit_die (const char *filename)
   if (!IS_ABSOLUTE_PATH (filename)  filename[0] != '')
 add_comp_dir_attribute (die);
 }
-
-  sprintf (producer, %s %s, language_string, version_string);
-
-#ifdef MIPS_DEBUGGING_INFO
-  /* The MIPS/SGI compilers place the 'cc' command line options in the
producer
- string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
- not appear in the producer string, the debugger reaches the conclusion
- that the object file is stripped and has no debugging information.
- To get the MIPS/SGI debugger to believe that there is debugging
- information in the object file, we add a -g to the producer string.  */
-  if (debug_info_level  DINFO_LEVEL_TERSE)
-strcat (producer,  -g);
-#endif
-
-  add_AT_string (die, DW_AT_producer, producer);
+  
+  add_producer_attribute (die);

   /* If our producer is LTO try to figure out a common language to use
  from the global list of translation units.  */


[Bug testsuite/48251] New: guality_check hangs indefinitely on Tru64 UNIX

2011-03-23 Thread ro at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48251

   Summary: guality_check hangs indefinitely on Tru64 UNIX
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: testsuite
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: r...@gcc.gnu.org
CC: aol...@gcc.gnu.org
  Host: alpha-dec-osf5.1b
Target: alpha-dec-osf5.1b
 Build: alpha-dec-osf5.1b


The guality_check in g++.dg/guality/guality.exp hangs indefinitely on Tru64
UNIX
V5.1B, hanging the whole testsuite run.  It seems to be a gdb issue, but still
occurs with CVS gdb.

Here's what happens when I use a simple looping test program as target of the
procedure used in guality.h:

 gdb -nx -nw --quiet 
(gdb) set height
Argument required (integer to set it to.).
(gdb) set height 0
(gdb) attach 216346
Attaching to process 216346
[New process 216346]
Retry #1:
Retry #2:
Retry #3:
Retry #4:
0x0001200010e0 in ?? ()
(gdb) set guality_attached = 1
No symbol table is loaded.  Use the file command.
(gdb) b 1
No symbol table is loaded.  Use the file command.

In g++.log, I find that the test is run with the regular timeout of 300
seconds,
but this has no effect for some reason.  Might be a bug in expect (5.38.2).

The guality_check test in gcc.dg/guality/guality.exp isn't affected for some
reason.

I'll disable the test on Tru64 UNIX until this is resolved.

This is somewhat related to PR testsuite/46529, but there the timeout does
work.


[Bug testsuite/48251] guality_check hangs indefinitely on Tru64 UNIX

2011-03-23 Thread ro at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48251

--- Comment #1 from Rainer Orth ro at gcc dot gnu.org 2011-03-23 11:56:09 UTC 
---
Author: ro
Date: Wed Mar 23 11:55:51 2011
New Revision: 171346

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=171346
Log:
PR testsuite/48251
* g++.dg/guality/guality.exp: Disable on alpha*-dec-osf*.

Modified:
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/g++.dg/guality/guality.exp


[Bug debug/48229] DW_TAG_type_unit has no DW_AT_producer

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

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-03-23 
11:56:05 UTC ---
I think it is a bad idea to add DW_AT_producer to .debug_type units.  Making
each .debug_types addition 4 bytes longer is bad for debug info size, we might
have many thousands DW_TAG_type_units for each source.
I think you can safely use referring DW_TAG_compile_unit's DW_AT_producer for
your purposes.  While it is true that .debug_types sections in the end comes
from different *.o file and be produced by different compiler, it will be
referenced by the current CU only if it hashes the same, thus has the same
content (disregarding hash collisions, in which case you are in very bad
trouble, but you are in that very bad trouble no matter whether you just
want to make sure it was produced by the same or compatible producer - when
hash collision happens, it might refer to completely unrelated type).


[Bug c++/48196] [C++0x] ICE on inclusion of utility, decltype

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

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

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

--- Comment #4 from Paolo Carlini paolo.carlini at oracle dot com 2011-03-23 
11:58:12 UTC ---
Indeed, I just checked and both mainline and 4_6-branch are fine. If you see
something different, please re-open.


[Bug testsuite/48251] guality_check hangs indefinitely on Tru64 UNIX

2011-03-23 Thread ro at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48251

Rainer Orth ro at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2011.03.23 12:00:31
   Target Milestone|--- |4.7.0
 Ever Confirmed|0   |1
  Known to fail||4.6.0, 4.7.0

--- Comment #2 from Rainer Orth ro at gcc dot gnu.org 2011-03-23 12:00:31 UTC 
---
Worked around for now.


[Bug lto/47334] g++.dg/torture/pr31863.C -O2 -flto FAILs without visibility

2011-03-23 Thread ro at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47334

Rainer Orth ro at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2011.03.23 12:15:19
 CC||dnovillo at google dot com,
   ||rguenther at suse dot de
   Target Milestone|--- |4.7.0
 Ever Confirmed|0   |1

--- Comment #1 from Rainer Orth ro at gcc dot gnu.org 2011-03-23 12:15:19 UTC 
---
While I'm considering how to apply the prunes from lto.exp (lto_prune_warns) to
tests not yet using lto.exp, I've got a more fundamental question: what's the
point of trying to use visibility support on targets that don't support that
and
later pruning the resulting warning?  It seems far more sensible to me not to
try
this in the first place and thus avoid the resulting mess.


[Bug lto/47334] g++.dg/torture/pr31863.C -O2 -flto FAILs without visibility

2011-03-23 Thread rguenther at suse dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47334

--- Comment #2 from rguenther at suse dot de rguenther at suse dot de 
2011-03-23 12:20:39 UTC ---
On Wed, 23 Mar 2011, ro at gcc dot gnu.org wrote:

 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47334
 
 Rainer Orth ro at gcc dot gnu.org changed:
 
What|Removed |Added
 
  Status|UNCONFIRMED |NEW
Last reconfirmed||2011.03.23 12:15:19
  CC||dnovillo at google dot com,
||rguenther at suse dot de
Target Milestone|--- |4.7.0
  Ever Confirmed|0   |1
 
 --- Comment #1 from Rainer Orth ro at gcc dot gnu.org 2011-03-23 12:15:19 
 UTC ---
 While I'm considering how to apply the prunes from lto.exp (lto_prune_warns) 
 to
 tests not yet using lto.exp, I've got a more fundamental question: what's the
 point of trying to use visibility support on targets that don't support that
 and
 later pruning the resulting warning?  It seems far more sensible to me not to
 try
 this in the first place and thus avoid the resulting mess.

Of course.


[Bug target/48252] New: problem with consecutive vzip, vuzp and vtrn

2011-03-23 Thread johan.kristell at axis dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48252

   Summary: problem with consecutive vzip, vuzp and vtrn
   Product: gcc
   Version: 4.6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: johan.krist...@axis.com


Consecutive vzip, vuzp or vtrn intrinsic overwrite destination register.

Compiler:

gcc -v
Using built-in specs.
COLLECT_GCC=/usr/local/gcc/4.6/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc/4.6/libexec/gcc/armv7l-unknown-linux-gnueabi/4.6.0/lto-wrapper
Target: armv7l-unknown-linux-gnueabi
Configured with: ../gcc-4.6/configure --prefix=/usr/local/gcc/4.6
--enable-languages=c --with-arch=armv7-a --with-float=softfp
--with-fpu=vfpv3-d16
Thread model: posix
gcc version 4.6.0 20110323 (prerelease) (GCC) 


Test case:

#include arm_neon.h
#include stdio.h

int main(void)
{
uint8x8_t v1 = {1, 1, 1, 1, 1, 1, 1, 1};
uint8x8_t v2 = {2, 2, 2, 2, 2, 2, 2, 2};
uint8x8x2_t vd1, vd2;
union {uint8x8_t v; uint8_t buf[8];} d1, d2, d3, d4;
int i;

vd1 = vzip_u8(v1, vdup_n_u8(0));
vd2 = vzip_u8(v2, vdup_n_u8(0));

vst1_u8(d1.buf, vd1.val[0]);
vst1_u8(d2.buf, vd1.val[1]);
vst1_u8(d3.buf, vd2.val[0]);
vst1_u8(d4.buf, vd2.val[1]);

printf(  d1  d2  d3  d4\n);
for (i = 0; i  8; i++) {
printf(%4d%4d%4d%4d\n,
d1.buf[i],
d2.buf[i],
d3.buf[i],
d4.buf[i]);
}

return 0;
}

-

Compile flags: -mfloat-abi=softfp -mfpu=neon -O2

Output:

  d1  d2  d3  d4
   1   1   2   1
   0   0   0   0
   1   1   2   1
   0   0   0   0
   1   1   2   1
   0   0   0   0
   1   1   2   1
   0   0   0   0

d4 is wrong.


[Bug debug/48253] New: [4.6/4.7 Regression] Further .debug_aranges issues

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

   Summary: [4.6/4.7 Regression] Further .debug_aranges issues
   Product: gcc
   Version: 4.6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: debug
AssignedTo: ja...@gcc.gnu.org
ReportedBy: ja...@gcc.gnu.org
CC: tro...@gcc.gnu.org, jan.kratoch...@redhat.com


Created attachment 23756
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=23756
aranges.c

As following testcases show, while PR48176 fixed some .debug_aranges related
regressions, with the addition of .text.startup and .text.exit sections we
still sometimes don't emit .debug_aranges covering all the code snippets for a
particular CU.


[Bug debug/48253] [4.6/4.7 Regression] Further .debug_aranges issues

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

--- Comment #1 from Jakub Jelinek jakub at gcc dot gnu.org 2011-03-23 
13:01:54 UTC ---
Created attachment 23757
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=23757
aranges2.c

Another testcase, this one needs profile feedback (i.e. run compile/link
first with the options and -fprofile-generate, run, compile again with
-fprofile-use).

On this testcase we can see other bugs, e.g. DW_AT_ranges for f1
DW_TAG_subprogram is wrong, it covers twice the same range, once perhaps with a
few extra bytes of padding before it, and then not at all the cold part.


[Bug debug/48229] DW_TAG_type_unit has no DW_AT_producer

2011-03-23 Thread jan.kratochvil at redhat dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48229

--- Comment #4 from Jan Kratochvil jan.kratochvil at redhat dot com 
2011-03-23 13:07:02 UTC ---
(In reply to comment #3)
 I think it is a bad idea to add DW_AT_producer to .debug_type units.  Making
 each .debug_types addition 4 bytes longer is bad for debug info size, we might
 have many thousands DW_TAG_type_units for each source.
 I think you can safely use referring DW_TAG_compile_unit's DW_AT_producer for
 your purposes.  While it is true that .debug_types sections in the end comes
 from different *.o file and be produced by different compiler, it will be
 referenced by the current CU only if it hashes the same, thus has the same
 content (disregarding hash collisions, in which case you are in very bad
 trouble, but you are in that very bad trouble no matter whether you just
 want to make sure it was produced by the same or compatible producer - when
 hash collision happens, it might refer to completely unrelated type).

I guess there cannot be two struct/class definitions with different fields
accessibility accidentally matching each other due to ODR.

Still I believe DW_TAG_type_unit should have DW_AT_producer as it is a
standalone entity - but currently it is not.  I guess I have to implement your
described althorithm into GDB instead.  Dodji, thanks and sorry for the patch.


[Bug lto/48246] ICE in lto_wpa_write_files

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

--- Comment #2 from Jan Hubicka hubicka at ucw dot cz 2011-03-23 13:07:58 UTC 
---
 Honza, why do we even care to assert the above if we handle empty
 partitions just fine (in case of !i)?  It looks like some partitioning
 sanity check to me, not something we should assert on.
The reason was that empty partition imply overhead and there is no need for
that, so I would preffer partitioning algs to never create the empty parts
(there was various issues with partitioning that lead to them).
But for release branch, dropping the assert is just fine.

Honza


[Bug lto/45375] [meta-bug] Issues with building Mozilla with LTO

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

--- Comment #60 from Markus Trippelsdorf markus at trippelsdorf dot de 
2011-03-23 13:10:50 UTC ---
Latest mozilla-central fails here:

make[5]: Entering directory
`/var/tmp/mozilla-central/moz-build-dir/js/src/shell'
js.cpp
c++ -o js.o -c  -I../../../dist/system_wrappers_js -include
/var/tmp/mozilla-central/js/src/config/gcc_hidden.h -DEXPORT_JS_API
-DOSTYPE=\Linux2.6\
 -DOSARCH=Linux -I/var/tmp/mozilla-central/js/src -I..
-I/var/tmp/mozilla-central/js/src/shell -I. -I../../../dist/include
-I../../../dist/include/ns
prpub  -I/usr/include/nspr-fPIC  -fno-rtti -fno-exceptions -Wall
-Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy
-Wno-non-vir
tual-dtor -Wcast-align -Wno-invalid-offsetof -Wno-variadic-macros
-Werror=return-type -pedantic -Wno-long-long -march=native -fpermissive -flto=4
-fu
se-linker-plugin -fwhole-program -fno-strict-aliasing -pthread -pipe  -DNDEBUG
-DTRIMMED -g -O3   -DMOZILLA_CLIENT -include ../js-confdefs.h -MD -MF
.deps/js.pp /var/tmp/mozilla-central/js/src/shell/js.cpp
jsworkers.cpp
c++ -o jsworkers.o -c  -I../../../dist/system_wrappers_js -include
/var/tmp/mozilla-central/js/src/config/gcc_hidden.h -DEXPORT_JS_API
-DOSTYPE=\Linux2.6\ -DOSARCH=Linux -I/var/tmp/mozilla-central/js/src -I..
-I/var/tmp/mozilla-central/js/src/shell -I. -I../../../dist/include
-I../../../dist/include/nsprpub  -I/usr/include/nspr-fPIC  -fno-rtti
-fno-exceptions -Wall -Wpointer-arith -Woverloaded-virtual -Wsynth
-Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wcast-align -Wno-invalid-offsetof
-Wno-variadic-macros -Werror=return-type -pedantic -Wno-long-long -march=native
-fpermissive -flto=4 -fuse-linker-plugin -fwhole-program -fno-strict-aliasing
-pthread -pipe  -DNDEBUG -DTRIMMED -g -O3   -DMOZILLA_CLIENT -include
../js-confdefs.h -MD -MF .deps/jsworkers.pp
/var/tmp/mozilla-central/js/src/shell/jsworkers.cpp
In file included from /var/tmp/mozilla-central/js/src/shell/js.cpp:97:0:
/var/tmp/mozilla-central/js/src/jsobjinlines.h: In member function ‘void
JSObject::setArrayLength(uint32)’:
/var/tmp/mozilla-central/js/src/jsobjinlines.h:316:24: warning: cast to pointer
from integer of different size [-Wint-to-pointer-cast]
/usr/bin/python2.7 /var/tmp/mozilla-central/js/src/config/pythonpath.py
-I../config /var/tmp/mozilla-central/js/src/config/expandlibs_exec.py --uselist
--  c++ -o js  -fno-rtti -fno-exceptions -Wall -Wpointer-arith
-Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor
-Wcast-align -Wno-invalid-offsetof -Wno-variadic-macros -Werror=return-type
-pedantic -Wno-long-long -march=native -fpermissive -flto=4 -fuse-linker-plugin
-fwhole-program -fno-strict-aliasing -pthread -pipe  -DNDEBUG -DTRIMMED -g -O3 
js.o jsworkers.o   -lpthread
-Wl,-O1,--hash-style=gnu,--as-needed,--no-keep-memory   -Wl,-rpath-link,/bin
-Wl,-rpath-link,/var/tmp/mozilla-central/moz-build-dir/dist/lib 
-L../../../dist/bin -L../../../dist/lib -Wl,-R/usr/lib64 -L/usr/lib64 -lplds4
-lplc4 -lnspr4 -lpthread -ldl ../editline/libeditline.a ../libjs_static.a -ldl
lto1: internal compiler error: in output_die, at dwarf2out.c:11355
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.
make[6]: *** [/tmp/ccC5KSYt.ltrans18.ltrans.o] Error 1
make[6]: *** Waiting for unfinished jobs
lto-wrapper: make returned 2 exit status
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.0/../../../../x86_64-pc-linux-gnu/bin/ld:
fatal error: lto-wrapper failed
collect2: ld returned 1 exit status


[Bug lto/48200] linking shared library with LTO results in different exported symbols

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

--- Comment #9 from Jan Hubicka hubicka at ucw dot cz 2011-03-23 13:12:37 UTC 
---
 Well ... I suppose this also heavily depends on your I/O speed.  Nevetheless
 the number _looks_ awfully low compared to those others.
Well, totally minimizing compilation of small unit is not very worthwhile.  It
was from time I was
trying to stress whopr to get issues like this one soon.

It does not matter if we build application in 1/100th of second or 1/200th of
second and too much parallelizm could slow down build of many small binaries.
I guess we could shoot for resonable user response. UI guys thinks it is about
1/3rd of second, so I would not mind tuning number up until compilation on not
terribly high end system approximately gets to this time.

I don't think this is however terribly related to large unit sizes and inliner
stuff.

Honza


[Bug fortran/47571] [4.7 Regression] undefined reference to clock_gettime in Linux build of 02/01/2011

2011-03-23 Thread ro at CeBiTec dot Uni-Bielefeld.DE
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47571

--- Comment #49 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE 2011-03-23 13:13:53 UTC ---
 Could we please avoid this mess with SUPPORTS_WEAK and GTHREAD_USE_WEAK
 and make configure define SUPPORTS_WEAKREF or something like this, since
 this is what we are actually looking for?

 The point was to piggyback on the existing weakref support in
 libgfortran rather than reinvent the wheel, but yeah, it's a bit
 confusing.

... especially since SUPPORTS_WEAK is unused now outside of
intrinsics/system_clock.c.

 It seems that target backends expose macros with these same names, but
 they are not visible anymore when compiling libgfortran, hence the
 current hack trying to recreate them in libgfortran configuration. Or
 at least, that's the most plausible reason I came up with, I did not
 write that particular code nor do I claim any deep expertise in this
 matter.

Indeed: I suppose someone saw them in gcc/gthr*.h.  It seems like every
user of that file needs to recreate those definitions.  From what I can
see, libquadmath gets this wrong, e.g.: quadmath_weak.h has

#if SUPPORTS_WEAK

but this isn't defined anywhere ;-(  Terrible user interface, btw.

 If we include alpha*-dec-osf* in the list of targets that don't support
 weakrefs, things should start working again, but I'd prefer a patch where
 you can actually read *and understand* what's going on here.

 Would it be possible to create some test using AC_LINK_IFELSE to check
 whether weakrefs are supported? That way we could get rid of the ugly

One should be able to use gcc/testsuite/gcc.dg/attr-weakref-1.c as
basis.

 blacklist for defining GTHREAD_USE_WEAK. In any case, IMHO that's the
 topic of a separate patch.

Indeed, and the only sensible (read: the autoconf way) approach if
feasible.

 Apart from that, has anyone actually *measured* the overhead of simply
 linking libgfortran with librt on Linux, rather than claiming that there
 might be some?  It the overhead were acceptable or even neglegible, we
 could avoid all this mess in the first place, link with -lrt if need be,
 and be done with it.

 The overhead is application dependent, and while I suspect that it's
 negligible for most, it's not that far fetched to imagine an
 application where it could make a big difference. For instance, the
 seed of the RANDOM_NUMBER intrinsic is protected by a weakrefed mutex;
 thus it's easy to imagine a program that makes lots of RANDOM_NUMBER
 calls becoming a lot slower if every call results in an unecessary
 mutex lock/unlock.

Ok, though it would be useful to have some hard data on this to make an
informed decision.

 Additionally, the usage model for the weakref seems questionable to
 me: while the technique is well-known and common on ELF targets to
 produce code that can work with or without libpthread linked into the
 application (which is what users will actually do!), which user is
 supposed to link his Fortran code with librt to get improved system
 clock resolution?  I dare say that close to nobody will even think about
 this.

 Probably not many. OTOH there are quite many who use OpenMP, and as
 enabling OpenMP implicitly links in librt, they get the better clock
 for free.

True, but those same users will be mightly confused if the clock
resolution suddenly drops without OpenMP ;-(

I wonder how we want to continue from here: adding alpha*-dec-osf* to
the host list in libgfortran/acinclude.m4 (GTHREAD_USE_WEAK) on top of
your patch allowed testing to finish successfully.  Should we go this
way or apply my workaround from the 4.6 branch to mainline until this is
all sorted out properly?

Thanks.
Rainer


[Bug lto/47333] [4.6 regression] g++.dg/lto/20091219 FAILs on Solaris 2

2011-03-23 Thread ro at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47333

Rainer Orth ro at gcc dot gnu.org changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|FIXED   |

--- Comment #10 from Rainer Orth ro at gcc dot gnu.org 2011-03-23 13:23:20 
UTC ---
Unfortunately, while this works now with gas, it still fails with Sun as,
all Solaris versions, both SPARC and x86.


[Bug debug/48253] [4.6/4.7 Regression] Further .debug_aranges issues

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

--- Comment #2 from Jakub Jelinek jakub at gcc dot gnu.org 2011-03-23 
13:25:04 UTC ---
Created attachment 23758
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=23758
gcc46-pr48253.patch

Untested fix.


[Bug target/46072] AIX linker chokes on debug info for uninitialized static variables

2011-03-23 Thread pedzsan at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46072

--- Comment #13 from Perry Smith pedzsan at gmail dot com 2011-03-23 13:26:10 
UTC ---
On Mar 23, 2011, at 2:47 AM, michael.haubenwallner at salomon dot at wrote:

 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46072
 
 --- Comment #11 from Michael Haubenwallner michael.haubenwallner at salomon 
 dot at 2011-03-23 07:46:49 UTC ---
 (In reply to comment #10)
 IZ81343 (or one of its sister APARs) fixes the original issue.  But, it 
 leaves
 a new issue.  The new error looks like:
 
 Perry, have you seen this on AIX 5.3 or 6.1 ?

5.3 -- something.  I thought I put it in my update.  I can check when I get to
work.  Seems like it was tl10 but a later SP than others reported.

Does that help?

Perry


[Bug other/48254] New: documentation minor

2011-03-23 Thread Denis.Excoffier at airbus dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48254

   Summary: documentation minor
   Product: gcc
   Version: 4.6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: other
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: denis.excoff...@airbus.com


Under GCC 4.6.0 RC 20110314:

Two items:
- consider replacement of affective by effective; this is under the
description of the option `-fipa-struct-reorg'
- option `-funroll-loops' should not be described twice (pages 108 and 122, if
we consider the PDF manual from http://gcc.gnu.org/onlinedocs/gcc/)


[Bug target/46934] gcc ICE: error: unrecognizable insn: in extract_insn, at recog.c:2109

2011-03-23 Thread cltang at gcc dot gnu.org


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



--- Comment #3 from Chung-Lin Tang cltang at gcc dot gnu.org 2011-03-23 
14:48:38 UTC ---

Please disregard the above comments, I think this is an ARM backend problem

after all.


[Bug libmudflap/12310] [tree-ssa] libmudflap fails to build on mips-sgi-IRIX6.5

2011-03-23 Thread fche at redhat dot com


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



--- Comment #12 from Frank Ch. Eigler fche at redhat dot com 2011-03-23 
14:52:34 UTC ---

testing, please ignore


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread dominiq at lps dot ens.fr


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



--- Comment #2 from Dominique d'Humieres dominiq at lps dot ens.fr 2011-03-23 
14:56:37 UTC ---

 Which linker do you use, and what's the value of HAVE_LTO_PLUGIN in

 gcc/auto-host.h?  Could you check the gcc/config.log snippet for the

 linker plugin support test.



 If, as I assume, you're using the Darwin linker, HAVE_LTO_PLUGIN should

 be 0 and you should get the following error for the linker_plugin test:



 gcc: error: -fuse-linker-plugin is not supported in this configuration



The linker is



@(#)PROGRAM:ld  PROJECT:ld64-97.17

llvm version 2.9svn, from Apple Clang 1.7 (build 77)



on x86_64-apple-darwin10.7.0, and



@(#)PROGRAM:ld  PROJECT:ld64-85.2.1



on powerpc-apple-darwin9.



In gcc/auto-host.h I have



...

/* Define to the level of your linker's plugin support. */

#ifndef USED_FOR_TARGET

#define HAVE_LTO_PLUGIN 0

#endif

...



and in gcc/config.log



...

| #define LTOPLUGINSONAME liblto_plugin.so

...

configure:23133: checking linker plugin support

configure:23163: result: 0

...

gcc_cv_lto_plugin=0

...

enable_plugin='yes'

...

pluginlibs=''

...

#define LTOPLUGINSONAME liblto_plugin.so

...



I have grepped the different *.log files, but I did not see any



gcc: error: -fuse-linker-plugin is not supported in this configuration


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread ro at CeBiTec dot Uni-Bielefeld.DE


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



--- Comment #3 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE 2011-03-23 15:05:17 UTC ---

 The linker is



 @(#)PROGRAM:ld  PROJECT:ld64-97.17

 llvm version 2.9svn, from Apple Clang 1.7 (build 77)



 on x86_64-apple-darwin10.7.0, and



 @(#)PROGRAM:ld  PROJECT:ld64-85.2.1



 on powerpc-apple-darwin9.



So both of them non-GNU and not supporting -plugin.



 In gcc/auto-host.h I have



 ...

 /* Define to the level of your linker's plugin support. */

 #ifndef USED_FOR_TARGET

 #define HAVE_LTO_PLUGIN 0

 #endif

 ...



As it should: vendor linker without plugin support.



 I have grepped the different *.log files, but I did not see any



 gcc: error: -fuse-linker-plugin is not supported in this configuration



This would only occur in gcc/testsuite/*/*.log, but of course with xgcc

or something as the command name.



What happens if you try to compile and link the test program from

check_linker_plugin_available with the new gcc?



$ cd gcc

$ cat  lpl.c

int main() { return 0; }

$ ./xgcc -B./ -flto -fuse-linker-plugin lpl.c



Rainer


[Bug debug/48229] DW_TAG_type_unit has no DW_AT_producer

2011-03-23 Thread dodji at gcc dot gnu.org


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



Dodji Seketeli dodji at gcc dot gnu.org changed:



   What|Removed |Added



 Status|ASSIGNED|NEW

 AssignedTo|dodji at gcc dot gnu.org|unassigned at gcc dot

   ||gnu.org


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread dominiq at lps dot ens.fr


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



--- Comment #4 from Dominique d'Humieres dominiq at lps dot ens.fr 2011-03-23 
15:28:31 UTC ---

 What happens if you try to compile and link the test program from

 check_linker_plugin_available with the new gcc?



 $ cd gcc

 $ cat  lpl.c

 int main() { return 0; }

 $ ./xgcc -B./ -flto -fuse-linker-plugin lpl.c



See



Before revision 171039 the test was unsupported:

 ...

 because the test for 'check_linker_plugin_available' in

 /opt/gcc/p_work/gcc/testsuite/lib/target-supports.exp returned



 gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found



 while following revision 171039 the same test compiles and executes without

 error.



in comment #0.


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread ro at CeBiTec dot Uni-Bielefeld.DE


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



--- Comment #5 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE 2011-03-23 15:38:08 UTC ---

I see what's going on now: Darwin (in gcc/config/darwin.h) is one of

only two targets (besides i386/djgpp.h) that override

LINK_COMMAND_SPEC.



I think darwin.h should use/honor LINK_PLUGIN_SPEC.  Can you try

inserting



LINK_PLUGIN_SPEC \



in LINK_COMMAND_SPEC_A just after



%(linker) \



as is done in gcc.c (LINK_COMMAND_SPEC) for other targets?



Thanks.

Rainer


[Bug c++/48255] New: default constructor with argument INT

2011-03-23 Thread lisp2d at lisp2d dot net


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



   Summary: default constructor with argument INT

   Product: gcc

   Version: 4.5.1

Status: UNCONFIRMED

  Severity: normal

  Priority: P3

 Component: c++

AssignedTo: unassig...@gcc.gnu.org

ReportedBy: lis...@lisp2d.net





class A{

public:

};



A x; // OK

A y(1); //OK



I can't found that standard says: default constructor with argument INT.



By code protection I will write:



class A{

A(); // w/o definition

A(int); // w/o definition

public:

};



What to do?


[Bug target/48256] New: gcc4.4.5 internal compiler error: in change_address_1, at emit-rtl.c:1954

2011-03-23 Thread moloned at gmail dot com


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



   Summary: gcc4.4.5 internal compiler error: in change_address_1,

at emit-rtl.c:1954

   Product: gcc

   Version: 4.4.4

Status: UNCONFIRMED

  Severity: critical

  Priority: P3

 Component: target

AssignedTo: unassig...@gcc.gnu.org

ReportedBy: molo...@gmail.com





Created attachment 23759

  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=23759

FFTW generated source file which fails in compilation



I get an internal compiler error when attempting to compile FFTW code for ARM

NEON.  Details described below.



HW/SW setup

---

BeagleBoard xM (native compilation using gcc under ubuntu)

Ubuntu 10.10

GNU make 3.8.1

gcc (Ubuntu/Linaro 4.4.1-14ubuntu5) 4.4.5



FFTW codebase and setup

---

git clone git://gitorious.org/gsoc2010-fftw-neon gsoc2010-fftw-neon

cd gsoc2010-fftw-neon

make clean

sh bootstrap.sh 

CFLAGS=-O3 -pipe -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp ./configure

--prefix=/usr --enable-single --enable-shared --with-pic

--host=arm-none-linux-gnueabi --enable-armv7-cycle-counter --enable-neon 

make

cd kernel

cp cpy1d.c __cpy1d.c

cp cpy1d-neon.c cpy1d.c

cd ..

make



snippet from failing make (offending file attached)

---

/bin/bash ../../../libtool --tag=CC --mode=compile gcc -std=gnu99

-DHAVE_CONFIG_H -I. -I../../..  -I../../../kernel -I../../../dft

-I../../../dft/simd -I../../../simd  -mfpu=neon -O3 -pipe -mcpu=cortex-a8

-mfpu=neon -mfloat-abi=softfp  -MT n1fv_128.lo -MD -MP -MF .deps/n1fv_128.Tpo

-c -o n1fv_128.lo n1fv_128.c

libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../../..

-I../../../kernel -I../../../dft -I../../../dft/simd -I../../../simd -mfpu=neon

-O3 -pipe -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -MT n1fv_128.lo -MD -MP

-MF .deps/n1fv_128.Tpo -c n1fv_128.c  -fPIC -DPIC -o .libs/n1fv_128.o

n1fv_128.c: In function 'n1fv_128':

n1fv_128.c:3513: internal compiler error: in change_address_1, at

emit-rtl.c:1954

Please submit a full bug report,

with preprocessed source if appropriate.

See file:///usr/share/doc/gcc-4.4/README.Bugs for instructions.

make[5]: *** [n1fv_128.lo] Error 1


[Bug debug/48204] [4.5/4.6/4.7 Regression] ICE: in decimal_to_decnumber, at dfp.c:115 with -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre -g

2011-03-23 Thread jakub at gcc dot gnu.org


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



Jakub Jelinek jakub at gcc dot gnu.org changed:



   What|Removed |Added



 Status|NEW |ASSIGNED

 AssignedTo|unassigned at gcc dot   |jakub at gcc dot gnu.org

   |gnu.org |



--- Comment #2 from Jakub Jelinek jakub at gcc dot gnu.org 2011-03-23 
15:50:25 UTC ---

Created attachment 23760

  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=23760

gcc46-pr48204.patch



Untested fix.


[Bug c++/48255] default constructor with argument INT

2011-03-23 Thread rguenth at gcc dot gnu.org

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

Richard Guenther rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #1 from Richard Guenther rguenth at gcc dot gnu.org 2011-03-23 
15:55:36 UTC ---
t.C:5:6: error: no matching function for call to ‘A::A(int)’
t.C:1:8: note: candidates are: A::A()
t.C:1:8: note: A::A(const A)

your code example is rejected as it should.


[Bug c++/48255] default constructor with argument INT

2011-03-23 Thread lisp2d at lisp2d dot net


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



--- Comment #2 from Lisp2D lisp2d at lisp2d dot net 2011-03-23 16:15:14 UTC 
---

found silent conversion



class A have



explicit A(std::complexlong doubleconst x);


[Bug other/48254] documentation minor

2011-03-23 Thread redi at gcc dot gnu.org


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



Jonathan Wakely redi at gcc dot gnu.org changed:



   What|Removed |Added



   Keywords||documentation



--- Comment #1 from Jonathan Wakely redi at gcc dot gnu.org 2011-03-23 
16:19:00 UTC ---

(In reply to comment #0)

 Under GCC 4.6.0 RC 20110314:

 

 Two items:

 - consider replacement of affective by effective; this is under the

 description of the option `-fipa-struct-reorg'



Good catch, thanks



 - option `-funroll-loops' should not be described twice (pages 108 and 122, if

 we consider the PDF manual from http://gcc.gnu.org/onlinedocs/gcc/)



Hmm yes, it's at

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-funroll_002dloops-811

and

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-funroll_002dloops-864

so are -ftracer and -funroll-all-loops ... not sure if there's a reason for

that


[Bug c++/40793] Error: no matching function for call to XYZ doesn't display function-template-arguments

2011-03-23 Thread jonathan.sd24 at yahoo dot de

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

--- Comment #11 from Jonathan Schmidt-Dominé jonathan.sd24 at yahoo dot de 
2011-03-23 16:29:31 UTC ---
Couldn't this patch be accepted? It looks very nice…


[Bug libstdc++/48257] New: std::string::assign() corrupts std::string static data when called on emptyString1 using emptyString2.data()

2011-03-23 Thread mohsinrzaidi at gmail dot com


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



   Summary: std::string::assign() corrupts std::string static data

when called on emptyString1 using emptyString2.data()

   Product: gcc

   Version: 4.1.2

Status: UNCONFIRMED

  Severity: minor

  Priority: P3

 Component: libstdc++

AssignedTo: unassig...@gcc.gnu.org

ReportedBy: mohsinrza...@gmail.com





The output of the following program is:

4

4



#include string

#include iostream



using namespace std;

int main()

{

try

{

string emptyStr1;

string emptyStr2;

string emptyStr3;



emptyStr3.assign(emptyStr2.data(), 4);



cout  emptyStr1.size()  endl;

cout  emptyStr3.size()  endl;

}

catch(...)

{

cout  Reached here  endl;

}

}



The size of emptyStr1/3 should not have been modified when emptyStr3 was

assigned the contents of emptyStr2 up to 4 bytes although all string are empty.



From what I've understood of the basic_string code, the following code flow

will result in this case:



snip



  templatetypename _CharT, typename _Traits, typename _Alloc

inline basic_string_CharT, _Traits, _Alloc::

basic_string()

#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING

: _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { }

#else

: _M_dataplus(_S_construct(size_type(), _CharT(), _Alloc()), _Alloc()) { }

#endif



/snip



First, the default constructor. Since I do not have

_GLIBCXX_FULLY_DYNAMIC_STRING defined in my implementation, _M_dataplus._M_p

will get initialized to (_S_empty_rep_storage + sizeof (_Rep)) for all three

strings.



snip



  const _CharT*

  data() const

  { return _M_data(); }



/snip



snip



  _CharT*

  _M_data() const

  { return  _M_dataplus._M_p; }



/snip



snip



  templatetypename _CharT, typename _Traits, typename _Alloc

basic_string_CharT, _Traits, _Alloc

basic_string_CharT, _Traits, _Alloc::

assign(const _CharT* __s, size_type __n)

{

  __glibcxx_requires_string_len(__s, __n);

  _M_check_length(this-size(), __n, basic_string::assign);

  if (_M_disjunct(__s) || _M_rep()-_M_is_shared())

return _M_replace_safe(size_type(0), this-size(), __s, __n);

  else

{

  // Work in-place.

  const size_type __pos = __s - _M_data();

  if (__pos = __n)

_M_copy(_M_data(), __s, __n);

  else if (__pos)

_M_move(_M_data(), __s, __n);

  _M_rep()-_M_set_length_and_sharable(__n);

  return *this;

}

 }



/snip



When assign is called using emptyStr2.data(), which returns the same value as

that set above for _M_dataplus._M_p, _M_disjunct() will return 0, as will

_M_is_shared() and we end up going into the else block.



Here, since __s = _M_dataplus._M_p, which is what _M_data() returns, __pos = 0

and so the only statements we end up executing are the last two in the else

block thereby setting the length = 4 in the static storage returned by

_M_rep().



This results in the corruption of static storage used by all std::string

objects.



Does that make sense?



==

Using built-in specs.

Target: x86_64-redhat-linux

Configured with: ../configure --prefix=/usr --mandir=/usr/share/man

--infodir=/usr/share/info --enable-shared --enable-threads=posix

--enable-checking=release --with-system-zlib --enable-__cxa_atexit

--disable-libunwind-exceptions --enable-libgcj-multifile

--enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk

--disable-dssi --enable-plugin

--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic

--host=x86_64-redhat-linux

Thread model: posix

gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread dominiq at lps dot ens.fr


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



Dominique d'Humieres dominiq at lps dot ens.fr changed:



   What|Removed |Added



 CC||howarth at nitro dot

   ||med.uc.edu, iains at gcc

   ||dot gnu.org, mrs at gcc dot

   ||gnu.org



--- Comment #6 from Dominique d'Humieres dominiq at lps dot ens.fr 2011-03-23 
16:43:42 UTC ---

 I see what's going on now: Darwin (in gcc/config/darwin.h) is one of

 only two targets (besides i386/djgpp.h) that override

 LINK_COMMAND_SPEC.



 I think darwin.h should use/honor LINK_PLUGIN_SPEC.  Can you try

 inserting



LINK_PLUGIN_SPEC \



 in LINK_COMMAND_SPEC_A just after

 

 %(linker) \

 

 as is done in gcc.c (LINK_COMMAND_SPEC) for other targets?



I'll do the check ASAP (CC Iain Sandoe, Mike Stump, and Jack Howarth).

Meanwhile the following patch skips the test:



--- /opt/gcc/_clean/gcc/testsuite/gcc.dg/lto/pr46940_0.c2010-12-16

08:01:29.0 +0100

+++ /opt/gcc/work/gcc/testsuite/gcc.dg/lto/pr46940_0.c2011-03-23

17:17:07.0 +0100

@@ -1,4 +1,5 @@

 /* { dg-require-linker-plugin  } */

+/* { dg-require-alias  } */

 /* { dg-extra-ld-options -fuse-linker-plugin } */

 #include stdio.h


[Bug debug/48220] DW_OP_GNU_entry_value/DW_TAG_GNU_call_site_parameter vs. register window targets

2011-03-23 Thread jakub at gcc dot gnu.org


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



--- Comment #3 from Jakub Jelinek jakub at gcc dot gnu.org 2011-03-23 
16:45:05 UTC ---

The aim of the extension is to allow correct debug info, not almost correct, so

I think defining upon entering of the current subprogram as anything but

before the first insn in it is wrong and would make it not possible to use

DW_OP_GNU_entry_value before the point (end of prologue or what?).

Consider e.g. shrink-wrapping Bernd just proposed for GCC too...

So I think what we currently do on SPARC has to change.



As for teaching var-tracking about save/restore on SPARC, it would be a matter

of adding probably two target hooks, one that would be run e.g. at the end of

adjust_insn and would be supposed to change it using validate_change (...,

true); in whatever way var-tracking should understand the insn.

So e.g. for save you'd add into the parallel things like:

  (set (reg:P 24) (reg:P 8))

  (clobber (reg:P 8))

and similarly for all the other param regs.  Perhaps even make it explicit what

exactly is subtracted from %sp.

And the second target hook would return a different rtx for DECL_INCOMING_RTL,

with registers adjusted back.  Because for -O0 if we don't do var-tracking we

probably want DECL_INCOMING_RTL to still refer to %i0 etc., even when it is not

correct before the save.


[Bug target/48258] New: Add VSX support for float/double vector reductions improve float insert/extract

2011-03-23 Thread meissner at gcc dot gnu.org


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



   Summary: Add VSX support for float/double vector reductions 

improve float insert/extract

   Product: gcc

   Version: 4.7.0

Status: UNCONFIRMED

  Severity: enhancement

  Priority: P3

 Component: target

AssignedTo: meiss...@gcc.gnu.org

ReportedBy: meiss...@gcc.gnu.org

  Host: powerpc64-linux

Target: powerpc64-linux

 Build: powerpc64-linux





Right now, the powerpc compiler does not do support for float and double vector

reductions.  For float in particular, the compiler does the code, and then

stores the vector in the stack to extract the bottom element.  With VSX it is

possible to do vector reductions in fewer instructions and to eliminate the

store.


[Bug libstdc++/48257] std::string::assign() corrupts std::string static data when called on emptyString1 using emptyString2.data()

2011-03-23 Thread redi at gcc dot gnu.org


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



Jonathan Wakely redi at gcc dot gnu.org changed:



   What|Removed |Added



 Status|UNCONFIRMED |RESOLVED

 Resolution||INVALID



--- Comment #1 from Jonathan Wakely redi at gcc dot gnu.org 2011-03-23 
16:59:31 UTC ---

this is undefined behaviour, the standard requires that emptyStr2.data() points

to an array of at least 4 chars


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread iains at gcc dot gnu.org


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



Iain Sandoe iains at gcc dot gnu.org changed:



   What|Removed |Added



 Status|UNCONFIRMED |NEW

   Last reconfirmed||2011.03.23 17:07:04

 Ever Confirmed|0   |1



--- Comment #7 from Iain Sandoe iains at gcc dot gnu.org 2011-03-23 17:07:04 
UTC ---

I'll try this on *-darwin9 and a  darwin9-X-cris-elf

(I assume we need to clone all the logic to cater for cross compiler cases... )



maybe this is getting complex enough to warrant a spec of its own? (and then we

could avoid cloning it)



===



Index: gcc/config/darwin.h

===

--- gcc/config/darwin.h(revision 171353)

+++ gcc/config/darwin.h(working copy)

@@ -174,6 +174,38 @@ extern GTY(()) int darwin_ms_struct;

 #define CPP_SPEC %{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}

\

  %{pthread:-D_REENTRANT}



+/* Conditional to test whether the LTO plugin is used or not.

+   FIXME: For slim LTO we will need to enable plugin unconditionally.  This

+   still cause problems with PLUGIN_LD != LD and when plugin is built but

+   not useable.  For GCC 4.6 we don't support slim LTO and thus we can enable

+   plugin only when LTO is enabled.  We still honor explicit

+   -fuse-linker-plugin if the linker used understands -plugin.  */

+

+/* The linker has some plugin support.  */

+#if HAVE_LTO_PLUGIN  0

+/* The linker used has full plugin support, use LTO plugin by default.  */

+#if HAVE_LTO_PLUGIN == 2

+#define PLUGIN_COND !fno-use-linker-plugin:%{flto|flto=*|fuse-linker-plugin

+#define PLUGIN_COND_CLOSE }

+#else

+/* The linker used has limited plugin support, use LTO plugin with explicit

+   -fuse-linker-plugin.  */

+#define PLUGIN_COND fuse-linker-plugin

+#define PLUGIN_COND_CLOSE 

+#endif

+#define LINK_PLUGIN_SPEC \

+%{PLUGIN_COND: \

+-plugin %(linker_plugin_file) \

+-plugin-opt=%(lto_wrapper) \

+-plugin-opt=-fresolution=%u.res \

+%{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}}

\

+}PLUGIN_COND_CLOSE

+#else

+/* The linker used doesn't support -plugin, reject -fuse-linker-plugin.  */

+#define LINK_PLUGIN_SPEC %{fuse-linker-plugin:\

+%e-fuse-linker-plugin is not supported in this configuration}

+#endif

+

 /* This is mostly a clone of the standard LINK_COMMAND_SPEC, plus

precomp, libtool, and fat build additions.



@@ -185,6 +217,7 @@ extern GTY(()) int darwin_ms_struct;

 #define LINK_COMMAND_SPEC_A \

%{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\

 %(linker) \

+ LINK_PLUGIN_SPEC  \

 %{flto*:%fcompare-debug*} \

 %{flto*} \

 %l %X %{s} %{t} %{Z} %{u*} \


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread dominiq at lps dot ens.fr


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



--- Comment #8 from Dominique d'Humieres dominiq at lps dot ens.fr 2011-03-23 
17:08:59 UTC ---

With the change in comment #5, bootstrapping fails with



ld: file not found: LINK_PLUGIN_SPEC

collect2: ld returned 1 exit status

make[5]: *** [libgcc_s.dylib] Error 1


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread ro at CeBiTec dot Uni-Bielefeld.DE


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



--- Comment #9 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE 2011-03-23 17:10:38 UTC ---

 maybe this is getting complex enough to warrant a spec of its own? (and then 
 we

 could avoid cloning it)



Why would you want to clone that?  LINK_PLUGIN_SPEC is defined in gcc.c

before it is used in LINK_COMMAND_SPEC, irrespective if the latter is

from gcc itself or from target headers.  Just use it as is.



The fact that Darwin uses a clone of LINK_COMMAND_SPEC instead of having

hooks in the generic one to to its stuff is a mistake, IMO.



Rainer


[Bug target/46072] AIX linker chokes on debug info for uninitialized static variables

2011-03-23 Thread david.kirkby at onetel dot net


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



--- Comment #14 from Dr. David Kirkby david.kirkby at onetel dot net 
2011-03-23 17:11:42 UTC ---

Has anyone with an AIX support contract ever raised this issue with IBM? If so,

is there a publicly viewable location for this? 



If not, can someone do it. My own RS/6000 is an ancient thing I personally own,

and so I have no support contract at all. 



It seems to me it could be a gcc bug or a bug in the AIX assembler or linker. 



It would be interesting to try to replace the systems linker and assembler with

versions from unpatched 5.3 or 6.1. That might give some clues. 



I can see this issue raised on an IBM AIX forum



http://www.ibm.com/developerworks/forums/thread.jspa?threadID=348558



but don't know if its even being considered by IBM.


[Bug testsuite/48245] FAIL: gcc.dg/lto/pr46940 c_lto_pr46940_0.o assemble on *-apple-darwin*

2011-03-23 Thread ro at CeBiTec dot Uni-Bielefeld.DE


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



--- Comment #10 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE 2011-03-23 17:15:46 UTC ---

 --- Comment #8 from Dominique d'Humieres dominiq at lps dot ens.fr 
 2011-03-23 17:08:59 UTC ---

 With the change in comment #5, bootstrapping fails with



 ld: file not found: LINK_PLUGIN_SPEC

 collect2: ld returned 1 exit status

 make[5]: *** [libgcc_s.dylib] Error 1



Iain is right: we need to turn this into a proper spec since

LINK_PLUGIN_SPEC isn't defined at the point darwin.h is included.



Rainer


  1   2   3   >