[Bug fortran/53255] New: [OOP] With TYPE, wrong type-bound operator used: of parent instead of overridden one

2012-05-06 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53255

 Bug #: 53255
   Summary: [OOP] With TYPE, wrong type-bound operator used: of
parent instead of overridden one
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Keywords: wrong-code
  Severity: normal
  Priority: P3
 Component: fortran
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: bur...@gcc.gnu.org


Reported by Reinhold Bader.

Expected: The following output:
 executing base
 executing override
 OK

De-facto output:
 executing base
 executing base
 FAIL


If one changes:
  type(ext) :: p
to
  class(ext), allocatable :: p
  allocate(p)
or
  class(base), allocatable :: p
  allocate(ext :: p)
it works.

Thus, it seems as if only the compile-time resolution of TYPE has the problem,
while the vtable run-time version is correct.



module mod_base
  implicit none
  private
  type, public :: base
 private
 real :: r(2,2) = reshape( (/ 1.0, 2.0, 3.0, 4.0 /), (/ 2, 2 /))
   contains
 procedure, private :: trace
 generic :: operator(.tr.) = trace
  end type base
contains
  complex function trace(this)
class(base), intent(in) :: this
trace = this%r(1,1) + this%r(2,2)
  end function trace
end module mod_base
module mod_ext
  use mod_base
  implicit none
  private
  public :: base
  type, public, extends(base) :: ext
 private
 real :: i(2,2) = reshape( (/ 1.0, 1.0, 1.0, 1.5 /), (/ 2, 2 /))
   contains
 procedure, private :: trace = trace_ext
  end type ext
contains
   complex function trace_ext(this)
class(ext), intent(in) :: this

!   the following should be executed through invoking .tr. p below
write(*,*) 'executing override'
trace_ext = .tr. this%base + (0.0, 1.0) * ( this%i(1,1) + this%i(2,2) )
  end function trace_ext

end module mod_ext
program test_override
  use mod_ext
  implicit none
  type(base) :: o
  type(ext) :: p
!  write(*,*) .tr. o
!  write(*,*) .tr. p

  if (abs(.tr. o - 5.0 )  1.0e-6  .and. abs( .tr. p - (5.0,2.5))  1.0e-6)
then
 write(*,*) 'OK'
  else
 write(*,*) 'FAIL'
  end if
end program test_override


[Bug fortran/53255] [OOP] With TYPE, wrong type-bound operator used: of parent instead of overridden one

2012-05-06 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53255

Tobias Burnus burnus at gcc dot gnu.org changed:

   What|Removed |Added

 CC||burnus at gcc dot gnu.org,
   ||janus at gcc dot gnu.org

--- Comment #1 from Tobias Burnus burnus at gcc dot gnu.org 2012-05-06 
08:54:29 UTC ---
What happens is the call to resolve_compcall, which in turn calls
resolve_typebound_generic_call. That procedure fails as
e-value.compcall.tbp-is_generic == false. I think that's okay as only .tr. is
generic, the trace is not.

However, somewhere in resolve_compcall or resolve_typebound_static it should
search for the overridden procedure.

The following seems to work. Janus: Do you think that the patch makes sense?

--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5671,9 +5702,8 @@ resolve_typebound_static (gfc_expr* e, gfc_symtree**
target,
   e-value.compcall.actual = NULL;

   /* If we find a deferred typebound procedure, check for derived types
- that an over-riding typebound procedure has not been missed.  */
-  if (e-value.compcall.tbp-deferred
-e-value.compcall.name
+ that an overriding typebound procedure has not been missed.  */
+  if (e-value.compcall.name
 !e-value.compcall.tbp-non_overridable
 e-value.compcall.base_object
 e-value.compcall.base_object-ts.type == BT_DERIVED)


[Bug fortran/52158] Regression on character function with gfortran 4.7

2012-05-06 Thread fanfarillo.gcc at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52158

--- Comment #2 from Alessandro Fanfarillo fanfarillo.gcc at gmail dot com 
2012-05-06 10:32:22 UTC ---
Created attachment 27323
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27323
Patch for 52158 and 45170#19

Patch realized on gcc version 4.8.0 20120505


[Bug fortran/52158] Regression on character function with gfortran 4.7

2012-05-06 Thread fanfarillo.gcc at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52158

Alessandro Fanfarillo fanfarillo.gcc at gmail dot com changed:

   What|Removed |Added

 CC||fanfarillo.gcc at gmail dot
   ||com

--- Comment #3 from Alessandro Fanfarillo fanfarillo.gcc at gmail dot com 
2012-05-06 10:38:12 UTC ---
Hi all,

with the Tobias support I realized this patch (which includes the Paul one) for
PR 45170#19.

I'm a newbie, so I'm waiting for comments before to send the patch to
gcc-fortran and gcc-patches mailing lists.

Regards.


[Bug target/53250] [4.8 Regression] [SH] ICE: in change_address_1, at emit-rtl.c:2018

2012-05-06 Thread olegendo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53250

Oleg Endo olegendo at gcc dot gnu.org changed:

   What|Removed |Added

 Target|sh4-unknown-linux-gnu   |sh*-*-*
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-05-06
 Ever Confirmed|0   |1

--- Comment #1 from Oleg Endo olegendo at gcc dot gnu.org 2012-05-06 10:42:34 
UTC ---
I've noticed this problem a while ago when building newlib.  After a few
revisions it went away but now it seems to be persistent.  The following
happens when building newlib:

[...]
VERSION=\1.19.0\ -DPACKAGE_STRING=\newlib\ 1.19.0\ -DPACKAGE_BUGREPORT=\\
-DPACKAGE_URL=\\ -I. -I../../../../../../../newlib-1.19.0/newlib/libm/complex
-I../../../../../../../newlib-1.19.0/newlib/libm/complex/../common
-I../../../../../../../newlib-1.19.0/newlib/libm/complex/ -fno-builtin  -g
-O2  -ml -m2e -c -o lib_a-cacosh.o `test -f 'cacosh.c' || echo
'../../../../../../../newlib-1.19.0/newlib/libm/complex/'`cacosh.c
../../../../../../../newlib-1.19.0/newlib/libm/complex/cacosh.c: In function
'cacosh':
../../../../../../../newlib-1.19.0/newlib/libm/complex/cacosh.c:93:1: internal
compiler error: in change_address_1, at emit-rtl.c:2018
 }
 ^
Please submit a full bug report


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread rsandifo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

--- Comment #2 from rsandifo at gcc dot gnu.org rsandifo at gcc dot gnu.org 
2012-05-06 10:55:48 UTC ---
Gah.  Sorry for the breakage.

This is caused by the x86_64 TLS code generating a DImode
MEM address when Pmode == SImode.  As you say here:

  http://gcc.gnu.org/ml/gcc-patches/2012-03/msg01205.html

that's wrong from a pure rtl semantics perspective:
MEM addresses must have the mode given by
targetm.addr_space.address_mode.  Even if having a different
mode happens to work most of the time, I think that's only
by accident.  Your original suggestion avoided this, of course.

I don't understand the constraints you're working under
well enough to suggest anything constructive here, sorry.
I don't know whether it would be possible to model this
as an address space or not.


[Bug target/53219] inline function erroneously clobbers %i0 register on 64 bit sparc compile of perls regcomp.c

2012-05-06 Thread martin at netbsd dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53219

--- Comment #7 from Martin Husemann martin at netbsd dot org 2012-05-06 
10:59:19 UTC ---
Created attachment 27324
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27324
gcc -S output for the miscompiled function

The original report showed the disassembler output from gdb; here is the
original compiler output (stripped to the function in question, I can provide
the full output if needed).

The crash happens in the section starting at line 521:

.LLBB1732:
.loc 1 4563 0
ldx [%i0+624], %g1 
add %fp, 1695, %o0
mov 0, %o1
call__sigsetjmp14, 0
 stx%g1, [%fp+1687]
.LLVL2000:
add %fp, 1687, %g1
st  %o0, [%fp+1815]
.LLBE1732:
.loc 1 4567 0
andcc   %o0, 0xff, %o1
.LLBB1733:
.loc 1 4563 0
stx %g1, [%i0+624]


on return from the sigsetjmp %i0 is zero and we crash in the last line cited
above.

I think the register %i0 is left as zero after (post first call to sigsetjmp)
when going throught he code starting at line 77:

.LLVL1968:
.LL2453:
.LLBB1694:
.LLBB1695:
.loc 3 77 0  
ldx [%fp+2191], %i0
.LLVL1969: 
.LL2734:  
and %i0, 224, %g1
srl %g1, 5, %g1
.LLVL1970:  
.LLBE1695:
.LLBE1694:
.loc 1 4617 0 
cmp %g1, 1

This register value later gets saved to the on-stack copy of the register
window, from where it is restored on siglongjmp.


[Bug libstdc++/53248] std::arrayT,0 doesn't work when T is not default-constructible

2012-05-06 Thread daniel.kruegler at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53248

--- Comment #3 from Daniel Krügler daniel.kruegler at googlemail dot com 
2012-05-06 11:21:47 UTC ---
(In reply to comment #2)
 Daniel, can you see other options besides adding a specialization? (which 
 would
 be a straightforward task, I may even get around to do pretty soon when I will
 do debug-mode std::array, already in my todo list)

I haven't implemented it completely, but an alternative to a partial
specialization could be something like the following:

template class T, size_t N
struct __array_data_traits
{
  typedef T type[N];
};

template class T
struct __array_data_traitsT, 0
{
  struct type {};
};

template class T, size_t N
struct array
{
  typename __array_data_traitsT, N::type elems;
};

arrayint, 1 ai1 = {1};
arrayint, 1 ai1b = {};
arrayint, 0 ai0 = {};

The sole (?) disadvantage of this approach would be that
std::is_emptyarrayint, 0 does not evaluate to true. But all the
specialization-relevant logic could also be added to __array_data_traits in
terms of static (constexpr where possible) functions.

Technically the traits-based approach would be preferable, because otherwise I
see the risk that user-code that itself would try to specialize std::array with
some T for a user-provided type could notice the difference. Consider:

// Within Library:
template class T, size_t N
struct array
{
  T elems[N];
};

template class T
struct arrayT, 0
{
};

// User world:
struct User {};

template size_t N
struct arrayUser, N
{
  User elems[N  0 ? N : 1];
};

arrayUser, 0 au0 = {}; // Error, ambiguous

The problem with the current library wording is that it does not *explicitly*
allow a *specialization* for std::array (in contrast to vectorbool or to
numeric_limits for cv-variations of the actual type), therefore I believe that
from the current wording state a partial-specialization by the library is
borderline to invalid, at least a gray zone, because of the need to support
[namespace.std] p1.

If a library issue should be submitted, I would suggest to provide the library
the freedom for providing a special for the zero-size case.


[Bug target/53256] New: [avr] Attribute 'interrupt' shall override attribute 'signal'

2012-05-06 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53256

 Bug #: 53256
   Summary: [avr] Attribute 'interrupt' shall override attribute
'signal'
Classification: Unclassified
   Product: gcc
   Version: 4.7.0
Status: UNCONFIRMED
  Severity: enhancement
  Priority: P3
 Component: target
AssignedTo: g...@gcc.gnu.org
ReportedBy: g...@gcc.gnu.org
CC: j...@uriah.heep.sax.de
Target: avr


AVR-LibC offered attributes 'interrupt' and 'signal' as INTERRUPT and SIGNAL
through its API.  This changed at some point in time to ISR which may lead to
code that adds attribute 'interrupt' and attribute 'signal' at the same time.

This leads to code that is not IRQ-safe in the current implementation which is:

1) Attributes 'interrupt' and 'signal' are exclusive. Specifying both at the
same time for the same function has not a well-defined behavior.

2) 'interrupt' emits a SEI instruction as the very first instruction of the
function.

3) Neither attributes make assumptions on the function's worker code. In
particular, they do *not* assume that interrupts are not (re-)enabled by the
user code.  Thus, it is safe to enable IRQs at any place in the function body. 
This safe covers only the generated code and IRQ-safeness of SP changes and
the instructions themselves, it does *not* cover the IRQ and timing layout of
the application.

4) The AVR hardware globally disables IRQs when an IRQ is raised. This allows
more efficient code in 'signal' prologues compared to 'interrupt' prologues in
cases where the stack pointer has to be written.  Writing SP is not an atomic
operation on all devices, and special precautions must be taken if SP is
written and IRQs might be on.


As of this extension request 1) shall be changed to:

1') Attribute 'interrupt' shall override attribute 'signal'. No warning should
be issued in such a case.  The documentation should be extended.


[Bug target/53256] [avr] Attribute 'interrupt' shall override attribute 'signal'

2012-05-06 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53256

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

   What|Removed |Added

   Priority|P3  |P4
 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2012-05-06
   Target Milestone|--- |4.7.1
 Ever Confirmed|0   |1


[Bug c/39044] -Wformat warns on printf() with stringpointer as sole argument

2012-05-06 Thread manu at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39044

Manuel López-Ibáñez manu at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 CC||manu at gcc dot gnu.org
 Resolution||WONTFIX

--- Comment #6 from Manuel López-Ibáñez manu at gcc dot gnu.org 2012-05-06 
12:26:36 UTC ---
(In reply to comment #2)
 Ah, you're right. Gentoo enables -Wformat-security by default now. I'll bug
 them about this.
 
 On the other hand, this does not generate a warning. Why?

printf(s) is always wrong. You should have used fputs().

To get a warning for printf(s,t), you need -Wformat=2 (or -Wformat-nonliteral).
I guess the reason is that there is no real alternative if you need such a
code.

(In reply to comment #3)
 i'd reconstruct this report as gcc not properly handling constant strings with
 printf() when the string is readily available to it and clearly does not 
 change

In the examples here, the code is arguably safe, and GCC should not warn. But
to reach that conclusion, the front ends would need to do constant propagation,
and this is not implemented, and not likely to be ever implemented by existing
contributors. I think it would be widely useful to have some sort of constant
propagation in the FEs, but it would take someone extremely motivated and
skilled to get it done properly. Unfortunately, I am not aware of any
candidates. If you know of any, please let me know.


[Bug target/35294] iwmmxt intrinsics, internal compiler error

2012-05-06 Thread junkmailnotread at yahoo dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35294

junkmailnotread at yahoo dot com changed:

   What|Removed |Added

 CC||junkmailnotread at yahoo
   ||dot com

--- Comment #15 from junkmailnotread at yahoo dot com 2012-05-06 12:28:25 UTC 
---
The previous attachment 25391 fixes it for me for gcc-4.5.3.

It allowed me to build pixman-0.24.0 with the --enable-arm-iwmmxt configure
option.


[Bug web/53257] New: GCC wiki takes a very, very long time to save a page

2012-05-06 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53257

 Bug #: 53257
   Summary: GCC wiki takes a very, very long time to save a page
Classification: Unclassified
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: web
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: r...@gcc.gnu.org


See thread beginning at http://gcc.gnu.org/ml/gcc/2012-04/msg00521.html and in
particular the response at http://gcc.gnu.org/ml/gcc/2012-04/msg00677.html
which identifies the problem and proposes a solution


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread hjl.tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

H.J. Lu hjl.tools at gmail dot com changed:

   What|Removed |Added

 CC||ubizjak at gmail dot com
   Target Milestone|--- |4.8.0

--- Comment #3 from H.J. Lu hjl.tools at gmail dot com 2012-05-06 14:06:20 
UTC ---
On x32, Pmode can be either DImode or SImode.
It is incorrect to say happens to work most of
the time for x32.  Can you add a target hook to
restore the old behavior?


[Bug middle-end/52306] ICE in CSE

2012-05-06 Thread tg at mirbsd dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52306

--- Comment #3 from Thorsten Glaser tg at mirbsd dot org 2012-05-06 14:16:07 
UTC ---
Created attachment 27325
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27325
preprocessed source of libxslt occurrence

The same thing happens in libxslt-1.1.26 but even with PIC:

/bin/bash ../libtool --tag=CC   --mode=compile gcc -Wl,--as-needed
-DHAVE_CONFIG_H -I. -I../../../libxslt -I.. -I../../.. -I../../../libxslt
-I/usr/include/libxml2-g -O2 -Wall -c -o xslt.lo ../../../libxslt/xslt.c
libtool: compile:  gcc -Wl,--as-needed -DHAVE_CONFIG_H -I. -I../../../libxslt
-I.. -I../../.. -I../../../libxslt -I/usr/include/libxml2 -g -O2 -Wall -c
../../../libxslt/xslt.c  -fPIC -DPIC -o .libs/xslt.o
../../../libxslt/xslt.c: In function 'xsltParseStylesheetProcess':
../../../libxslt/xslt.c:6464:1: internal compiler error: in cselib_record_set,
at cselib.c:2148

In the meantime, we’ve got 4.6.3 in Debian, and all patches recommended by
Mikael Patterson are applied:

(pbuild11307)root@ara3:~/libxslt-1.1.26/build/main/libxslt # gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/m68k-linux-gnu/4.6/lto-wrapper
Target: m68k-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.6.3-4+m68k.1'
--with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.6 --enable-shared --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6
--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object
--disable-libssp --enable-plugin --enable-objc-gc --disable-werror
--disable-multilib --enable-checking=release --build=m68k-linux-gnu
--host=m68k-linux-gnu --target=m68k-linux-gnu
Thread model: posix
gcc version 4.6.3 (Debian 4.6.3-4+m68k.1) 

Lowering to -O1 allows the file to compile.


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread hjl.tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

--- Comment #4 from H.J. Lu hjl.tools at gmail dot com 2012-05-06 14:28:55 
UTC ---
A small testcase:

[hjl@gnu-6 pr53249]$ cat x.i
struct gomp_task
{
  struct gomp_task *parent;
};

struct gomp_thread
{
  int foo1;
  struct gomp_task *task;
};

extern __thread struct gomp_thread gomp_tls_data;

void
__attribute__ ((noinline))
gomp_end_task (void)
{
  struct gomp_thread *thr = gomp_tls_data;
  struct gomp_task *task = thr-task;

  thr-task = task-parent;
}
[hjl@gnu-6 pr53249]$


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread hjl.tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

--- Comment #5 from H.J. Lu hjl.tools at gmail dot com 2012-05-06 14:35:26 
UTC ---
X32 is a 32bit environment for x86-64:

https://sites.google.com/site/x32abi/

Since there is no x32 mode in hardware, x32 binaries
run in pure 64-bit mode.


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread hjl.tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

--- Comment #6 from H.J. Lu hjl.tools at gmail dot com 2012-05-06 14:54:10 
UTC ---
Can you just use GET_MODE (mem) instead of
targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem))
when you change plus_constant (mem, offset)?
At least, you should allow a backend to do

plus_constant (GET_MODE (mem), mem, offset)

instead of

mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem))

plus_constant (mode, mem, offset)


[Bug c++/53152] In no match for operatorXX error message gives the wrong column info

2012-05-06 Thread paolo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53152

--- Comment #7 from paolo at gcc dot gnu.org paolo at gcc dot gnu.org 
2012-05-06 15:06:35 UTC ---
Author: paolo
Date: Sun May  6 15:06:31 2012
New Revision: 187211

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=187211
Log:
2012-05-06  Paolo Carlini  paolo.carl...@oracle.com

PR c++/53152
* call.c (op_error, build_new_op_1, build_new_op): Add location_t
parameter.
(build_conditional_expr_1): Adjust.
* typeck.c (build_x_indirect_ref, build_x_binary_op,
build_x_unary_op): Add location_t parameter.
(rationalize_conditional_expr, build_x_array_ref,
build_x_compound_expr, cp_build_modify_expr, build_x_modify_expr):
Adjust.
* typeck2.c (build_x_arrow): Add location_t parameter.
* semantics.c (finish_unary_op_expr): Likewise.
(finish_increment_expr, handle_omp_for_class_iterator): Adjust.
* decl2.c (grok_array_decl): Add location_t parameter.
* parser.c (cp_parser_postfix_open_square_expression,
cp_parser_postfix_dot_deref_expression, cp_parser_unary_expression,
cp_parser_binary_expression, cp_parser_builtin_offsetof,
do_range_for_auto_deduction, cp_convert_range_for,
cp_parser_template_argument, cp_parser_omp_for_cond): Pass the
location, adjust.
* pt.c (tsubst_copy_and_build): Adjust.
* tree.c (maybe_dummy_object): Likewise.
* cp-tree.h: Update declarations.

Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/call.c
trunk/gcc/cp/cp-tree.h
trunk/gcc/cp/decl2.c
trunk/gcc/cp/parser.c
trunk/gcc/cp/pt.c
trunk/gcc/cp/semantics.c
trunk/gcc/cp/tree.c
trunk/gcc/cp/typeck.c
trunk/gcc/cp/typeck2.c


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread rsandifo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

rsand...@gcc.gnu.org rsandifo at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2012-05-06
 AssignedTo|unassigned at gcc dot   |rsandifo at gcc dot gnu.org
   |gnu.org |
 Ever Confirmed|0   |1

--- Comment #7 from rsandifo at gcc dot gnu.org rsandifo at gcc dot gnu.org 
2012-05-06 15:06:34 UTC ---
Testing a patch.


[Bug c++/53152] In no match for operatorXX error message gives the wrong column info

2012-05-06 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53152

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

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

--- Comment #8 from Paolo Carlini paolo.carlini at oracle dot com 2012-05-06 
15:09:02 UTC ---
Done.



[Bug libstdc++/53248] std::arrayT,0 doesn't work when T is not default-constructible

2012-05-06 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53248

--- Comment #4 from Paolo Carlini paolo.carlini at oracle dot com 2012-05-06 
15:39:33 UTC ---
Thanks Daniel. Since we had this issue for so much time, I guess we could as
well wait a bit for the Committee to provide some feedback about the
specialization option: in case there are no objections, just go with that. I
would rather stay away from std::is_empty false, if we are fixing this.


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread hjl.tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

H.J. Lu hjl.tools at gmail dot com changed:

   What|Removed |Added

 Status|ASSIGNED|UNCONFIRMED
 Ever Confirmed|1   |0

--- Comment #8 from H.J. Lu hjl.tools at gmail dot com 2012-05-06 15:42:09 
UTC ---
get_address_mode in dwarf2out.c works for this testcase.


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread rdsandiford at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

--- Comment #9 from rdsandiford at googlemail dot com rdsandiford at 
googlemail dot com 2012-05-06 15:56:09 UTC ---
hjl.tools at gmail dot com gcc-bugzi...@gcc.gnu.org writes:
 get_address_mode in dwarf2out.c works for this testcase.

Yeah, that's what I was testing FWIW.  If x32 wants to do this,
then pretty much every instance of:

targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem))

needs to use get_address_mode instead.  So I'm trying to convert all of them.

(There's a duplicate copy in var-tracking.c, so the patch consolidates
them into a general rtl.h function.)


[Bug bootstrap/53249] [4.8 Regression] Bootstrap failure

2012-05-06 Thread hjl.tools at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249

--- Comment #10 from H.J. Lu hjl.tools at gmail dot com 2012-05-06 16:00:35 
UTC ---
(In reply to comment #9)
 hjl.tools at gmail dot com gcc-bugzi...@gcc.gnu.org writes:
  get_address_mode in dwarf2out.c works for this testcase.
 
 Yeah, that's what I was testing FWIW.  If x32 wants to do this,
 then pretty much every instance of:
 
 targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem))
 
 needs to use get_address_mode instead.  So I'm trying to convert all of them.

This is the minimum one:

diff --git a/gcc/dse.c b/gcc/dse.c
index 0523757..964804c 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1455,7 +1455,7 @@ record_store (rtx body, bb_info_t bb_info)
   return 0;
 }

-  address_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
+  address_mode = get_address_mode (mem);

   if (GET_MODE (mem) == BLKmode)
 width = MEM_SIZE (mem);
@@ -2181,11 +2181,8 @@ check_mem_read_rtx (rtx *loc, void *data)
   mem_addr = group-canon_base_addr;
 }
   if (offset)
-{
-  enum machine_mode address_mode
-= targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
-  mem_addr = plus_constant (address_mode, mem_addr, offset);
-}
+mem_addr = plus_constant (get_address_mode (mem),
+  mem_addr, offset);
 }

   /* We ignore the clobbers in store_info.  The is mildly aggressive,
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 25c8ded..9d10bac 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2113,7 +2113,7 @@ adjust_address_1 (rtx memref, enum machine_mode mode,
HOST_WIDE_INT offset,
plus_constant (address_mode,
   XEXP (addr, 1), offset));
   else
-addr = plus_constant (address_mode, addr, offset);
+addr = plus_constant (get_address_mode (memref), addr, offset);
 }

   new_rtx = change_address_1 (memref, mode, addr, validate);

to build x32 run-time libraries for c,c++,fortran,objc,go.


[Bug middle-end/52306] ICE in CSE

2012-05-06 Thread tg at mirbsd dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52306

Thorsten Glaser tg at mirbsd dot org changed:

   What|Removed |Added

  Known to fail||4.6.3

--- Comment #4 from Thorsten Glaser tg at mirbsd dot org 2012-05-06 17:04:12 
UTC ---
Luckily, -Os works in the libxslt case (not in the libvirt case, though),
although, from the earlier comments, optimisation is just hiding the bug
by changing control flow.


[Bug plugins/53258] New: Many symbols cannot lookup when loading plugin in configured with --enable-build-with-cxx.

2012-05-06 Thread flast at flast dot jp
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53258

 Bug #: 53258
   Summary: Many symbols cannot lookup when loading plugin in
configured with --enable-build-with-cxx.
Classification: Unclassified
   Product: gcc
   Version: 4.7.1
Status: UNCONFIRMED
  Severity: minor
  Priority: P3
 Component: plugins
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: fl...@flast.jp


Many symbols are exported as C++ symbol that GCC configured with
--enable-build-with-cxx. Such symbols are used by plugins and will load plugin
failed.

I think it will impact to cxx-conversion branch also.

I tested only GCC 4.7.1 20120428 .


[Bug c++/53236] using declaration and base function template overloading

2012-05-06 Thread daniel.kruegler at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53236

--- Comment #7 from Daniel Krügler daniel.kruegler at googlemail dot com 
2012-05-06 17:34:10 UTC ---
(In reply to comment #5)
 Here is a simplified code - gcc_error_simple.cpp
 Shows two facets of the error.
 
 See the comments in the attached file.

Fixed and simplified that code we have:

//---
templatetypename, typename, typename
struct enable_same
{};

templatetypename T, typename U
struct enable_sameT, T, U
{
  typedef U type;
};

template typename T
struct Base
{
T u;

template typename T2
typename enable_sameT, T2, T::type
get() { return u; }
};

template typename T
struct Derived : Baseint
{
typedef Baseint base;

#ifdef WITH_USING_DECLARATION
using base::get;
#endif

template typename T2
typename enable_sameT, T2, T::type
get() { return this-u;} // Line 32
};

int main()
{
Deriveddouble d;
d.getdouble();
d.getint(); // Line 39
}
//---

Using gcc 4.8.0 20120429 (experimental) I see different results (I see the same
thing with your unchanged code taking into account that a function returning
no-void is expected to be rejected):

a) #ifndef WITH_USING_DECLARATION: The code is accepted as it should.
b) #ifdef WITH_USING_DECLARATION: The code is rejected as it should:

In function 'int main()':|
39|error: no matching function for call to 'Deriveddouble::get()'|
39|note: candidate is:|
32|note: templateclass T2 typename enable_sameT, T2, T::type Derived::get()
[with T2 = T2; T = double]|
|32|note:   template argument deduction/substitution failed:|
39|  required from here|
32|error: no type named 'type' in 'struct enable_samedouble, int, double'|

Even though the third line of the diagnostics is a bit misleading it is
certainly correct the function call, because the base class get template is
hidden without the using-declaration. 

Summarizing, it seems that the variadic code is broken, not the non-variadic
case.


[Bug web/53257] GCC wiki takes a very, very long time to save a page

2012-05-06 Thread pinskia at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53257

Andrew Pinski pinskia at gcc dot gnu.org changed:

   What|Removed |Added

 CC||overseers at gcc dot
   ||gnu.org

--- Comment #1 from Andrew Pinski pinskia at gcc dot gnu.org 2012-05-06 
17:54:43 UTC ---
Adding overseers@ to see what their input is.


[Bug plugins/53258] Many symbols cannot lookup when loading plugin in configured with --enable-build-with-cxx.

2012-05-06 Thread pinskia at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53258

--- Comment #1 from Andrew Pinski pinskia at gcc dot gnu.org 2012-05-06 
17:55:52 UTC ---
This is expected until GCC has a real stable API for plugins.  There was a
thread earlier this year exactly about this.


[Bug target/53250] [4.8 Regression] [SH] ICE: in change_address_1, at emit-rtl.c:2018

2012-05-06 Thread olegendo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53250

--- Comment #2 from Oleg Endo olegendo at gcc dot gnu.org 2012-05-06 18:04:27 
UTC ---
Created attachment 27326
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27326
Proposed patch

(In reply to comment #0)
 On sh4-unknown-linux-gnu, there are many new failures after revision
 187015.  The typical example is gcc.c-torture/compile/20071102-1.c
 which fails with
 
 internal compiler error: in change_address_1, at emit-rtl.c:2018
 
 It seems that rtls like
 
 (subreg:SF (reg:DI ...) 4)
 (subreg:SF (reg:V2SF ...) 4)
 
 cause this error when regs are on stack.  If my memory is correct,
 the similar issue has popped up on oleg's work for QI/HImode addressing
 with displacement.

Do you mean this wallpapering below?

sh.c (sh_cannot_change_mode_class) ...

  /* This effectively disallows using GENERAL_REGS for SFmode vector subregs.
 This can be problematic when SFmode vector subregs need to be accessed
 on the stack with displacement addressing, as it happens with -O0.
 Thus we disallow the mode change for -O0.  */
  if (to == SFmode  VECTOR_MODE_P (from)  GET_MODE_INNER (from) == SFmode)
return optimize ? (reg_classes_intersect_p (GENERAL_REGS, rclass)) : false;

I think this one is a different issue...

 The above rtls are not illegal but problematic
 when regs are on stack because SH has no load/store instructions
 for FP registers and memory with displacement.  Before lowering
 subregs change in revision 187015, these subregs were decomposed
 into subregs with zero byte count.
 The trails of PR53716 say that the appropriate target-wise cost
 computation is needed, though I can't find the way to enable
 lowering the above subregs with adjusting SH's rtx cost computations.

I had a look at what's going on there.
The lower-subreg pass decides whether to do the splitting or not based on the
reg move costs of certain modes.  These costs are initially collected by
querying the rtx cost for patterns like (set (reg:DI 154
virtual-incoming-args).
A simple stack trace ...

lower_subreg (compute_costs)
  rtx = (set (reg:DI 154 virtual-incoming-args)

  - insn_rtx_cost

- set_src_cost

  - rtx_cost (x, SET, 1, speed_p)
switch (code)
{
  case REG:
return 0;
}

The 'rtx_cost' function always returns 0 because 'code' is 'REG', so it never
reaches sh_rtx_costs.  I wonder how this could have worked for other targets at
all.

The attached patch seems to fix the issue (at least newlib compiles for me
now).  
However, I'm completely unaware of any consequences of the rtlanal.c hunk. 
Maybe somebody else should have a look at it.


[Bug rtl-optimization/53227] [4.8 Regression] FAIL: gcc.target/i386/movbe-2.c scan-assembler-times movbe[ \t] 4

2012-05-06 Thread ubizjak at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53227

Uros Bizjak ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 AssignedTo|unassigned at gcc dot   |ubizjak at gmail dot com
   |gnu.org |

--- Comment #5 from Uros Bizjak ubizjak at gmail dot com 2012-05-06 18:08:37 
UTC ---
Created attachment 27327
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27327
Patch that improves DImode swap sequeces

Patch in testing.


[Bug rtl-optimization/53176] [4.8 Regression] gcc.dg/lower-subreg-1.c FAILs

2012-05-06 Thread olegendo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53176

Oleg Endo olegendo at gcc dot gnu.org changed:

   What|Removed |Added

 CC||olegendo at gcc dot gnu.org

--- Comment #18 from Oleg Endo olegendo at gcc dot gnu.org 2012-05-06 
18:09:37 UTC ---
On SH an issue popped up because lower-subreg would not split multi-word regs
anymore.  Could somebody please have a look at comment #2 and the proposed
patch in PR 53250?


[Bug target/53227] [4.8 Regression] FAIL: gcc.target/i386/movbe-2.c scan-assembler-times movbe[ \t] 4

2012-05-06 Thread ubizjak at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53227

Uros Bizjak ubizjak at gmail dot com changed:

   What|Removed |Added

   Keywords|ra  |
  Component|rtl-optimization|target

--- Comment #6 from Uros Bizjak ubizjak at gmail dot com 2012-05-06 18:09:28 
UTC ---
Target issue.


[Bug c++/52900] Compile source using Boost header with -static -flto -std=c++11 breaks

2012-05-06 Thread gccBugs at haatschii dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52900

--- Comment #5 from gccBugs at haatschii dot de 2012-05-06 18:34:41 UTC ---
Could you reproduce the bug? Or do you need any more informations?


[Bug libstdc++/53248] std::arrayT,0 doesn't work when T is not default-constructible

2012-05-06 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53248

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-05-06
 Ever Confirmed|0   |1

--- Comment #5 from Paolo Carlini paolo.carlini at oracle dot com 2012-05-06 
18:47:12 UTC ---
By the way - I think we discussed this already, bu now I can't find anything -
what should we take the begin() == end() == unique value exactly to mean? Don't
tell me something like an ugly reinterpret_castT*(this), please


[Bug libstdc++/53248] std::arrayT,0 doesn't work when T is not default-constructible

2012-05-06 Thread daniel.kruegler at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53248

--- Comment #6 from Daniel Krügler daniel.kruegler at googlemail dot com 
2012-05-06 18:56:05 UTC ---
(In reply to comment #5)
 By the way - I think we discussed this already, bu now I can't find anything -
 what should we take the begin() == end() == unique value exactly to mean? 
 Don't
 tell me something like an ugly reinterpret_castT*(this), please

My interpretation is that returning nullptr should be OK. I don't see any
requirement that a unique value is something that cannot be returned by any
other container (In a private communication with Howard he at least agreed with
my interpretation). If this interpretation is unsafe, it should also be
clarified by revised wording.


[Bug rtl-optimization/53176] [4.8 Regression] gcc.dg/lower-subreg-1.c FAILs

2012-05-06 Thread rdsandiford at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53176

--- Comment #19 from rdsandiford at googlemail dot com rdsandiford at 
googlemail dot com 2012-05-06 19:17:03 UTC ---
olegendo at gcc dot gnu.org gcc-bugzi...@gcc.gnu.org writes:
 --- Comment #18 from Oleg Endo olegendo at gcc dot gnu.org 2012-05-06 
 18:09:37 UTC ---
 On SH an issue popped up because lower-subreg would not split multi-word regs
 anymore.  Could somebody please have a look at comment #2 and the proposed
 patch in PR 53250?

Unfortunately I messed up the choice of cost routines in the original patch.
I just committed the fix for that.  The SH rtx_costs routine should now see
(set (reg) (reg)) and (set (reg) (const_int 0)) rtxes, so you should
be able to set the costs there.  See:

http://gcc.gnu.org/ml/gcc-patches/2012-05/msg00425.html

for a similar MIPS patch.


[Bug fortran/53259] New: [OOP] virtual call to type bound procedure calls base, not extension?

2012-05-06 Thread dfranke at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53259

 Bug #: 53259
   Summary: [OOP] virtual call to type bound procedure calls base,
not extension?
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Keywords: wrong-code
  Severity: normal
  Priority: P3
 Component: fortran
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: dfra...@gcc.gnu.org
CC: ja...@gcc.gnu.org


The testcase below strangely calls a_hook, but I'd expect b_hook to be called?
For what it's worth, an equivalent testcase in C++ calls b_hook ...

$ gfortran hook.f90  ./a.out 
 hook: a

[gfortran 4.8 r186145; info provided by Andrew Benson]

See also the thread started here:
  http://gcc.gnu.org/ml/fortran/2012-05/msg00029.html

This may be related to PR53255 (but the workaround given there does not seem to
work. Didn't test the patch yet).

Testcase:
$ cat hook.f90
MODULE m
  TYPE :: a
  CONTAINS
PROCEDURE :: worker = a_worker
PROCEDURE :: hook = a_hook
  END TYPE

  TYPE, extends(a) :: b
  CONTAINS
PROCEDURE :: worker = b_worker
PROCEDURE :: hook = b_hook
  END TYPE

CONTAINS
  SUBROUTINE a_worker(this)
CLASS(a), INTENT(in) :: this
CALL this%hook()
  END SUBROUTINE

  SUBROUTINE a_hook(this)
CLASS(a), INTENT(in) :: this
print *, hook: a   ! This is wrongly(?) called.
  END SUBROUTINE

  SUBROUTINE b_worker(this)
CLASS(b), INTENT(in) :: this
! do some extra work, then call the worker of the base class,
! expect to come back to b_hook later ...
CALL this%a%worker()
  END SUBROUTINE

  SUBROUTINE b_hook(this)
CLASS(b), INTENT(in) :: this
print *, hook: b
  END SUBROUTINE
END MODULE

  USE m
  TYPE(b) :: obj
  CALL obj%worker()
END


[Bug rtl-optimization/53176] [4.8 Regression] gcc.dg/lower-subreg-1.c FAILs

2012-05-06 Thread olegendo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53176

--- Comment #20 from Oleg Endo olegendo at gcc dot gnu.org 2012-05-06 
19:21:18 UTC ---
(In reply to comment #19)
 olegendo at gcc dot gnu.org gcc-bugzi...@gcc.gnu.org writes:
  --- Comment #18 from Oleg Endo olegendo at gcc dot gnu.org 2012-05-06 
  18:09:37 UTC ---
  On SH an issue popped up because lower-subreg would not split multi-word 
  regs
  anymore.  Could somebody please have a look at comment #2 and the proposed
  patch in PR 53250?
 
 Unfortunately I messed up the choice of cost routines in the original patch.
 I just committed the fix for that.  The SH rtx_costs routine should now see
 (set (reg) (reg)) and (set (reg) (const_int 0)) rtxes, so you should
 be able to set the costs there.  See:
 
 http://gcc.gnu.org/ml/gcc-patches/2012-05/msg00425.html
 
 for a similar MIPS patch.

Yep, I just saw it on the patches list.  I'm on it.  Thanks.


[Bug rtl-optimization/53260] New: cse doesn't record REG_EQUAL notes for function invariants

2012-05-06 Thread rsandifo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53260

 Bug #: 53260
   Summary: cse doesn't record REG_EQUAL notes for function
invariants
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: enhancement
  Priority: P3
 Component: rtl-optimization
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: rsand...@gcc.gnu.org


CSE adds REG_EQUAL notes for constant equivalences that it finds:

  /* If this is a single SET, we are setting a register, and we have an
 equivalent constant, we want to add a REG_NOTE.   We don't want
 to write a REG_EQUAL note for a constant pseudo since verifying that
 that pseudo hasn't been eliminated is a pain.  Such a note also
 won't help anything.

It might be worth extending this to function_invariant_p,
so that reload has the option of eliminating registers that
are equivalent to known frame addresses.  A hacked-up patch
to do this showed a surprising number of differences,
but I haven't had chance to see whether they're good or bad.


[Bug libstdc++/53248] std::arrayT,0 doesn't work when T is not default-constructible

2012-05-06 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53248

--- Comment #7 from Paolo Carlini paolo.carlini at oracle dot com 2012-05-06 
19:27:56 UTC ---
Good, good then. Personally, I find that unique value confusing.


[Bug target/53101] Recognize casts to sub-vectors

2012-05-06 Thread glisse at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53101

Marc Glisse glisse at gcc dot gnu.org changed:

   What|Removed |Added

 CC||glisse at gcc dot gnu.org

--- Comment #5 from Marc Glisse glisse at gcc dot gnu.org 2012-05-06 19:55:58 
UTC ---
Getting a BIT_FIELD_REF in gimple is simple enough. If I remember correctly,
the patch below was enough (it also fixes the fact the current code will
generate a BIT_FIELD_REF for true elements of the vector and one past the end,
but not further, and I am not sure why that one-past-the-end behavior would be
wanted).

I did it because I thought it would be easier to convince the compiler to
expand that to a vec_select, and I tried patching get_inner_reference and
extract_bit_field_1, but no luck, I give up for now.



--- gimplify.c(revision 187205)
+++ gimplify.c(working copy)
@@ -4262,11 +4262,16 @@ gimple_fold_indirect_ref (tree t)
   else if (TREE_CODE (optype) == COMPLEX_TYPE
 useless_type_conversion_p (type, TREE_TYPE (optype)))
 return fold_build1 (REALPART_EXPR, type, op);
   /* *(foo *)vectorfoo = BIT_FIELD_REFvectorfoo,... */
   else if (TREE_CODE (optype) == VECTOR_TYPE
-useless_type_conversion_p (type, TREE_TYPE (optype)))
+(useless_type_conversion_p (type, TREE_TYPE (optype))
+   || (TREE_CODE (type) == VECTOR_TYPE
+useless_type_conversion_p (TREE_TYPE (type),
+ TREE_TYPE (optype))
+TYPE_VECTOR_SUBPARTS (type)
+   TYPE_VECTOR_SUBPARTS (optype
 {
   tree part_width = TYPE_SIZE (type);
   tree index = bitsize_int (0);
   return fold_build3 (BIT_FIELD_REF, type, op, part_width, index);
 }
@@ -4283,22 +4288,29 @@ gimple_fold_indirect_ref (tree t)
   STRIP_NOPS (addr);
   addrtype = TREE_TYPE (addr);

   /* ((foo*)vectorfoo)[1] - BIT_FIELD_REFvectorfoo,... */
   if (TREE_CODE (addr) == ADDR_EXPR
-   TREE_CODE (TREE_TYPE (addrtype)) == VECTOR_TYPE
-   useless_type_conversion_p (type, TREE_TYPE (TREE_TYPE (addrtype)))
-   host_integerp (off, 1))
+   host_integerp (off, 1)
+   ((TREE_CODE (TREE_TYPE (addrtype)) == VECTOR_TYPE
+useless_type_conversion_p (type,
+TREE_TYPE (TREE_TYPE (addrtype
+  || (TREE_CODE (type) == VECTOR_TYPE
+   useless_type_conversion_p (TREE_TYPE (type),
+   TREE_TYPE (TREE_TYPE (addrtype)))
+   TYPE_VECTOR_SUBPARTS (type)
+  TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)
 {
   unsigned HOST_WIDE_INT offset = tree_low_cst (off, 1);
   tree part_width = TYPE_SIZE (type);
   unsigned HOST_WIDE_INT part_widthi
-= tree_low_cst (part_width, 0) / BITS_PER_UNIT;
+= tree_low_cst (part_width, 0);
+  unsigned HOST_WIDE_INT orig_widthi
+= tree_low_cst (TYPE_SIZE (TREE_TYPE (addrtype)), 0);
   unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
   tree index = bitsize_int (indexi);
-  if (offset / part_widthi
-  = TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
+  if (indexi + part_widthi = orig_widthi)
 return fold_build3 (BIT_FIELD_REF, type, TREE_OPERAND (addr, 0),
 part_width, index);
 }

   /* ((foo*)complexfoo)[1] - __imag__ complexfoo */


[Bug fortran/41587] [OOP] ICE with ALLOCATABLE CLASS components

2012-05-06 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41587

--- Comment #9 from Tobias Burnus burnus at gcc dot gnu.org 2012-05-06 
20:30:13 UTC ---
Author: burnus
Date: Sun May  6 20:30:05 2012
New Revision: 187214

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=187214
Log:
2012-05-06  Tobias Burnus  bur...@net-b.de

PR fortran/41587
* decl.c (build_struct): Don't ignore FAILED status.

2012-05-06  Tobias Burnus  bur...@net-b.de

PR fortran/41587
* gfortran.dg/class_array_13.f90: New.


Added:
trunk/gcc/testsuite/gfortran.dg/class_array_13.f90
Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/decl.c
trunk/gcc/testsuite/ChangeLog


[Bug fortran/41587] [OOP] ICE with ALLOCATABLE CLASS components

2012-05-06 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41587

Tobias Burnus burnus at gcc dot gnu.org changed:

   What|Removed |Added

 Status|REOPENED|RESOLVED
 Resolution||FIXED

--- Comment #10 from Tobias Burnus burnus at gcc dot gnu.org 2012-05-06 
20:32:55 UTC ---
(In reply to comment #7)
 As of yesterday, the testcase in comment #1 compiles and runs successfully.  
 We
 now just need the error message for the original problem.

Which has now been FIXED on the 4.8 trunk. (The other issues were fixed on the
4.7 trunk.)


[Bug target/53227] [4.8 Regression] FAIL: gcc.target/i386/movbe-2.c scan-assembler-times movbe[ \t] 4

2012-05-06 Thread uros at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53227

--- Comment #7 from uros at gcc dot gnu.org 2012-05-06 20:48:03 UTC ---
Author: uros
Date: Sun May  6 20:47:59 2012
New Revision: 187215

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=187215
Log:
PR target/53227
* config/i386/i386.md (swapmode): Rename from *swapmode.
(bswapdi2): Split from bswapmode2.  Use nonnimediate_operand
predicate for operand 1.  Force operand 1 to register for TARGET_BSWAP.
(bswapsi2): Ditto.
(*bswapdi2_doubleword): New insn pattern.
(*bswapmode2): Rename from *bswapmode2_1.


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


[Bug target/52999] [4.7/4.8 Regression] ICE, segmentation fault in c_tree_printer

2012-05-06 Thread danglin at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52999

--- Comment #12 from John David Anglin danglin at gcc dot gnu.org 2012-05-06 
20:50:13 UTC ---
Author: danglin
Date: Sun May  6 20:50:06 2012
New Revision: 187216

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=187216
Log:
Backport from mainline:
2012-04-27  John David Anglin  dave.ang...@nrc-cnrc.gc.ca

PR target/52999
* config/pa/pa.c (pa_legitimate_constant_p): Don't put function labels
in constant pool.


Modified:
branches/gcc-4_7-branch/gcc/ChangeLog
branches/gcc-4_7-branch/gcc/config/pa/pa.c


[Bug target/52999] [4.7/4.8 Regression] ICE, segmentation fault in c_tree_printer

2012-05-06 Thread danglin at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52999

--- Comment #13 from John David Anglin danglin at gcc dot gnu.org 2012-05-06 
20:59:14 UTC ---
Author: danglin
Date: Sun May  6 20:59:10 2012
New Revision: 187217

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=187217
Log:
PR target/52999
* config/pa/pa.h (LEGITIMATE_CONSTANT_P): Don't put function labels
in constant pool.


Modified:
branches/gcc-4_6-branch/gcc/ChangeLog
branches/gcc-4_6-branch/gcc/config/pa/pa.h


[Bug target/52999] [4.7/4.8 Regression] ICE, segmentation fault in c_tree_printer

2012-05-06 Thread danglin at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52999

John David Anglin danglin at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||FIXED

--- Comment #14 from John David Anglin danglin at gcc dot gnu.org 2012-05-06 
21:00:41 UTC ---
Fixed.


[Bug target/53227] [4.8 Regression] FAIL: gcc.target/i386/movbe-2.c scan-assembler-times movbe[ \t] 4

2012-05-06 Thread ubizjak at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53227

Uros Bizjak ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
URL||http://gcc.gnu.org/ml/gcc-p
   ||atches/2012-05/msg00430.htm
   ||l
 Resolution||FIXED

--- Comment #8 from Uros Bizjak ubizjak at gmail dot com 2012-05-06 21:00:49 
UTC ---
Fixed.


[Bug fortran/53259] [OOP] virtual call to type bound procedure calls base, not extension?

2012-05-06 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53259

Tobias Burnus burnus at gcc dot gnu.org changed:

   What|Removed |Added

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

--- Comment #1 from Tobias Burnus burnus at gcc dot gnu.org 2012-05-06 
21:39:05 UTC ---
According to the comments at
http://gcc.gnu.org/ml/fortran/2012-05/msg00041.html and
http://gcc.gnu.org/ml/fortran/2012-05/msg00037.html, the result seems to be
correct.

Also ifort (v11.1), pgf95 (v11.11-0) and Cray cce 8.02 give the same result as
gfortran 4.6 to 4.8.

Thus, I close the bug as INVALID.

(If you find an indication that the PR is not invalid, feel free to reopen it.)


[Bug bootstrap/52391] [4.7/4.8 regression] genattrtab almost 5X slower for m68k than in 4.6 and earlier releases

2012-05-06 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52391

--- Comment #14 from Steven Bosscher steven at gcc dot gnu.org 2012-05-06 
21:40:18 UTC ---
Created attachment 27328
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27328
Remove unused sched_branch_type stuff from m68k

Patch speaks for itself.

Without patch, trunk r186902, run time for genattrtab is 9m03s.

With the m68k-specific pieces of this patch, genattrtab run time is 1m53s.


[Bug c++/53261] New: [4.8 Regression] ICE in tree_strip_nop_conversions

2012-05-06 Thread danglin at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53261

 Bug #: 53261
   Summary: [4.8 Regression] ICE in tree_strip_nop_conversions
Classification: Unclassified
   Product: gcc
   Version: 4.8.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: dang...@gcc.gnu.org
  Host: hppa*-*-* (32-bit)
Target: hppa*-*-* (32-bit)
 Build: hppa*-*-* (32-bit)


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

/home/dave/gnu/gcc/objdir/./prev-gcc/g++ -B/home/d
ave/gnu/gcc/objdir/./prev-gcc/
-B/home/dave/opt/gnu/gcc/gcc-4.7.0/hppa-linux-gnu
/bin/ -nostdinc++
-B/home/dave/gnu/gcc/objdir/prev-hppa-linux-gnu/libstdc++-v3/s
rc/.libs
-B/home/dave/gnu/gcc/objdir/prev-hppa-linux-gnu/libstdc++-v3/libsupc++/
.libs
-I/home/dave/gnu/gcc/objdir/prev-hppa-linux-gnu/libstdc++-v3/include/hppa-
linux-gnu -I/home/dave/gnu/gcc/objdir/prev-hppa-linux-gnu/libstdc++-v3/include
-
I/home/dave/gnu/gcc/gcc/libstdc++-v3/libsupc++
-L/home/dave/gnu/gcc/objdir/prev-
hppa-linux-gnu/libstdc++-v3/src/.libs
-L/home/dave/gnu/gcc/objdir/prev-hppa-linu
x-gnu/libstdc++-v3/libsupc++/.libs  -I../../gcc/libcpp -I.
-I../../gcc/libcpp/..
/include -I../../gcc/libcpp/include  -g -O2 -W -Wall -Wno-narrowing
-Wwrite-stri
ngs -Wmissing-format-attribute -pedantic -Wno-long-long -Werror -fno-exceptions 
-fno-rtti -I../../gcc/libcpp -I. -I../../gcc/libcpp/../include
-I../../gcc/libcp
p/include  -c -o files.o -MT files.o -MMD -MP -MF .deps/files.Tpo
../../gcc/libc
pp/files.c
../../gcc/libcpp/files.c: In function ‘bool pch_open_file(cpp_reader*,
_cpp_file
*, bool*)’:
../../gcc/libcpp/files.c:288:43: internal compiler error: Segmentation fault
   if (file-name[0] == '\0' || !pfile-cb.valid_pch)

Program received signal SIGSEGV, Segmentation fault.
tree_strip_nop_conversions (exp=0x0) at ../../gcc/gcc/tree.c:11211
11211  while (tree_nop_conversion (exp))
(gdb) bt
#0  tree_strip_nop_conversions (exp=0x0) at ../../gcc/gcc/tree.c:11211
#1  0x00954b9c in integer_zerop (expr=optimized out)
at ../../gcc/gcc/tree.c:1731
#2  0x002d6f2c in warn_logical_operator (location=1226970, 
code=optimized out, type=0x40f4e660, code_left=optimized out, 
op_left=0x4130f260, code_right=EQ_EXPR, op_right=0x4130f2e0)
at ../../gcc/gcc/c-family/c-common.c:1647
#3  0x00096944 in build_new_op_1 (loc=1226970, code=TRUTH_ORIF_EXPR, flags=3, 
arg1=0x4130f260, arg2=0x4130f2e0, arg3=optimized out, 
overload=0xfbf02df8, complain=3) at ../../gcc/gcc/cp/call.c:5261
#4  0x00096aa4 in build_new_op (loc=1093726944, code=TRUTH_ORIF_EXPR, 
flags=1089803568, arg1=0x0, arg2=0x4130f2e0, arg3=0x0, 
overload=0xfbf02df8, complain=3) at ../../gcc/gcc/cp/call.c:5326
#5  0x001f4568 in build_x_binary_op (loc=1089803568, code=TRUTH_ORIF_EXPR, 
arg1=0x0, arg1_code=1226970, arg2=0x4130f260, arg2_code=ERROR_MARK, 
overload=0xfbf02df8, complain=3) at ../../gcc/gcc/cp/typeck.c:3608
#6  0x001d1f54 in cp_parser_binary_expression (parser=0x4130f2e0, 
cast_p=optimized out, no_toplevel_fold_p=optimized out, 
prec=PREC_INCLUSIVE_OR_EXPRESSION, pidk=0x0)
at ../../gcc/gcc/cp/parser.c:7399
#7  0x001d2168 in cp_parser_assignment_expression (parser=0x4102e460, 
cast_p=optimized out, pidk=0x0) at ../../gcc/gcc/cp/parser.c:7504
#8  0x001d8b34 in cp_parser_expression (parser=0x4102e460, 
---Type return to continue, or q return to quit---
cast_p=optimized out, pidk=0x0) at ../../gcc/gcc/cp/parser.c:7650
#9  0x001db68c in cp_parser_condition (parser=0x4102e460)
at ../../gcc/gcc/cp/parser.c:9281
#10 0x001c2cb0 in cp_parser_selection_statement (if_p=0x0, parser=0x4102e460)
at ../../gcc/gcc/cp/parser.c:9058
#11 cp_parser_statement (parser=0x4102e460, in_statement_expr=0x0, 
in_compound=optimized out, if_p=0x0) at ../../gcc/gcc/cp/parser.c:8645
#12 0x001c434c in cp_parser_statement_seq_opt (parser=0x0, 
in_statement_expr=0x4f) at ../../gcc/gcc/cp/parser.c:9004
#13 0x001c45a8 in cp_parser_compound_statement (parser=0x0, 
in_statement_expr=0x12b8c0, in_try=optimized out, 
function_body=optimized out) at ../../gcc/gcc/cp/parser.c:8958
#14 0x001dfd2c in cp_parser_function_body (parser=0x4102e460)
at ../../gcc/gcc/cp/parser.c:17422
#15 cp_parser_ctor_initializer_opt_and_function_body (parser=0x4102e460)
at ../../gcc/gcc/cp/parser.c:17456
#16 0x001e0408 in cp_parser_function_definition_after_declarator (parser=0x0, 
inline_p=optimized out) at ../../gcc/gcc/cp/parser.c:21069
#17 0x001e09ac in cp_parser_function_definition_from_specifiers_and_declarator
(declarator=0xd6d370, attributes=0x0, decl_specifiers=optimized out, 
parser=0x4102e460) at ../../gcc/gcc/cp/parser.c:20989
#18 cp_parser_init_declarator (parser=0x4102e460, 
decl_specifiers=optimized out, checks=0x0, 
---Type return to continue, or q return 

[Bug target/53250] [4.8 Regression] [SH] ICE: in change_address_1, at emit-rtl.c:2018

2012-05-06 Thread olegendo at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53250

--- Comment #3 from Oleg Endo olegendo at gcc dot gnu.org 2012-05-06 22:39:01 
UTC ---
Author: olegendo
Date: Sun May  6 22:38:57 2012
New Revision: 187218

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=187218
Log:
PR target/53250
* config/sh/sh.c (sh_rtx_costs): Handle SET.


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


[Bug rtl-optimization/53176] [4.8 Regression] gcc.dg/lower-subreg-1.c FAILs

2012-05-06 Thread hp at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53176

--- Comment #21 from Hans-Peter Nilsson hp at gcc dot gnu.org 2012-05-06 
23:25:40 UTC ---
All this should be taken care of by the default rtx costs; I don't think any
target patches should be needed for these targets at least not for this case. 
The default should be N*natural_set_cost, where natural_set_cost is the cost of
setting a register (possibly the default) and N is the number of UNITS_PER_WORD
for the rtx.
And, the target rtx cost hook should only need to handle rtxes that are valid
for the target; no phony insns in larger modes for which there is no named
pattern (not documented as such but inferring from only valid addresses needing
to be handled by TARGET_ADDRESS_COST).


[Bug rtl-optimization/53176] [4.8 Regression] gcc.dg/lower-subreg-1.c FAILs

2012-05-06 Thread hp at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53176

--- Comment #22 from Hans-Peter Nilsson hp at gcc dot gnu.org 2012-05-06 
23:28:55 UTC ---
(In reply to comment #21)

Hopefully it was obvious, but:

 ... where natural_set_cost is the cost of
 setting a register (possibly the default)

... for the UNITS_PER_WORD case ...


[Bug other/29442] insn-attrtab has grown too large

2012-05-06 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29442

Steven Bosscher steven at gcc dot gnu.org changed:

   What|Removed |Added

 CC||matz at gcc dot gnu.org

--- Comment #15 from Steven Bosscher steven at gcc dot gnu.org 2012-05-06 
23:39:46 UTC ---
While looking for ways to speed up genattrtab itself, I found this patch, which
doesn't speed up genattrtab, but would make the insn-*tab.c files smaller:

http://gcc.gnu.org/ml/gcc-patches/2003-09/msg00316.html

Micha, this appears to have been dropped. Any reason why you never asked for an
OK to commit this patch?


[Bug c++/52672] internal compiler error: in cxx_eval_indirect_ref, at cp/semantics.c:6766

2012-05-06 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52672

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
  Known to work||4.7.1, 4.8.0
 Resolution||FIXED
   Target Milestone|--- |4.7.1

--- Comment #7 from Paolo Carlini paolo.carlini at oracle dot com 2012-05-07 
00:19:25 UTC ---
Closing as fixed.


[Bug middle-end/53239] [4.7 Regression] VRP vs named value return opt

2012-05-06 Thread proski at gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53239

--- Comment #6 from proski at gnu dot org 2012-05-07 02:50:04 UTC ---
Created attachment 27330
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27330
Self-contained test case

Run the compile script.  The output would be:

return = 2/1
return = 1/1

It means that the output depends on whether -fno-tree-vrp is used.


[Bug bootstrap/44959] [4.5 Regression] bootstrap failed at Comparing stages 2 and 3

2012-05-06 Thread htl10 at users dot sourceforge.net
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44959

Hin-Tak Leung htl10 at users dot sourceforge.net changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|FIXED   |
  Known to fail||4.6.2

--- Comment #15 from Hin-Tak Leung htl10 at users dot sourceforge.net 
2012-05-07 03:21:20 UTC ---
/home/htl10/tmp-build/gcc-4.6.2-build'
Comparing stages 2 and 3
warning: gcc/cc1-checksum.o differs
warning: gcc/cc1plus-checksum.o differs
warning: gcc/cc1obj-checksum.o differs
Bootstrap comparison failure!
gcc/java/win32-host.o differs
gcc/build/version.o differs
gcc/build/min-insn-modes.o differs
gcc/c-lang.o differs
gcc/insn-peep.o differs
gcc/insn-enums.o differs
gcc/graphite-blocking.o differs
gcc/graphite-clast-to-gimple.o differs
gcc/graphite-cloog-util.o differs
gcc/graphite-dependences.o differs
gcc/graphite-flattening.o differs
gcc/graphite-poly.o differs
gcc/graphite-interchange.o differs
gcc/graphite-ppl.o differs
gcc/graphite-scop-detection.o differs
gcc/graphite-sese-to-poly.o differs
gcc/hwint.o differs
gcc/loop-doloop.o differs
gcc/target-globals.o differs
gcc/version.o differs
gcc/vmsdbgout.o differs
gcc/xcoffout.o differs
gcc/collect2-aix.o differs
intl/osdep.o differs
libiberty/safe-ctype.o differs

File sizes seems crazy:

# ls -l */cc*-checksum.o
-rw-r--r--   1 root system   592 May  7 02:38 stage2-gcc/cc1-checksum.o
-rw-r--r--   1 root system   600 May  7 03:07
stage2-gcc/cc1obj-checksum.o
-rw-r--r--   1 root system   600 May  7 02:49
stage2-gcc/cc1plus-checksum.o
-rw-r--r--   1 root system 22928 May  7 03:33 stage3-gcc/cc1-checksum.o
-rw-r--r--   1 root system 22928 May  7 03:40
stage3-gcc/cc1obj-checksum.o
-rw-r--r--   1 root system 22936 May  7 03:36
stage3-gcc/cc1plus-checksum.o