[Bug target/26290] [4.1 Regression]: code pessimization wrt. GCC 4.0 probably due to TARGET_MEM_REF

2007-05-18 Thread t dot artem at mailcity dot com


--- Comment #18 from t dot artem at mailcity dot com  2007-05-18 08:32 
---
As for GCC 4.2.0 the bug is still relevant.


-- 


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



[Bug fortran/31716] segfault with real array bounds

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #8 from dfranke at gcc dot gnu dot org  2007-05-18 08:50 ---
Jerry, the patch eliminates the ICE and regtests cleanly.

$> cat pr31716.f90
program main
  real, parameter :: n = 1024, iter=1000
  real, dimension(n) :: num1,num2
  call random_number(num1)
  do i=1,iter
num2 = num1**2
  end do
end program main

$> gfortran-svn -Wall pr31760.f90
pr31760.f90:3.18:

  real, dimension(n) :: num1,num2
 1
Error: Expression at (1) must be of INTEGER type
pr31760.f90:3.33:

  real, dimension(n) :: num1,num2
1
Error: The module or main program array 'num2' at (1) must have constant shape
pr31760.f90:3.18:

  real, dimension(n) :: num1,num2
 1
Error: Expression at (1) must be of INTEGER type
pr31760.f90:3.28:

  real, dimension(n) :: num1,num2
   1
Error: The module or main program array 'num1' at (1) must have constant shape


The messages "must have constant shape" puzzles me as N is a PARAMETER?!


-- 


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



[Bug fortran/31716] segfault with real array bounds

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #9 from dfranke at gcc dot gnu dot org  2007-05-18 08:53 ---
> $> gfortran-svn -Wall pr31760.f90
This should of course read "gfortran-svn -Wall pr31716.f90" - the contents of
the file does correspond to this PR, the file name does not ...


-- 


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



[Bug c++/31970] g++ compiles incorrect c++ code

2007-05-18 Thread asp_ at mail dot ru


--- Comment #2 from asp_ at mail dot ru  2007-05-18 08:56 ---
Have you received correct link?

http://mx1.ru/~asp/super_example.cpp

Also I've sent email with file attached. Did you receive it?

(In reply to comment #1)
> The link you give doesn't work. Can you attach your testcase?
> W.
> 


-- 


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



[Bug middle-end/31344] [4.3 Regression] bootstrap broken on i[345]86-linux

2007-05-18 Thread ubizjak at gmail dot com


--- Comment #25 from ubizjak at gmail dot com  2007-05-18 09:48 ---
Fixed.


-- 

ubizjak at gmail dot com changed:

   What|Removed |Added

URL|http://gcc.gnu.org/ml/gcc-  |http://gcc.gnu.org/ml/gcc-
   |patches/2007-   |patches/2007-
   |05/msg00390.html|05/msg01192.html
 Status|ASSIGNED|RESOLVED
  Component|rtl-optimization|middle-end
 Resolution||FIXED


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



[Bug rtl-optimization/31344] [4.3 Regression] bootstrap broken on i[345]86-linux

2007-05-18 Thread uros at gcc dot gnu dot org


--- Comment #23 from uros at gcc dot gnu dot org  2007-05-18 09:37 ---
Subject: Bug 31344

Author: uros
Date: Fri May 18 08:37:03 2007
New Revision: 124825

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124825
Log:
PR rtl-optimization/31344
* expr.c (emit_move_change_mode): Change mode of push operands here.

testsuite/ChangeLog:

PR rtl-optimization/31344
* gcc.dg/pr31344.c: New test.


Added:
trunk/gcc/testsuite/gcc.dg/pr31344.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/expr.c
trunk/gcc/testsuite/ChangeLog


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread rguenth at gcc dot gnu dot org


--- Comment #81 from rguenth at gcc dot gnu dot org  2007-05-18 09:45 
---
Yes, both testcases are valid and are using placement new.  Note the loop
is only to confuse the optimizers enough to re-order the stores and produce
a miscompilation.  Note the loop runs exactly once, and in essence we are doing

  int *p = XXX; /* integer memory */
  *p = 0;
  long *q = new (p) long;
  *q = -1;

and the compiler is re-ordering the stores which is wrong.  *p and *q need to
alias because of the placement new.


-- 


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



[Bug rtl-optimization/31344] [4.3 Regression] bootstrap broken on i[345]86-linux

2007-05-18 Thread uros at gcc dot gnu dot org


--- Comment #24 from uros at gcc dot gnu dot org  2007-05-18 09:46 ---
Subject: Bug 31344

Author: uros
Date: Fri May 18 08:46:30 2007
New Revision: 124826

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124826
Log:
* PR rtl-optimization/31344 is actually middle-end bug.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/testsuite/ChangeLog


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread rguenth at gcc dot gnu dot org


--- Comment #82 from rguenth at gcc dot gnu dot org  2007-05-18 09:47 
---
Oh, and the double-ness is to show that at RTL expansion we actually unify
alias
sets of long and double, not long and int, which is wrong again.  See my
comment #51.


-- 


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



[Bug middle-end/31984] Infinite loop (eating all mem) compiling xorg 1.3.0.0

2007-05-18 Thread rguenth at gcc dot gnu dot org


--- Comment #2 from rguenth at gcc dot gnu dot org  2007-05-18 10:14 ---


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


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||DUPLICATE


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



[Bug target/30052] [4.2 Regression] possible quadratic behaviour.

2007-05-18 Thread rguenth at gcc dot gnu dot org


--- Comment #18 from rguenth at gcc dot gnu dot org  2007-05-18 10:14 
---
*** Bug 31984 has been marked as a duplicate of this bug. ***


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||m dot vegni at it-systems
   ||dot it


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



[Bug fortran/18923] segfault after subroutine name confusion

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #12 from dfranke at gcc dot gnu dot org  2007-05-18 11:06 
---
The testcase of comment #8 does not segfault on mainline (20070517) any more,
but still does in the 4.2 branch.

Messages for mainline (note the empty names in "Error: '' at (1) is not a
function"):

$> gfortran-svn -g -Wall -c pr18923.f90
pr18923.f90:3.16:

  subroutine FOO
   1
Error: MODULE attribute conflicts with PROCEDURE attribute at (1)
pr18923.f90:4.16:

integer :: I
   1
Error: Unexpected data declaration statement in CONTAINS section at (1)
pr18923.f90:5.56:

character(len=selected_int_kind(I)) :: C, D, E, F, G
   1
Error: Unexpected data declaration statement in CONTAINS section at (1)
pr18923.f90:6.5:

  end subroutine
1
Error: Expecting END MODULE statement at (1)
pr18923.f90:5.18:

character(len=selected_int_kind(I)) :: C, D, E, F, G
 1
Error: '' at (1) is not a function
pr18923.f90:5.18:

character(len=selected_int_kind(I)) :: C, D, E, F, G
 1
Error: '' at (1) is not a function
pr18923.f90:5.18:

character(len=selected_int_kind(I)) :: C, D, E, F, G
 1
Error: '' at (1) is not a function
pr18923.f90:5.18:

character(len=selected_int_kind(I)) :: C, D, E, F, G
 1
Error: '' at (1) is not a function
pr18923.f90:5.18:

character(len=selected_int_kind(I)) :: C, D, E, F, G
 1
Error: '' at (1) is not a function
pr18923.f90:5.18:

character(len=selected_int_kind(I)) :: C, D, E, F, G
 1
Error: Expression at (1) must be of INTEGER type



Backtrace for 4.2:
Program received signal SIGSEGV, Segmentation fault.
gfc_resolve_expr (e=0x8612478) at
/home/daniel/svn/gcc-4.2/gcc/fortran/resolve.c:1751
1751expr->ts = expr->symtree->n.sym->result->ts;
(gdb) bt
#0  gfc_resolve_expr (e=0x8612478) at
/home/daniel/svn/gcc-4.2/gcc/fortran/resolve.c:1751
#1  0x08092ade in resolve_index_expr (e=0x8611160) at
/home/daniel/svn/gcc-4.2/gcc/fortran/resolve.c:5362
#2  0x08092bfb in resolve_charlen (cl=) at
/home/daniel/svn/gcc-4.2/gcc/fortran/resolve.c:5386
#3  0x0809311f in resolve_types (ns=0x86119c0) at
/home/daniel/svn/gcc-4.2/gcc/fortran/resolve.c:7255
#4  0x080930a7 in resolve_types (ns=0x8610a20) at
/home/daniel/svn/gcc-4.2/gcc/fortran/resolve.c:7248
#5  0x08095e2c in gfc_resolve (ns=0x8610a20) at
/home/daniel/svn/gcc-4.2/gcc/fortran/resolve.c:7311
#6  0x0808a309 in gfc_parse_file () at
/home/daniel/svn/gcc-4.2/gcc/fortran/parse.c:3222
#7  0x080ac02d in gfc_be_parse_file (set_yydebug=0) at
/home/daniel/svn/gcc-4.2/gcc/fortran/f95-lang.c:303
#8  0x08310faa in toplev_main (argc=2, argv=0xbf87ea84) at
/home/daniel/svn/gcc-4.2/gcc/toplev.c:1033
#9  0x080d893f in main (argc=2, argv=0x1) at
/home/daniel/svn/gcc-4.2/gcc/main.c:35


-- 

dfranke at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||dfranke at gcc dot gnu dot
   ||org


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



[Bug libstdc++/31970] g++ compiles incorrect c++ code

2007-05-18 Thread pcarlini at suse dot de


--- Comment #5 from pcarlini at suse dot de  2007-05-18 11:45 ---
Note that this is only a Quality of Implementation issue, cannot be considered
a bug, because the type of set::iterator is implementation defined in the
standard, and must only conform to the general requirements in 23.1, must be a
bidirectional iterator.


-- 


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



[Bug libstdc++/31970] g++ compiles incorrect c++ code

2007-05-18 Thread pcarlini at suse dot de


--- Comment #4 from pcarlini at suse dot de  2007-05-18 11:33 ---
Suspending until the next ABI...


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

 Status|NEW |SUSPENDED


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



[Bug libstdc++/31970] g++ compiles incorrect c++ code

2007-05-18 Thread pcarlini at suse dot de


--- Comment #3 from pcarlini at suse dot de  2007-05-18 11:33 ---
Yes, that's right, the issue dates back to the original HP / SGI design:
certainly isn't something we can fix without breaking binary compatibility. In
short, it's because _Rb_tree_iterator is templatized only on _Tp.


-- 

pcarlini at suse dot de changed:

   What|Removed |Added

 Status|WAITING |NEW
  Component|c++ |libstdc++
 Ever Confirmed|0   |1
   Last reconfirmed|-00-00 00:00:00 |2007-05-18 11:33:02
   date||


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



[Bug fortran/20373] INTRINSIC symbols can be given the wrong type

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #4 from dfranke at gcc dot gnu dot org  2007-05-18 12:46 ---
F95, section 12.3.2.3, INTRINSIC statement:
R1209 intrinsic-stmt   isINTRINSIC [ :: ] intrinsic-procedure-name-list
Constraint:  Each intrinsic-procedure-name shall be the name of an intrinsic
procedure.

This doesn't mention any types at all. In addition, only SUN warns about a
superfluous type here:

$> ifort -warn all pr20373.f90# no message
$> sunf95 -w3 pr20373.f90

integer, intrinsic :: dsqrt
  ^
"pr20373.f90", Line = 1, Column = 23: CAUTION: The type statement for generic
intrinsic function DSQRT is ignored.


Following this, following patch emits a warning if std=gnu and an error if
std=f95|f2203 (not regtested). The wording of the msg could be improved ...

Index: resolve.c
===
--- resolve.c   (revision 124790)
+++ resolve.c   (working copy)
@@ -6400,6 +6400,12 @@
   && !gfc_intrinsic_name(sym->name, 1))
 gfc_error("Intrinsic at %L does not exist", &sym->declared_at);

+  /* Due to F95, 12.3.2.3, INTRINSIC statements shall have no type.  */
+  if (sym->attr.intrinsic && sym->ts.type != BT_UNKNOWN)
+gfc_notify_std(GFC_STD_LEGACY | GFC_STD_GNU,
+  "Intrinsic at %L shall not have a type specifier",
+  &sym->declared_at);
+
   /* Resolve array specifier. Check as well some constraints
  on COMMON blocks.  */


$> gfortran-svn -g -Wall -std=gnu pr20373.f90
pr20373.f90:1.27:

integer, intrinsic :: dsqrt
  1
Warning: Intrinsic at (1) shall not have a type specifier


-- 

dfranke at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||dfranke at gcc dot gnu dot
   ||org
   Keywords||diagnostic, patch
  Known to fail||4.2.1 4.3.0


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



[Bug fortran/24965] Wrong file name in error message

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #3 from dfranke at gcc dot gnu dot org  2007-05-18 14:00 ---
I'm not 100% sure whether the code below resembles the problem Erik reported
here, but if so, it is fixed in mainline and 4.2:

$> cat pr24965.inc
real :: x

$> cat pr24965.f90
real :: x
include "pr24965.inc"
x = 3.14
end

$> gfortran-svn -g -Wall pr24965.f90
pr24965.inc:1.9:
Included at pr24965.f90:2:

real :: x
1
Error: Symbol 'x' at (1) already has basic type of REAL


-- 

dfranke at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||dfranke at gcc dot gnu dot
   ||org


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



[Bug target/31985] New: Wide operations (i.e. adddi3) are split too late

2007-05-18 Thread ubizjak at gmail dot com
Following test generates unoptimized code for test_c(). Generated code should
look like code, generated for test_asm():

--cut here--
typedef unsigned SI __attribute__ ((mode (SI)));
typedef unsigned DI __attribute__ ((mode (DI)));


#define add_ss_c(sh, sl, ah, al, bh, bl)\
 {  \
   DI __a = (al) | ((DI) ah << 32); \
   DI __b = (bl) | ((DI) bh << 32); \
\
   DI __c = __a + __b;  \
\
   (sl) = (SI) (__c & 0x);  \
   (sh) = (SI) (__c >> 32); \
 }


#define add_ss_asm(sh, sl, ah, al, bh, bl)  \
 __asm__ ("addl %5,%1\n\tadcl %3,%0"\
   : "=r" ((SI) (sh)),  \
 "=&r" ((SI) (sl))  \
   : "%0" ((SI) (ah)),  \
 "g" ((SI) (bh)),   \
 "%1" ((SI) (al)),  \
 "g" ((SI) (bl)))


void test_c (SI a, SI b, SI c, SI d)
{
 volatile SI x, y;


 add_ss_c (x, y, a, b, c, d);
}


void test_asm (SI a, SI b, SI c, SI d)
{
 volatile SI x, y;


 add_ss_asm (x, y, a, b, c, d);
}
--cut here--

gcc -O2 -fomit-frame-pointer:

test_c:
   subl$28, %esp   #,
   xorl%edx, %edx  #
   movl40(%esp), %eax  # c, tmp66
   movl44(%esp), %ecx  # d, d
   movl%esi, 20(%esp)  #,
   movl%ebx, 16(%esp)  #,
   movl%eax, %edx  # tmp66,
   movl$0, %eax#, tmp66
   movl%eax, %esi  #, tmp74
   movl32(%esp), %eax  # a, tmp70
   movl%edx, %ebx  # tmp75, __c
   orl %ecx, %esi  # d, tmp74
   xorl%edx, %edx  #
   movl%esi, %ecx  # tmp74, __c
   movl36(%esp), %esi  # b, b
   movl%edi, 24(%esp)  #,
   movl24(%esp), %edi  #,
   movl%eax, %edx  # tmp70,
   movl$0, %eax#, tmp70
   orl %esi, %eax  # b, tmp72
   movl20(%esp), %esi  #,
   addl%eax, %ecx  # tmp72, __c
   adcl%edx, %ebx  #, __c
   movl%ecx, 8(%esp)   # __c, y
   movl%ebx, %ecx  # __c, __c
   xorl%ebx, %ebx  # __c
   movl16(%esp), %ebx  #,
   movl%ecx, 12(%esp)  # __c, x
   addl$28, %esp   #,
   ret


test_asm:
   subl$16, %esp   #,
   movl20(%esp), %eax  # a, a
   movl24(%esp), %edx  # b, b
#APP
   addl 32(%esp),%edx  # d, tmp63
   adcl 28(%esp),%eax  # c, tmp62
#NO_APP
   movl%eax, 12(%esp)  # tmp62, x
   movl%edx, 8(%esp)   # tmp63, y
   addl$16, %esp   #,
   ret

This issue needs to be fixed in order to implement effective i386 (DImode) and
x86_64 (TImode) wide operations in longlong.h. As discussed in thread starting
at [1], it was found that the problem is, that wide operations are split after
reload [2] due to FLAGS_REG link between "add" and "adc" insns. FLAGS_REG can
be accidetally clobbered by reload.

[1] http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01084.html
[2] http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01187.html


-- 
   Summary: Wide operations (i.e. adddi3) are split too late
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Severity: enhancement
  Priority: P3
 Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ubizjak at gmail dot com
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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



[Bug target/17390] missing floating point compare optimization

2007-05-18 Thread ubizjak at gmail dot com


--- Comment #13 from ubizjak at gmail dot com  2007-05-18 15:13 ---
(In reply to comment #12)
> ping

This patch needs to be ported to dataflow infrastructure [1] and has to be
re-thought a bit.

[1]: http://gcc.gnu.org/ml/gcc-patches/2006-05/msg00040.html


-- 


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



[Bug tree-optimization/31976] [4.3 Regression] ICE in ssa_operand_alloc, at tree-ssa-operands.c:487 with -O3

2007-05-18 Thread tbm at cyrius dot com


--- Comment #1 from tbm at cyrius dot com  2007-05-18 14:58 ---
Created an attachment (id=13579)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13579&action=view)
preprocessed source

delta's taking ages on this, so here's the current (large) code.


-- 


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



[Bug middle-end/31490] Compile error section type conflict

2007-05-18 Thread segher at kernel dot crashing dot org


--- Comment #10 from segher at kernel dot crashing dot org  2007-05-18 
14:57 ---
Created an attachment (id=13578)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13578&action=view)
proposed patch

still need to run the testsuite on it


-- 


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



[Bug rtl-optimization/31987] New: [4.3 Regression] ICE in remove_insn, at emit-rtl.c:3579 at -O3

2007-05-18 Thread tbm at cyrius dot com
I get the following ICE with gcc 4.3 at -O3:

(sid)24533:[EMAIL PROTECTED]: ~] /usr/lib/gcc-snapshot/bin/g++ -c -O3 
ickle-Icons.cc
ickle-Icons.cc: In member function 'bool Icons::setIcons(const std::string&)':
ickle-Icons.cc:152: internal compiler error: in remove_insn, at emit-rtl.c:3579
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html> for instructions.


-- 
   Summary: [4.3 Regression] ICE in remove_insn, at emit-rtl.c:3579
at -O3
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tbm at cyrius dot com


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



[Bug c++/31986] conversion-type-id should match in both contexts

2007-05-18 Thread andrew dot stubbs at st dot com


--- Comment #1 from andrew dot stubbs at st dot com  2007-05-18 14:54 
---
EDG version 3.8 gives the warning:

t.cpp", line 15: warning: 
  ambiguous class member reference -- type "T" (declared at line 14)
  used in preference to type "C::T" (declared at line 6)
printf ("%d\n", (T) c.operator T());  // invalid
   ^

In contrast to GCC, this gives the output "2 2 2", not "1 2 2".

And in -strict mode (full standard conformance) gives the error:
t.cpp", line 15: error: 
  ambiguous class member reference -- type "T" (declared at line 14)
  used in preference to type "C::T" (declared at line 6)
printf ("%d\n", (T) c.operator T());  // invalid
   ^


-- 


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



[Bug target/30052] [4.2 Regression] possible quadratic behaviour.

2007-05-18 Thread dberlin at gcc dot gnu dot org


--- Comment #19 from dberlin at gcc dot gnu dot org  2007-05-18 14:46 
---
Created an attachment (id=13576)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13576&action=view)
Possible patch

The attached is a huge backport of the 4.3 solver changes.
I have only minimally tested it.
Let me know if it helps on memory usage, and I will bootstrap/regtest it.


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread rguenth at gcc dot gnu dot org


--- Comment #85 from rguenth at gcc dot gnu dot org  2007-05-18 14:46 
---
To avoid confusion about what testcase we speak, let's talk about the one
I replicated below.  I believe this one is valid as the storage is a union
instantiated in main() and a pointer to it is passed to foo().  It doesn't
matter the argument pointer type is double*, as we access the memory first
as int* (which is ok and starts lifetime of int typed memory) and then we
EOL that object and start lifetime of a long via placement new (alignment
is ok, as is size).

So, anyone disagrees that the below testcase is valid?


inline void* operator new(unsigned long, void* __p) throw() { return __p; }

void __attribute__((noinline)) bar() {};

long __attribute__((noinline)) foo(double *p, int n)
{
  long *f;
  for (int i=0; ihttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=29286



[Bug c++/31986] New: conversion-type-id should match in both contexts

2007-05-18 Thread andrew dot stubbs at st dot com
The following C++ program should not compile:

#include 

class C
{
public:
  typedef float T;
  operator T() {return 1;};
  operator int() {return 2;};
} c;

int
main ()
{
  typedef int T;
  printf ("%d\n", (T) c.operator T());  // invalid
  printf ("%d\n", T(c));
  printf ("%d\n", (T)c);
}

The C++ standard, clause 3.4.5, paragraph 7, says that the `T' should refer to
the same type in both `C' and `main'.

The output from this program, with GCC 4.1.1, is "1 2 2" (i.e. a `float' and
two `int's). This shows that the name `T' is significant here.


-- 
   Summary: conversion-type-id should match in both contexts
   Product: gcc
   Version: 4.1.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: andrew dot stubbs at st dot com


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



[Bug fortran/24633] MODULE attribute conflicts with PROCEDURE attribute

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #6 from dfranke at gcc dot gnu dot org  2007-05-18 14:25 ---
Subject: Bug 24633

Author: dfranke
Date: Fri May 18 13:25:07 2007
New Revision: 124828

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124828
Log:
2007-05-18  Daniel Franke  <[EMAIL PROTECTED]>

PR fortran/24633
* symbol.c (gfc_add_flavor): Add the NAME to error message if
available.


Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/symbol.c


-- 


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



[Bug c/31983] Add option to gcc to display specific language manual section reference for error/warning encountered.

2007-05-18 Thread manu at gcc dot gnu dot org


--- Comment #3 from manu at gcc dot gnu dot org  2007-05-18 14:16 ---
I see several reasons for not doing this:

1) External tools expect the current output format. Your proposal will break
that.
2) Standards are not freely distributable, thus they are not widely available.
3) Getting the extra text (testcases, examples, etc) right seems even more
complex than getting the original message right.
4) Given the effort-benefit ratio, I don't see many GCC developers jumping into
this.

Nevertheless, as Andrew points out, we would rather correct cryptic
diagnostics. Whenever you find one, you could open a bug report for it. We
already have similar bug reports (see PR 29062).

Finally, if you still think it is worth it, you could implement it yourself as
a wrapper to the output of GCC (similar to how colorgcc [*] works). Parse the
output of GCC, match diagnostic messages, and depending on the matched message,
write whatever text you think would be appropriate. Much easier than hacking
GCC itself and it will give an idea on how difficult the task actually is and
how many people would be actually interested on it.

[*] http://packages.debian.org/unstable/devel/colorgcc.html


-- 

manu at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||manu at gcc dot gnu dot org


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread gdr at cs dot tamu dot edu


--- Comment #83 from gdr at cs dot tamu dot edu  2007-05-18 14:26 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement new does not change the
dynamic type as it should

"ian at airs dot com" <[EMAIL PROTECTED]> writes:

| The test case in comment #71 doesn't use placement new either.
| 
| This PR was originally about placement new.

Yes.

|  I think there is general agreement
| thta placement new needs to avoid aliasing problem.

Yes.

The intent of placement new is to specify a new dynamic type, and end
the lifetime of previous object.  This is type safe, beause the "old"
object no longer exists.

|  I don't think there is
| general agreement that arbitrary type casting needs to avoid aliasing
problems.

agree.

-- Gaby


-- 


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



[Bug fortran/24633] MODULE attribute conflicts with PROCEDURE attribute

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #7 from dfranke at gcc dot gnu dot org  2007-05-18 14:27 ---
Fixed in trunk, the changes will not be backported to 4.2. 
Closing.


-- 

dfranke at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
  Known to fail|4.1.2 4.2.0 4.3.0   |4.1.2 4.2.0
  Known to work||4.3.0
 Resolution||FIXED
   Target Milestone|--- |4.3.0


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread gdr at cs dot tamu dot edu


--- Comment #84 from gdr at cs dot tamu dot edu  2007-05-18 14:30 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement new does not change the
dynamic type as it should

"rguenth at gcc dot gnu dot org" <[EMAIL PROTECTED]> writes:

| --- Comment #81 from rguenth at gcc dot gnu dot org  2007-05-18 09:45
---
| Yes, both testcases are valid and are using placement new.  Note the loop
| is only to confuse the optimizers enough to re-order the stores and produce
| a miscompilation.  Note the loop runs exactly once, and in essence we are
doing
| 
|   int *p = XXX; /* integer memory */
|   *p = 0;
|   long *q = new (p) long;

This is OK as long as int and long have same alignment, sizeof, etc.
For example, that code is invalid on 64-bit platform where int has
alignment and the storage is not large enough to meet long's
requirement.  This is the case only when the "operator new" is not
overloaded, but is the "standard one".  The exact conditions are
so tricky to explicit that it would just be OK for us to accept it.

-- Gaby


-- 


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



[Bug rtl-optimization/31987] [4.3 Regression] ICE in remove_insn, at emit-rtl.c:3579 at -O3

2007-05-18 Thread tbm at cyrius dot com


--- Comment #1 from tbm at cyrius dot com  2007-05-18 14:55 ---
Created an attachment (id=13577)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13577&action=view)
testcase


-- 


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



[Bug rtl-optimization/31987] [4.3 Regression] ICE in remove_insn, at emit-rtl.c:3579 at -O3

2007-05-18 Thread ubizjak at gmail dot com


--- Comment #2 from ubizjak at gmail dot com  2007-05-18 15:28 ---
Confirmed, backtrace:

#1  0x082aa0d0 in remove_insn (insn=0xb7b25620) at
../../gcc-svn/trunk/gcc/emit-rtl.c:3579
#2  0x08262d08 in delete_insn (insn=0xb7b25620) at
../../gcc-svn/trunk/gcc/cfgrtl.c:134
#3  0x08262ef8 in delete_insn_chain (start=0xb7b25620, finish=0xb7b17140) at
../../gcc-svn/trunk/gcc/cfgrtl.c:214
#4  0x08263161 in rtl_delete_block (b=0xb7b1d2d0) at
../../gcc-svn/trunk/gcc/cfgrtl.c:373
#5  0x08263299 in cfg_layout_delete_block (bb=0xb7b1d2d0) at
../../gcc-svn/trunk/gcc/cfgrtl.c:2467
#6  0x08254fdd in delete_basic_block (bb=0xb7b1d2d0) at
../../gcc-svn/trunk/gcc/cfghooks.c:464
#7  0x08253de1 in cleanup_cfg (mode=64) at
../../gcc-svn/trunk/gcc/cfgcleanup.c:2002
#8  0x0872f2a8 in fwprop_done () at ../../gcc-svn/trunk/gcc/fwprop.c:917
#9  0x0872f357 in fwprop_addr () at ../../gcc-svn/trunk/gcc/fwprop.c:999
#10 0x083ba9e3 in execute_one_pass (pass=0x88fa680) at
../../gcc-svn/trunk/gcc/passes.c:1065


-- 

ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever Confirmed|0   |1
   Last reconfirmed|-00-00 00:00:00 |2007-05-18 15:28:55
   date||


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



[Bug c++/31988] New: new operator should not permit default first parameter

2007-05-18 Thread andrew dot stubbs at st dot com
The following C++ program should not compile:

#include 
class C
{
public:
  void * operator new (size_t = 32); // invalid
};

The C++ standard, clause 3.7.3.1, paragraph 1, says that the first parameter to
new should not have a default argument. GCC gives no error and no warning.


-- 
   Summary: new operator should not permit default first parameter
   Product: gcc
   Version: 4.1.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: andrew dot stubbs at st dot com


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



[Bug fortran/25061] procedure name conflict

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #2 from dfranke at gcc dot gnu dot org  2007-05-18 15:49 ---
I had a short look at this. The problem is in decl.c:693f:

  if (sym->attr.flavor != 0
  && sym->attr.proc != 0
  && (sym->attr.subroutine || sym->attr.function)
  && sym->attr.if_source != IFSRC_UNKNOWN)
gfc_error_now ("Procedure '%s' at %C is already defined at %L",
   name, &sym->declared_at);

(gdb) print sym->name
$5 = 0x887e4f6 "i1"
(gdb) print sym->attr.proc
$8 = PROC_UNKNOWN
(gdb) print sym->attr.if_source
$10 = IFSRC_UNKNOWN

Interestingly, if the subroutine I1 is duplicated, the expected error (I1
already defined as interface) is emitted:

$> cat pr25061.f90
MODULE foo
INTERFACE I1
  SUBROUTINE S1(I)
  END SUBROUTINE S1
  SUBROUTINE S2(R)
  END SUBROUTINE S2
END INTERFACE I1
CONTAINS
  SUBROUTINE I1(I)
  END SUBROUTINE I1
  SUBROUTINE I1(R)   ! same as before, but I1 in triplicate now
  END SUBROUTINE I1
END MODULE

$> gfortran-svn -g -Wall 
pr25061.f90:11.15:

  SUBROUTINE I1(R)
  1
pr25061.f90:2.12:

INTERFACE I1
   2
Error: Procedure 'i1' at (1) is already defined at (2)

$> gfortran-svn -v
gcc version 4.3.0 20070517 (experimental)


Adding Paul, The Interface Wizard, Thomas as CC. He will probably now how to
handle this :)


-- 

dfranke at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||dfranke at gcc dot gnu dot
   ||org, pault at gcc dot gnu
   ||dot org


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



[Bug tree-optimization/30052] [4.2 Regression] possible quadratic behaviour.

2007-05-18 Thread rguenth at gcc dot gnu dot org


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

  Component|target  |tree-optimization
   Target Milestone|--- |4.2.1


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



[Bug target/31989] New: [4.3 regression]: Gcc miscompiles C/C++ on Linux/x86-64

2007-05-18 Thread hjl at lucon dot org
I have verified that this patch

http://gcc.gnu.org/ml/gcc-patches/2007-04/msg01333.html

causes bug 31666 and bug 31681.


-- 
   Summary: [4.3 regression]: Gcc miscompiles C/C++ on Linux/x86-64
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Severity: major
  Priority: P3
 Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hjl at lucon dot org
GCC target triplet: x86_64-unknown-linux-gnu
OtherBugsDependingO 31666,31681
 nThis:


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



[Bug c++/31666] [4.3 regression]: g++.old-deja/g++.other/vbase5.C execution test

2007-05-18 Thread hjl at lucon dot org


--- Comment #2 from hjl at lucon dot org  2007-05-18 16:32 ---
I have verified that this patch

http://gcc.gnu.org/ml/gcc-patches/2007-04/msg01333.html

causes this regression on Linux/x86-64. Richard, can you take a look? Thanks.


-- 

hjl at lucon dot org changed:

   What|Removed |Added

 CC||rth at gcc dot gnu dot org


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



[Bug c/31990] New: udivdi3 not found for linux kernel

2007-05-18 Thread malitzke at metronets dot com
I just filed (verbatim) the PR reproduced below with bugzilla.kernel.org (8501)
Hopefully the exports will be able to communicate directly.

Most recent __gcc__ compiler where this bug did *NOT* occur: gcc-4.2.0
Distribution:
Hardware Environment: x86 (will try on MAC G4 machine)
Software Environment: gcc compilers
Problem Description: "make V=1"  output

kernel/built-in.o: In function `getnstimeofday':
(.text+0x1e48d): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0x1e5b5): undefined reference to `__udivdi3'
kernel/built-in.o: In function `update_wall_time':


-- 
   Summary: udivdi3 not found for linux kernel
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: malitzke at metronets dot com
 GCC build triplet: i686-unknown-linux-gnu
  GCC host triplet: i686-unknown-linux-gnu
GCC target triplet: i686-unknown-linux-gnu


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread ian at airs dot com


--- Comment #86 from ian at airs dot com  2007-05-18 17:24 ---
Re comment #80, comment #81, comment #82.  My patch handles the placement new
in comment #73 to indicate an alias between double and long.  The mis-ordered
code is actually aliasing int and long.  That aliasing is due to a cast to
(int*).  There is no placement new in that cast.  There is no reason for the
compiler to avoid exchanging the store via int* and the store via long*.  Why
should it?  If you omitted the placement new, this would be a standard aliasing
violation between int and double.  With the placement new, it's still an
aliasing violation between int and long.  The placement new doesn't excuse you
from all aliasing violations: it just excuses you from aliasing violations
involving the actual types in question.

If you want to make a principled argument that placement new excuses you from
all aliasing violations, then again the result is that in a function which uses
placement new we should disable TBAA for that function.  That would be OK with
me and easy to implement.


-- 


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



[Bug target/31975] [4.3 Regression] segfault in try_split on mips during bootstrap

2007-05-18 Thread daney at gcc dot gnu dot org


--- Comment #2 from daney at gcc dot gnu dot org  2007-05-18 17:31 ---
Currently building mipsel-unknown-linux-gnu.

# cat LAST_UPDATED
Wed May 16 12:35:18 PDT 2007
Wed May 16 19:35:18 UTC 2007 (revision 124776)

libstdc++-v3 was built without ICEing (currently building in libjava).

The differences from Martin's configuration are that my target is little endian
and I configured with --disable-static.  The testcase would appear to be when
building the static library version of strstream.o (I see no -fpic in the
compiler invocation).

FWIW this is my configure command:

../gcc/configure --with-arch=mips32 --with-float=soft --disable-java-awt
--without-x --disable-tls --enable-__cxa_atexit --disable-jvmpi
--disable-static --disable-libmudflap --enable-languages=c,c++,java

I guess I will try the strstream.ii in the bug attachment with my compiler when
it finishes bootstrapping.


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread mark at codesourcery dot com


--- Comment #89 from mark at codesourcery dot com  2007-05-18 17:44 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement
 new does not change the dynamic type as it should

ian at airs dot com wrote:
> --- Comment #86 from ian at airs dot com  2007-05-18 17:24 ---
> Re comment #80, comment #81, comment #82.  My patch handles the placement new
> in comment #73 to indicate an alias between double and long.  The mis-ordered
> code is actually aliasing int and long.  That aliasing is due to a cast to
> (int*).  There is no placement new in that cast.  There is no reason for the
> compiler to avoid exchanging the store via int* and the store via long*.  Why
> should it? 

I don't think the fact that "p" is a "double *" is relevant; it could
just as well be "void *".  This kind of code is unambiguously valid:

  void f(double *p) { (int*)p = 3; }
  void g() {
int i;
f((double *)&i);
  }

Pedantically, the alignment of "double" has to be no stricter than "int"
for this to be valid, but since we define pointer conversion as a no-op,
it's always valid in GNU C.

This is why I liked your earlier patch that made placement new a memory
barrier.  I think the right handling of placement new is basically to
say "everything we know about types is forgotten here".  One can limit
that to things to which the operand might point, but points-to analysis
(should not) tell you that "p" and "l" cannot point at the same place,
since we have no idea what "p" points at.

I don't think this is equivalent to totally disabling TBAA in C++.


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread ian at airs dot com


--- Comment #88 from ian at airs dot com  2007-05-18 17:35 ---
Regarding comment #85, this again relies on the notion of dynamic type of a
memory location such that the only possible end result is to eliminate TBAA
when compiling C++.  The only thing I can say about this sort of test case is
that I agree that one can make an argument from the standard that this type of
code is valid.  However, as I've said before, e.g., in comment #76, I don't
think that anybody really wants that end result.

Any example that inherently relies on a type cast is going to lead you straight
to eliminating TBAA.  And note that your example is clearly invalid in C. 
Adding the placement new doesn't really have anything to do with whether it is
valid or invalid in C++.

Can you show me a test case which my patch gets wrong which does not involve
type casting outside of placement new itself?


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread ian at airs dot com


--- Comment #87 from ian at airs dot com  2007-05-18 17:27 ---
I'm not sure what to make of comment #84.  We don't determine aliasing by
alignment or size.  We determine it by type.  We don't currently treat int and
long as aliasing each other even if they happen to have the same alignment and
size.  I believe this is correct according to the C standard but I am less
familiar with the C++ standard.  We could change the aliasing machinery in that
way for C++ if it seems to be appropriate, but I would prefer to take that to a
different PR.


-- 


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



[Bug target/31990] udivdi3 not found for linux kernel

2007-05-18 Thread pinskia at gcc dot gnu dot org


--- Comment #1 from pinskia at gcc dot gnu dot org  2007-05-18 17:29 ---
First off, can you attach the preprocessed source for built-in.c ?
Second this might not be a bug in GCC but in the kernel not providing all of
the required functions that are in libgcc.


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

  Component|c   |target


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread pinskia at gcc dot gnu dot org


--- Comment #92 from pinskia at gcc dot gnu dot org  2007-05-18 18:55 
---
> So if that is not valid, and the placement new case is valid, then what is the
> essential difference between the cases?  The variable is being accessed via 
> two
> different types.  Why is that OK?
> void f(double* p) { *(int*)p = 3; long *l = new (p) long; *l = 4; }
> void g() { int i; f((double *)&i); }

Because the memory that p was pointing to, stops being an int once a placement
new happens.  For F, it goes:
> void f(double* p)
> {
p points to an variable that is an int
> *(int*)p = 3
access the int via an int.
> long *l = new (p) long;
The memory is no longer an int, it has become a long, it cannot be accessed as
an int no longer as that would be undefined.
> *l = 4; 
Access the memory as a long and since the type is a long, this is well defined.
>}

Now after this function returns the variable can only be accessed as a long
(well and via a character type).

Hopefully this explains why this is valid.  Now should we do anything about it,
I don't know because how often does this happen in real life, I don't know.


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread ian at airs dot com


--- Comment #94 from ian at airs dot com  2007-05-18 19:03 ---
I tried the original test case with icc, and it gets the right result.  The
assignment b->p = 0 is discarded.

Unfortunately I'm not sure what this actually tells us.


-- 


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



[Bug target/31990] udivdi3 not found for linux kernel

2007-05-18 Thread pinskia at gcc dot gnu dot org


--- Comment #3 from pinskia at gcc dot gnu dot org  2007-05-18 19:09 ---
> 3. I referred to to the experts in both organizations and I do not believe 
> that
> you are the gcc expert in machine descriptions.

Have you looked into what I have done?  Lets see my first big patch:
2002-12-02  Andrew Pinski  <[EMAIL PROTECTED]>

* config/rs6000/rs6000.md (ffssi): Convert to expander.
(ffsdi): Likewise.
(cntlzw2, cntlzd2): New patterns.
And then more recently:
2007-03-31  Andrew Pinski  <[EMAIL PROTECTED]>

PR target/31364
* config/rs6000/rs6000.md (call): Convert to LR hard reg for
secureplt.
(call_value): Likewise.

2006-11-29  Andrew Pinski  <[EMAIL PROTECTED]>

PR target/29945
* config/spu/spu.md  (extend_compare): New pattern.
(extend_compare): Change to expand and use the above pattern.

Plus this:
spu portAndrew Pinski  
[EMAIL PROTECTED]

I don't see how you can say I am not an expert at this.

Also one more thing did you read http://gcc.gnu.org/bugs.html which explains
exactly what we need for a bug report?

The reason why the bitfield patch has not go in yet, is because I am busy with
other work and it is a minor issue on my plate right now (have you looked into
what I have been doing lately?).

Also 4.3 is no where near being released in the next month or two so calm down.
 We can't all fix bugs in the same time as they are reported.


-- 


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



[Bug target/31989] [4.3 regression]: Gcc miscompiles C/C++ on Linux/x86-64

2007-05-18 Thread hjl at lucon dot org


--- Comment #1 from hjl at lucon dot org  2007-05-18 19:05 ---
A patch is posted at

http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01223.html


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread mark at codesourcery dot com


--- Comment #93 from mark at codesourcery dot com  2007-05-18 19:01 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement
 new does not change the dynamic type as it should

ian at airs dot com wrote:

> void f(double* p) { *(int*)p = 3; long *l = new (p) long; *l = 4; }
> void g() { int i; f((double *)&i); }
> 
> And the specific question is whether we are permitted to interchange the
> assignments to *p and *l.

I do not think we are.

> void f(double* p) { *(int*)p = 3; long *l = (long*)p; *l = 4; }
> 
> Is that valid?  Is the compiler permitted to interchange the assignments to *p
> and *l?  Consider that, as in comment #73, p might actually point to a union 
> of
> int and long.  Does that fact that that union might exist somewhere else make
> this test case valid?  Presumably it does not.  Presumably this is invalid.

Agreed; this case is invalid.

> So if that is not valid, and the placement new case is valid, then what is the
> essential difference between the cases?  The variable is being accessed via 
> two
> different types.  Why is that OK?

Because placement new changes the type of storage, in the same way that
using ordinary ("delete") and then using (ordinary) "new" (but getting
back the same memory pointer) does.  The placement "new" operator is
special.

> You're right that don't have to abandon TBAA to make this work, that we can
> make it work by turning placement new into a memory barrier.  But then you 
> have
> to address comment #42.  That approach will cause a performance regression for
> natural valid code.  The question then becomes whether we are willing to pay
> that performance regression for normal code in order to support this sort of
> weird code.

I am willing to accept that performance regression.  I don't consider
that code "normal"; many C++ performance libraries now provide a way to
produce an uninitialized container, precisely to avoid default
construction.  POOMA could use that technique.

It would of course be better (though, in my opinion, not essential) to
have a more gentle barrier.  If we could tell the compiler to forget the
type of anything that the argument to placement-new might point to, but
not to assume that arbitrary weirdness has occurred, then the compiler
could still eliminate the redundant stores.

In other words, in Comment #42, the problem is that the volatile asm
tells the compiler that not only must the stores/loads not be reordered
across the barrier, but that stores before the barrier must actually
occur because their may be some arbitrary action at the barrier that
depends upon the values written.  If we had a barrier that says just
that the operations may not be reordered across the barrier -- but does
not say that the operations before the barrier are side-effecting --
then we could still eliminate them as redundant.


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread ian at airs dot com


--- Comment #90 from ian at airs dot com  2007-05-18 18:38 ---
I agree that this is valid:

void f(double *p) { *(int*)p = 3; }
void g() {
  int i;
  f((double *)&i);
}

But I don't think that is the question at hand.  The variable is always being
accessed in the same type, which is also the type of its declaration.  The
question at hand is this:

void f(double* p) { *(int*)p = 3; long *l = new (p) long; *l = 4; }
void g() { int i; f((double *)&i); }

And the specific question is whether we are permitted to interchange the
assignments to *p and *l.

Let's consider this:

void f(double* p) { *(int*)p = 3; long *l = (long*)p; *l = 4; }

Is that valid?  Is the compiler permitted to interchange the assignments to *p
and *l?  Consider that, as in comment #73, p might actually point to a union of
int and long.  Does that fact that that union might exist somewhere else make
this test case valid?  Presumably it does not.  Presumably this is invalid.

So if that is not valid, and the placement new case is valid, then what is the
essential difference between the cases?  The variable is being accessed via two
different types.  Why is that OK?

You're right that don't have to abandon TBAA to make this work, that we can
make it work by turning placement new into a memory barrier.  But then you have
to address comment #42.  That approach will cause a performance regression for
natural valid code.  The question then becomes whether we are willing to pay
that performance regression for normal code in order to support this sort of
weird code.

Can anybody see a way through this maze?


-- 


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



[Bug target/31975] [4.3 Regression] segfault in try_split on mips during bootstrap

2007-05-18 Thread tbm at cyrius dot com


--- Comment #3 from tbm at cyrius dot com  2007-05-18 18:45 ---
I started a build on my mipsel box too and it has failed in the same way
as on mips.


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread pcarlini at suse dot de


--- Comment #91 from pcarlini at suse dot de  2007-05-18 18:46 ---
(In reply to comment #90)
> Can anybody see a way through this maze?

Humbly, I'd like to suggest again that we have a look to the assembly produced
by other compilers. I remember that some GCC contributors have access to
compilers such as ICC, XLC++, Sun, etc. and I don't think we should strive at
all costs for perfect optimization, if that means keeping busy our best
contributors for months and risking producing wrong code. We can always return
to the issue later, as an enhancement.


-- 


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



[Bug target/31990] udivdi3 not found for linux kernel

2007-05-18 Thread malitzke at metronets dot com


--- Comment #2 from malitzke at metronets dot com  2007-05-18 18:57 ---
Andy there you go again:

Irrelevancies and make work for others.

You folks at gcc made tons of changes in gcc-4.3 regarding machine definitions
and similar. I have some evidence that some blatant mistakes were silently
corrected without mentioning even ICE's in gcc bootstrap.

I refrained (wisely) from saying anything about compilations using 3Gigs of
memory and then collapsing,. Now an insider has come to acknowledge that
problem,PR31863.

How about your patch to overcome the PR 31541 (bit field addressing) now
untouched for almost one month.

It is no wonder that a lot of packages, when I tell them about easy fixes
regarding gcc-4.x.y, reply "we rather deal deal with gcc-3.x.y or even gcc-2.x( 
even with -fno-strength-reduce).

The gcc group really working hard at overcoming problems noticed by users are
the gfortran people (Yes, I had my run-in with them over the goto thing, but
they have not caused me to file any PR's after that)

Now to some perhaps ppoorly understood by my self technical issues:
1. binutils does a MACRO regarding udevdi3, but its is impossible to build
binutils (even current CVS with gcc-4.3.0)

2. gcc-4.2.1 compiles the impacted kernel fine. To my simple, but seasoned,
mind  the onus when something stops working is on the party that made changes
(namley gcc going from 4.2 to 4.3); not on the one that did not change in this
case
kernel-2.6.20.11.

3. I referred to to the experts in both organizations and I do not believe that
you are the gcc expert in machine descriptions.


-- 


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



[Bug libgcj/31939] Command line arguments are byteswapped before being passed to the program runing in custom locale.

2007-05-18 Thread serg at vostok dot net


--- Comment #4 from serg at vostok dot net  2007-05-18 20:07 ---
For subject 2.

The point is to find where arguments of "int main(int argc, char** argv)" are
converted into java.lang.String to be passed to "static void main(String[]
args)".




Trail:


gcc/java/jvgenmain.c: 

int main(int argc,char **argv) 
constructs a C code to call the main java method with
JvRunMain(classname,argc,argv)


libjava/prims.cc:

void JvRunMain (jclass klass, int argc, const char **argv)
simply calls
_Jv_RunMain (klass, NULL, argc, argv, false)

void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv,
bool is_jar) 
simply calls
_Jv_RunMain (NULL, klass, name, argc, argv, is_jar)

void _Jv_RunMain (JvVMInitArgs *vm_args, jclass klass, const char *name, int
argc, const char **argv, bool is_jar)
calls
JvConvertArgv (argc - 1, argv + 1)

JArray * JvConvertArgv (int argc, const char **argv)
copies each argument into jbyteArray bytes, then calls
new java::lang::String (bytes, 0, len)
to make a String from it with a default encoding.


libjava/java/lang/String.java:

public String(byte[] data, int offset, int count)
calls
init (data, offset, count,System.getProperty("file.encoding", "8859_1"))


libjava/java/lang/natString.cc:
void java::lang::String::init (jbyteArray bytes, jint offset, jint count,
jstring encoding)
uses
gnu::gcj::convert::BytesToUnicode::getDecoder(encoding)
to make a converter
and 
converter->read(array, outpos, avail)
to convert data

libjava/gnu/gcj/convert/BytesToUnicode.java:
class BytesToUnicode extends IOConverter 
public static BytesToUnicode getDecoder (String encoding)
uses eigther 
new Input_iconv(encoding)
or
new BytesToCharsetAdaptor(Charset.forName(encoding))

Looks like I will have to test both Input_iconv and BytesToCharsetAdaptor to
see if any of them is buggy.


-- 


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



[Bug libfortran/31933] Uninitialized memory when writing real(10) as unformatted

2007-05-18 Thread jb at gcc dot gnu dot org


--- Comment #1 from jb at gcc dot gnu dot org  2007-05-18 20:07 ---
Seems to work fine on i686-pc-linux-gnu. I would have guessed it to be
something related to padding, but it's weird that it's not seen in 32-bit mode.


-- 


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



[Bug target/31628] stdcall function is miscompiled

2007-05-18 Thread hjl at gcc dot gnu dot org


--- Comment #8 from hjl at gcc dot gnu dot org  2007-05-18 20:30 ---
Subject: Bug 31628

Author: hjl
Date: Fri May 18 19:29:45 2007
New Revision: 124831

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124831
Log:
2007-05-18  H.J. Lu  <[EMAIL PROTECTED]>

PR target/31628
* gcc.target/i386/pr31628.c: New.

Added:
trunk/gcc/testsuite/gcc.target/i386/pr31628.c
Modified:
trunk/gcc/testsuite/ChangeLog


-- 


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



[Bug libfortran/31297] Use of uninitialized variables in libgfortran's I/O

2007-05-18 Thread jb at gcc dot gnu dot org


--- Comment #7 from jb at gcc dot gnu dot org  2007-05-18 20:52 ---
Seems unf_io_convert_3.f90 is fixed by the patch for PR31915, which adds
padding for CONVERT. The patch was committed as r124741. Closing, please verify
and reopen if I'm wrong.


-- 

jb at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|REOPENED|RESOLVED
 Resolution||FIXED


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread rguenth at gcc dot gnu dot org


--- Comment #95 from rguenth at gcc dot gnu dot org  2007-05-18 20:55 
---
But construction/initialization of uninitalized memory in  happens with
placement new!  So we're back to square one.  What this PR initially was about
is a fixed type memory allocator in C++ which needs to change memory from
allocated type T to free-space-managing-structure S at deallocation time and
the other way around at allocation time.  We absolutely _have_ to handle
this case correct.  And we need to optimize the  routines that use
placement new, because they resemble patterns used in libraries like POOMA
or Boost.


-- 


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



[Bug fortran/18923] segfault after subroutine name confusion

2007-05-18 Thread reichelt at gcc dot gnu dot org


--- Comment #13 from reichelt at gcc dot gnu dot org  2007-05-18 21:10 
---
The testcase still crashes on mainline (and 4.1 and 4.2 branch) if I compile it
without "-g" or with "--param ggc-min-expand=0 --param ggc-min-heapsize=0 -g".

Looks like there are some invalid pointers. Whether the program crashes or not
depends on the garbage they are pointing to.


-- 


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



[Bug target/31990] udivdi3 not found for linux kernel

2007-05-18 Thread malitzke at metronets dot com


--- Comment #4 from malitzke at metronets dot com  2007-05-18 21:11 ---
Andy! 
Taking your your advice to calm down I looked for the built-in.c file you
wanted preprocessed. Well, it does not exist as built-in.o is a composite
object file.

The Kernel peoople being a more helpful and b) having more expertise asked for
time.s and timekeeping.s out out time.c and timekeeping.c. I attached already
both 
to PR8501. and you can take it from there.


-- 

malitzke at metronets dot com changed:

   What|Removed |Added

 CC||pinskia at gcc dot gnu dot
   ||org


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread pcarlini at suse dot de


--- Comment #96 from pcarlini at suse dot de  2007-05-18 21:12 ---
(In reply to comment #95)
> But construction/initialization of uninitalized memory in  happens 
> with
> placement new!

Placement new is used only for non-POD types, to be clear.


-- 


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



[Bug rtl-optimization/26655] [4.0/4.1 Regression] ICE in ix86_secondary_memory_needed, at config/i386/i386.c:16446

2007-05-18 Thread reichelt at gcc dot gnu dot org


--- Comment #22 from reichelt at gcc dot gnu dot org  2007-05-18 21:12 
---
Reopening bug...


-- 

reichelt at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|WONTFIX |


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



[Bug rtl-optimization/26655] [4.0/4.1 Regression] ICE in ix86_secondary_memory_needed, at config/i386/i386.c:16446

2007-05-18 Thread reichelt at gcc dot gnu dot org


--- Comment #23 from reichelt at gcc dot gnu dot org  2007-05-18 21:13 
---
... to close as fixed in GCC 4.2.0 and later.


-- 

reichelt at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|REOPENED|RESOLVED
 Resolution||FIXED
   Target Milestone|4.1.3   |4.2.0


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



[Bug fortran/31067] MINLOC should sometimes be inlined (gas_dyn is sooooo sloooow)

2007-05-18 Thread jb at gcc dot gnu dot org


--- Comment #16 from jb at gcc dot gnu dot org  2007-05-18 21:15 ---
The critical thing with inlining array intrinsics, IMHO is to give the
optimizer more data to work with allowing it to get rid of temp arrays, perform
loop fusion or fission etc. So with a trivial benchmark like #15, you don't see
any difference, except with potentially higher optimization for user code than
libgfortran. For example in gas_dyn/chozdt:

  REAL, DIMENSION (NODES) :: DTEMP
!---
! Profile for gfortran 4.3:
! CPU_CLK_UNHALTED L2_CACHE_MISS
! samp  %runtim  samp %tot
! 59887 22.4783  1484 10.9828   :  DTEMP = DX/(ABS(VEL) + SOUND)
! ifort 9.1 profile
! 40104 16.2034  1198  8.8166   :  DTEMP = DX/(ABS(VEL) + SOUND)

  DTEMP = DX/(ABS(VEL) + SOUND)
  ISET = MINLOC (DTEMP)
  DT = DTEMP(ISET(1))

If MINLOC were inlined, perhaps a sufficiently optimizer could convert this
into the equivalent

REAL :: DTEMPMIN
INTEGER :: i

DTEMPMIN = HUGE(1.0d0)
DO I = 1, NODES
DT = DX(I)/(ABS(VEL(I)+SOUND(I))
IF (DT < DTEMPMIN) THEN
DTEMPMIN = DT
END IF
END DO
DT = DTEMPMIN

i.e. avoid the temporary array entirely. Yes, I guess this is quite a lot to
ask.


-- 

jb at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||jb at gcc dot gnu dot org


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread mark at codesourcery dot com


--- Comment #97 from mark at codesourcery dot com  2007-05-18 21:17 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement
 new does not change the dynamic type as it should

rguenth at gcc dot gnu dot org wrote:

> But construction/initialization of uninitalized memory in  happens 
> with
> placement new!  So we're back to square one.  What this PR initially was about
> is a fixed type memory allocator in C++ which needs to change memory from
> allocated type T to free-space-managing-structure S at deallocation time and
> the other way around at allocation time.  We absolutely _have_ to handle
> this case correct.  And we need to optimize the  routines that use
> placement new, because they resemble patterns used in libraries like POOMA
> or Boost.

First and foremeost, we have to generate correct code.  If that means
the memory barrier solution, for now, then so be it.


-- 


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



[Bug fortran/31067] MINLOC should sometimes be inlined (gas_dyn is sooooo sloooow)

2007-05-18 Thread jb at gcc dot gnu dot org


--- Comment #17 from jb at gcc dot gnu dot org  2007-05-18 21:20 ---
Or even better (duh):

REAL :: DTEMP

DT = HUGE(1.0d0)
DO I = 1, NODES
DTEMP = DX(I)/(ABS(VEL(I)+SOUND(I))
IF (DTEMP < DT) THEN
DT = DTEMP
END IF
END DO


-- 


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



[Bug fortran/25252] ICE on invalid code

2007-05-18 Thread reichelt at gcc dot gnu dot org


--- Comment #9 from reichelt at gcc dot gnu dot org  2007-05-18 21:27 
---
Still crashes for me on mainline and 4.1 and 4.2 branch (i686-pc-linux-gnu).

Looks like there are some invalid pointers. Whether the program crashes or not
depends on the garbage they are pointing to.

This looks actually similar to PR 18923 where we also get crashes or garbled
names in error messages.


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread pcarlini at suse dot de


--- Comment #98 from pcarlini at suse dot de  2007-05-18 21:27 ---
(In reply to comment #97)
> First and foremeost, we have to generate correct code.  If that means
> the memory barrier solution, for now, then so be it.

Yes, but I'm a little worried myself not by  but by containers like
,  and , where we call allocator::contruct, which uses
placement new, to "install" the value in the allocated node. In that case,
unfortunately, per 20.4.1.1/12, we can't optimize it for POD types :( At
minimum we should benchmark a bit...


-- 


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



[Bug rtl-optimization/31987] [4.3 Regression] ICE in remove_insn, at emit-rtl.c:3579 at -O3

2007-05-18 Thread tbm at cyrius dot com


--- Comment #3 from tbm at cyrius dot com  2007-05-18 21:31 ---
Note that this works with 20070422 (and fails with 20070515).


-- 


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



[Bug tree-optimization/31976] [4.3 Regression] ICE in ssa_operand_alloc, at tree-ssa-operands.c:487 with -O3

2007-05-18 Thread tbm at cyrius dot com


--- Comment #2 from tbm at cyrius dot com  2007-05-18 21:32 ---
This appeared between 20070326 (works) and 20070422 (ICE).


-- 


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



[Bug middle-end/31991] New: [4.3 regression] gfortran.dg/st_function.f90 FAILs

2007-05-18 Thread tobi at gcc dot gnu dot org
Since May 1st this testcase fails for all optimization levels above -O0. 
According to gcc-testresults it passed on April 30th.


-- 
   Summary: [4.3 regression] gfortran.dg/st_function.f90 FAILs
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tobi at gcc dot gnu dot org


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



[Bug middle-end/31991] [4.3 regression] gfortran.dg/st_function.f90 FAILs

2007-05-18 Thread tobi at gcc dot gnu dot org


--- Comment #1 from tobi at gcc dot gnu dot org  2007-05-18 21:37 ---
Sorry, I meant to say that it started failing on May 2nd.

E.g. it fails here: http://gcc.gnu.org/ml/gcc-testresults/2007-05/msg00090.html
and passes here: http://gcc.gnu.org/ml/gcc-testresults/2007-05/msg00042.html


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread pcarlini at suse dot de


--- Comment #99 from pcarlini at suse dot de  2007-05-18 21:37 ---
To complete my reasoning: in case we end-up with some sort of very bad
pessimization of placement new, probably we'll have to adjust such containers
to not call allocator::contruct at all when the default allocator is involved
&& a POD type is contructed, similarly to std::vector and std::deque for the
uninitialized functions.


-- 


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



[Bug fortran/18923] segfault after subroutine name confusion

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #14 from dfranke at gcc dot gnu dot org  2007-05-18 21:44 
---
Although I can not observe a crash on my machine with either flag setting,
valgrind shows loads of

==32659== Invalid read of size 4
==32659==at 0x809432F: gfc_resolve_expr (resolve.c:3220)
==32659==  Address 0x4213C2C is 20 bytes inside a block of size 24 free'd
==32659==at 0x402119F: free (vg_replace_malloc.c:233)
==32659==by 0x80A4D42: gfc_undo_symbols (symbol.c:1959)

in varying places, always related to gfc_undo_symbols ...


-- 


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



[Bug middle-end/31991] [4.3 regression] gfortran.dg/st_function.f90 FAILs

2007-05-18 Thread pinskia at gcc dot gnu dot org


--- Comment #2 from pinskia at gcc dot gnu dot org  2007-05-18 21:49 ---


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


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||DUPLICATE


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



[Bug middle-end/31095] [4.3 Regression] ICE in expand_expr_real_1, at expr.c:8786

2007-05-18 Thread pinskia at gcc dot gnu dot org


--- Comment #8 from pinskia at gcc dot gnu dot org  2007-05-18 21:49 ---
*** Bug 31991 has been marked as a duplicate of this bug. ***


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||tobi at gcc dot gnu dot org


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



[Bug target/31990] udivdi3 not found for linux kernel

2007-05-18 Thread pinskia at gcc dot gnu dot org


--- Comment #5 from pinskia at gcc dot gnu dot org  2007-05-18 21:59 ---
(In reply to comment #4)
> Andy! 
Don't call me Andy!  It is childish.

> Taking your your advice to calm down I looked for the built-in.c file you
> wanted preprocessed. Well, it does not exist as built-in.o is a composite
> object file.

And how do I know that from your descirption of the bug?  As you just have:
kernel/built-in.o: In function `getnstimeofday':
(.text+0x1e48d): undefined reference to `__udivdi3'

Which is why I was asking for built-in.i because I thought like a normal code,
it was a normal object file and not an incremental linked one.

> The Kernel peoople being a more helpful and b) having more expertise asked for
> time.s and timekeeping.s out out time.c and timekeeping.c. I attached already
> both 
> to PR8501. and you can take it from there.

So attach time.i and timekeeping.i here which is exactly what we need.  Note
this is really only a missed optimization for GCC wise as if we call __udivdi3
now instead of doing it inlined, the code is just slower, libgcc contains
__udivdi3.  So the kernel needs to add the function but we can also fix GCC so
we don't produce that for a missed optimization


-- 


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



Re: [Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread Gabriel Dos Reis
"ian at airs dot com" <[EMAIL PROTECTED]> writes:

| I'm not sure what to make of comment #84.  We don't determine aliasing by
| alignment or size.  We determine it by type.  We don't currently treat int and
| long as aliasing each other even if they happen to have the same alignment and
| size.

That is GOOD.  :-)

| I believe this is correct according to the C standard but I am less
| familiar with the C++ standard.

It is also correct semantics with respect to C++.

C++ goes further (I don't have C standard handy to check).  The memory
pointed to by p must have the "right" alignment requirements etc.

So if you grab memory into p and it does not have the right alignment,
then the new placement yields undefined behaviour.  That is not a
property we can check statically (until we get the alignment proposal
into C++).

| We could change the aliasing machinery in that
| way for C++ if it seems to be appropriate, but I would prefer to take that to 
a
| different PR.

What I was trying to say was that C++ provides the same "dynamic type"
(non-)aliasing guarantees, and goes even further.  

Did I manage to confuse you again?

-- Gaby


[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread gdr at cs dot tamu dot edu


--- Comment #100 from gdr at cs dot tamu dot edu  2007-05-18 22:04 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement new does not change the
dynamic type as it should

"ian at airs dot com" <[EMAIL PROTECTED]> writes:

| I'm not sure what to make of comment #84.  We don't determine aliasing by
| alignment or size.  We determine it by type.  We don't currently treat int
and
| long as aliasing each other even if they happen to have the same alignment
and
| size.

That is GOOD.  :-)

| I believe this is correct according to the C standard but I am less
| familiar with the C++ standard.

It is also correct semantics with respect to C++.

C++ goes further (I don't have C standard handy to check).  The memory
pointed to by p must have the "right" alignment requirements etc.

So if you grab memory into p and it does not have the right alignment,
then the new placement yields undefined behaviour.  That is not a
property we can check statically (until we get the alignment proposal
into C++).

| We could change the aliasing machinery in that
| way for C++ if it seems to be appropriate, but I would prefer to take that to
a
| different PR.

What I was trying to say was that C++ provides the same "dynamic type"
(non-)aliasing guarantees, and goes even further.  

Did I manage to confuse you again?

-- Gaby


-- 


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



[Bug middle-end/31066] Suboptimal vectorization after inlining

2007-05-18 Thread jb at gcc dot gnu dot org


--- Comment #3 from jb at gcc dot gnu dot org  2007-05-18 22:11 ---
Closing as invalid. gfortran vectorizes the loop in gas_dyn:eos as it should.
The real reason why gfortran sucks at gas_dyn is that ifort uses the reciprocal
approximation instructions and a Newton-Rhapson step instead of division and
square root instructions. I.e. instead of calculating sqrt(a/b) which has both
a divide and a square root (both are pretty slow instructions) it calculates
1/sqrt(b*(1/a)) + the NR step. See PR31723.


-- 

jb at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||jb at gcc dot gnu dot org
 Status|NEW |RESOLVED
 Resolution||INVALID


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



[Bug fortran/18923] segfault after subroutine name confusion

2007-05-18 Thread dfranke at gcc dot gnu dot org


--- Comment #15 from dfranke at gcc dot gnu dot org  2007-05-18 22:11 
---
Eventually, I got a traceable segfault with this shortened testcase:

$> cat pr18923.f90
module FOO
contains
  subroutine FOO
character(len=selected_int_kind(0)) :: C
  end subroutine
end

Program received signal SIGSEGV, Segmentation fault.
gfc_resolve_expr (e=0x887f8a8) at ../../../gcc/gcc/fortran/resolve.c:1747
1747expr->ts = expr->symtree->n.sym->result->ts;
(gdb) bt
#0  gfc_resolve_expr (e=0x887f8a8) at ../../../gcc/gcc/fortran/resolve.c:1747
#1  0x08095bbe in resolve_index_expr (e=0x887f380) at
../../../gcc/gcc/fortran/resolve.c:5482
#2  0x08095c2f in resolve_charlen (cl=0x8845148) at
../../../gcc/gcc/fortran/resolve.c:5508
#3  0x0809746f in resolve_types (ns=0x887f020) at
../../../gcc/gcc/fortran/resolve.c:7401
#4  0x08097557 in resolve_types (ns=0x88451b0) at
../../../gcc/gcc/fortran/resolve.c:7414
#5  0x08099bfc in gfc_resolve (ns=0x88451b0) at
../../../gcc/gcc/fortran/resolve.c:7477
#6  0x0808d6ac in gfc_parse_file () at ../../../gcc/gcc/fortran/parse.c:3248
#7  0x080aeabd in gfc_be_parse_file (set_yydebug=0) at
../../../gcc/gcc/fortran/f95-lang.c:303
#8  0x082ffe68 in toplev_main (argc=2, argv=0xbf93d354) at
../../../gcc/gcc/toplev.c:1051
#9  0x080f262f in main (argc=2, argv=0x1) at ../../../gcc/gcc/main.c:35

Most notable point are the identical expressions in this if/else clause
(resolve.c:1740f):
  /* Make sure that the expression has a typespec that works.  */
  if (expr->ts.type == BT_UNKNOWN)
{
  if (expr->symtree->n.sym->result
&& expr->symtree->n.sym->result->ts.type != BT_UNKNOWN)
expr->ts = expr->symtree->n.sym->result->ts;
  else
expr->ts = expr->symtree->n.sym->result->ts;   /* crashes here */
}

Otherwise, I'm out of my wits here. Hope this helps someone?!


-- 


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



Re: [Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread Gabriel Dos Reis
"ian at airs dot com" <[EMAIL PROTECTED]> writes:

| But I don't think that is the question at hand.  The variable is always being
| accessed in the same type, which is also the type of its declaration.  The
| question at hand is this:
| 
| void f(double* p) { *(int*)p = 3; long *l = new (p) long; *l = 4; }
| void g() { int i; f((double *)&i); }
| 
| And the specific question is whether we are permitted to interchange the
| assignments to *p and *l.

After the placement new, the lifetime of *p is ended, and the lifetime
of *l starts there.  I don't think that leaves room for exchanging the
stores to *p and *l.

| Let's consider this:
| 
| void f(double* p) { *(int*)p = 3; long *l = (long*)p; *l = 4; }
| 
| Is that valid?

If p is pointing to a union object that contain both int and long,
yes, it is valid.  Otherwisem, it is not.

|  Is the compiler permitted to interchange the assignments to *p
| and *l?

It is valid if we have a union object, otherwise, no.

-- Gaby


[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread gdr at cs dot tamu dot edu


--- Comment #101 from gdr at cs dot tamu dot edu  2007-05-18 22:12 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement new does not change the
dynamic type as it should

"ian at airs dot com" <[EMAIL PROTECTED]> writes:

| But I don't think that is the question at hand.  The variable is always being
| accessed in the same type, which is also the type of its declaration.  The
| question at hand is this:
| 
| void f(double* p) { *(int*)p = 3; long *l = new (p) long; *l = 4; }
| void g() { int i; f((double *)&i); }
| 
| And the specific question is whether we are permitted to interchange the
| assignments to *p and *l.

After the placement new, the lifetime of *p is ended, and the lifetime
of *l starts there.  I don't think that leaves room for exchanging the
stores to *p and *l.

| Let's consider this:
| 
| void f(double* p) { *(int*)p = 3; long *l = (long*)p; *l = 4; }
| 
| Is that valid?

If p is pointing to a union object that contain both int and long,
yes, it is valid.  Otherwisem, it is not.

|  Is the compiler permitted to interchange the assignments to *p
| and *l?

It is valid if we have a union object, otherwise, no.

-- Gaby


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread gdr at cs dot tamu dot edu


--- Comment #102 from gdr at cs dot tamu dot edu  2007-05-18 22:15 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement new does not change the
dynamic type as it should

"pcarlini at suse dot de" <[EMAIL PROTECTED]> writes:

| --- Comment #96 from pcarlini at suse dot de  2007-05-18 21:12 ---
| (In reply to comment #95)
| > But construction/initialization of uninitalized memory in  happens
with
| > placement new!
| 
| Placement new is used only for non-POD types, to be clear.

yes, but it is also valid for POD types.

-- Gaby


-- 


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread gdr at cs dot tamu dot edu


--- Comment #103 from gdr at cs dot tamu dot edu  2007-05-18 22:16 ---
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement new does not change the
dynamic type as it should

"pcarlini at suse dot de" <[EMAIL PROTECTED]> writes:

| --- Comment #98 from pcarlini at suse dot de  2007-05-18 21:27 ---
| (In reply to comment #97)
| > First and foremeost, we have to generate correct code.  If that means
| > the memory barrier solution, for now, then so be it.
| 
| Yes, but I'm a little worried myself not by  but by containers like
| ,  and , where we call allocator::contruct, which uses
| placement new, to "install" the value in the allocated node. In that case,
| unfortunately, per 20.4.1.1/12, we can't optimize it for POD types :( At
| minimum we should benchmark a bit...

If the element type is a POD, we should use assignment, not placement new.

-- Gaby


-- 


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



[Bug target/31666] [4.3 regression]: g++.old-deja/g++.other/vbase5.C execution test

2007-05-18 Thread hjl at gcc dot gnu dot org


--- Comment #3 from hjl at gcc dot gnu dot org  2007-05-18 22:35 ---
Subject: Bug 31666

Author: hjl
Date: Fri May 18 21:35:12 2007
New Revision: 124835

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124835
Log:
2007-05-18  H.J. Lu  <[EMAIL PROTECTED]>

PR target/31989
PR target/31681
PR target/31666
* config/i386/i386.c (init_cumulative_args): Set maybe_vaarg to
true if function has no argument.

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


-- 


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



[Bug target/31989] [4.3 regression]: Gcc miscompiles C/C++ on Linux/x86-64

2007-05-18 Thread hjl at gcc dot gnu dot org


--- Comment #2 from hjl at gcc dot gnu dot org  2007-05-18 22:35 ---
Subject: Bug 31989

Author: hjl
Date: Fri May 18 21:35:12 2007
New Revision: 124835

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124835
Log:
2007-05-18  H.J. Lu  <[EMAIL PROTECTED]>

PR target/31989
PR target/31681
PR target/31666
* config/i386/i386.c (init_cumulative_args): Set maybe_vaarg to
true if function has no argument.

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


-- 


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



[Bug libmudflap/31681] [4.3 regression]: Many libmudflap faulures

2007-05-18 Thread hjl at gcc dot gnu dot org


--- Comment #3 from hjl at gcc dot gnu dot org  2007-05-18 22:35 ---
Subject: Bug 31681

Author: hjl
Date: Fri May 18 21:35:12 2007
New Revision: 124835

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124835
Log:
2007-05-18  H.J. Lu  <[EMAIL PROTECTED]>

PR target/31989
PR target/31681
PR target/31666
* config/i386/i386.c (init_cumulative_args): Set maybe_vaarg to
true if function has no argument.

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


-- 


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



[Bug target/31989] [4.3 regression]: Gcc miscompiles C/C++ on Linux/x86-64

2007-05-18 Thread hjl at lucon dot org


--- Comment #3 from hjl at lucon dot org  2007-05-18 22:40 ---
Fixed.


-- 

hjl at lucon dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||FIXED


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



[Bug target/31666] [4.3 regression]: g++.old-deja/g++.other/vbase5.C execution test

2007-05-18 Thread hjl at lucon dot org


--- Comment #4 from hjl at lucon dot org  2007-05-18 22:40 ---
Fixed.


-- 

hjl at lucon dot org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED


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



[Bug libmudflap/31681] [4.3 regression]: Many libmudflap faulures

2007-05-18 Thread hjl at lucon dot org


--- Comment #4 from hjl at lucon dot org  2007-05-18 22:41 ---
Fixed.


-- 

hjl at lucon dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||FIXED


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



[Bug libstdc++/29286] [4.0/4.1/4.2/4.3 Regression] placement new does not change the dynamic type as it should

2007-05-18 Thread pcarlini at suse dot de


--- Comment #104 from pcarlini at suse dot de  2007-05-18 22:44 ---
(In reply to comment #103)
> If the element type is a POD, we should use assignment, not placement new.

Agreed, in principle. But before adding a load of templates and dispatching,
let's wait a bit for the outcome of this issue and benchmark carefully: the
performance difference may be minor, given that we are dynamically allocating
memory for the new node.


-- 


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



[Bug c++/31992] New: [4.1/4.2/4.3 regression] ICE initializing static variable of template class

2007-05-18 Thread reichelt at gcc dot gnu dot org
The following valid code snippet triggers a segfault since GCC 4.1.2:

=
template struct A
{
static const int i;
};

template const int A::i( A::i );
=

bug.cc:6: internal compiler error: Segmentation fault
Please submit a full bug report, [etc.]


-- 
   Summary: [4.1/4.2/4.3 regression] ICE initializing static
variable of template class
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Keywords: ice-on-valid-code, monitored
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: reichelt at gcc dot gnu dot org


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



[Bug target/31985] Wide operations (i.e. adddi3) are split too late

2007-05-18 Thread ubizjak at gmail dot com


--- Comment #1 from ubizjak at gmail dot com  2007-05-18 22:52 ---
Similar problems are shown for DImode store in following test:

--cut here--
typedef unsigned SI __attribute__ ((mode (SI)));
typedef unsigned DI __attribute__ ((mode (DI)));

#define umul_ppmm_c(w1, w0, u, v)   \
  { \
DI __c = (DI) u * v;\
\
(w0) = (SI) (__c & 0x); \
(w1) = (SI) (__c >> 32);\
  }

#define umul_ppmm_asm(w1, w0, u, v) \
  __asm__ ("mull %3"\
   : "=a" ((SI) (w0)),  \
   "=d" ((SI) (w1)) \
   : "%0" ((SI) (u)),   \
   "rm" ((SI) (v)))

void test_c (SI a, SI b)
{
 volatile SI x, y;

 umul_ppmm_c (x, y, a, b);
}

void test_asm (SI a, SI b)
{
 volatile SI x, y;

 umul_ppmm_asm (x, y, a, b);
}
--cut here--

gcc -O2 -fomit-frame-pointer

test_c:
subl$16, %esp
movl24(%esp), %eax
mull20(%esp)
movl%eax, 8(%esp)
movl%edx, %eax
xorl%edx, %edx
movl%eax, 12(%esp)
addl$16, %esp
ret

test_asm:
subl$16, %esp
movl20(%esp), %eax
#APP
mull 24(%esp)
#NO_APP
movl%eax, 8(%esp)
movl%edx, 12(%esp)
addl$16, %esp
ret


-- 


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



[Bug c++/31992] [4.1/4.2/4.3 regression] ICE initializing static variable of template class

2007-05-18 Thread reichelt at gcc dot gnu dot org


-- 

reichelt at gcc dot gnu dot org changed:

   What|Removed |Added

   Target Milestone|--- |4.1.3


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



[Bug fortran/18923] segfault after subroutine name confusion

2007-05-18 Thread jvdelisle at gcc dot gnu dot org


--- Comment #16 from jvdelisle at gcc dot gnu dot org  2007-05-18 22:53 
---
There is no guarantee that you are hitting the same problem, but if so, this is
very helpful (sometimes :) )


-- 


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



[Bug target/31990] udivdi3 not found for linux kernel

2007-05-18 Thread malitzke at metronets dot com


--- Comment #6 from malitzke at metronets dot com  2007-05-18 22:58 ---
Created an attachment (id=13580)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13580&action=view)
time.i form ./kernel/time.c

first requested attachment


-- 


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



[Bug c++/31993] New: [4.3 regression] ICE with template class in variadic template class

2007-05-18 Thread reichelt at gcc dot gnu dot org
The following valid code snippet with variadic templates triggers an ICE
on mainline:

=
template struct A;

template class... T> struct A...>
{
  template struct B {};
  B<0> b;
};
=

bug.cc:6: internal compiler error: tree check: expected tree that contains
'decl non-common' structure, have 'template_template_parm' in
convert_template_argument, at cp/pt.c:4665
Please submit a full bug report, [etc.]


-- 
   Summary: [4.3 regression] ICE with template class in variadic
template class
   Product: gcc
   Version: 4.3.0
Status: UNCONFIRMED
  Keywords: ice-on-valid-code, monitored
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: reichelt at gcc dot gnu dot org


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



[Bug c++/31993] [4.3 regression] ICE with template class in variadic template class

2007-05-18 Thread reichelt at gcc dot gnu dot org


-- 

reichelt at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||dgregor at gcc dot gnu dot
   ||org
   Target Milestone|--- |4.3.0


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



  1   2   >