[Bug c++/44499] New: No default constructor available

2010-06-11 Thread piotr dot wyderski at gmail dot com
The following code:

class C {

};

class D : public C {

};

const D g_d;


fails to compile on trunk (rev. 160489) with the following message:

$ g++ test.cpp
test.cpp:11:9: error: uninitialized const 'g_d' [-fpermissive]
test.cpp:6:11: note: 'const class D' has no user-provided default constructor


-- 
   Summary: No default constructor available
   Product: gcc
   Version: 4.6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
 GCC build triplet: i686-pc-cygwin
  GCC host triplet: i686-pc-cygwin
GCC target triplet: i686-pc-cygwin


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



[Bug c++/44499] No default constructor available

2010-06-11 Thread piotr dot wyderski at gmail dot com


--- Comment #4 from piotr dot wyderski at gmail dot com  2010-06-11 11:01 
---
(In reply to comment #2)
 A question: apart from quoting chapter and verse from the standard (8.5
 [dcl.init], para 9 in C++03, para 6 in C++0x,) how could the diagnostic have
 been any clearer?
 
 It indicates you can use -fpermissive to relax the warning, and it includes a
 note telling you the type has no user-provided default constructor, which is
 true.  Why would you assume this is a bug, when a developer has gone to the
 trouble of writing the note?

All the compilers I am aware of accept the aforementioned construction,
so I blindly assumed that 4.6 is wrong in issuing a warning. The note's
content was considered irrelevant, since no error was expected. But if
the behaviour is OK, then it is OK no matter what a surprise it turns out to
be.


-- 


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



[Bug c/43599] New: Several missing optimizations

2010-03-31 Thread piotr dot wyderski at gmail dot com
I was wondering whether GCC can optimize
sin(x) and cos(x) of the same angle in order
to use the combined fsincos x86 instruction.
The testcase is:

8

#include math.h

double fn1(double x) {

return sin(x) * cos(x);
}

double fn2(double x) {

return __builtin_sin(x) * __builtin_cos(x);
}

8

I compile it with:

gcc -O3 -fomit-frame-pointer -S testcase.cpp

The result turned out to be rather surprising:

8

.file   testcase.cpp
.text
.p2align 4,,15
.globl __Z3fn1d
.def__Z3fn1d;   .scl2;  .type   32; .endef
__Z3fn1d:
subl$60, %esp
fldl64(%esp)
fstl(%esp)
fstpl   16(%esp)
call_sin
fstpl   40(%esp)
fldl16(%esp)
fstpl   (%esp)
call_cos
fmull   40(%esp)
addl$60, %esp
ret
.p2align 4,,15
.globl __Z3fn2d
.def__Z3fn2d;   .scl2;  .type   32; .endef
__Z3fn2d:
subl$60, %esp
fldl64(%esp)
fstl(%esp)
fstpl   16(%esp)
call_sin
fstpl   40(%esp)
fldl16(%esp)
fstpl   (%esp)
call_cos
fmull   40(%esp)
addl$60, %esp
ret
.def_sin;   .scl2;  .type   32; .endef
.def_cos;   .scl2;  .type   32; .endef
.def_sin;   .scl2;  .type   32; .endef
.def_cos;   .scl2;  .type   32; .endef 

8

As you can see:

a) fsin and fcos are not combined into fsincos, because
b) there are no fsin and fcos -- library calls have been emitted;
c) the stack top manipulation (subl / addl $60, %esp) has no purpose.


-- 
   Summary: Several missing optimizations
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
 GCC build triplet: i686-pc-cygwin
  GCC host triplet: i686-pc-cygwin
GCC target triplet: i686-pc-cygwin


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



[Bug c/43599] Several missing optimizations

2010-03-31 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2010-03-31 11:00 
---
With -ffast-math the code becomes

.file   testcase.cpp
.text
.p2align 4,,15
.globl __Z3fn1d
.def__Z3fn1d;   .scl2;  .type   32; .endef
__Z3fn1d:
fldl4(%esp)
fsincos
fmulp   %st, %st(1)
ret
.p2align 4,,15
.globl __Z3fn2d
.def__Z3fn2d;   .scl2;  .type   32; .endef
__Z3fn2d:
fldl4(%esp)
fsincos
fmulp   %st, %st(1)
ret 

which is exactly the expected output, but:

-ffast-math: This option should never be turned
on by any -O option since it can result in
incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications
for math functions. 

So, what IEEE rules does the fsin/fcos/fsincos
emission/fussion break? The only problem I see
is excessive accuracy, but it can be removed using
the fld/fst trick used by -ffloat-store (and THAT
can be removed by -ffast-math), without the need
to declare the entire program as IEEE754 non-conformant.


-- 


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



[Bug c++/43508] New: ICE when compiling SSE code in non-debug mode

2010-03-24 Thread piotr dot wyderski at gmail dot com
The compiler ICEs with the following message:

(vec_select:SI (reg:V4SI 21 xmm0 [84])
(parallel [
(const_int 1 [0x1])
]))/home/piotr.wyderski/rt_rel/texture.cpp: In member function 'virtual
float __vector[4] rt::texture_2d::map(float __vector[4]) const':
/home/piotr.wyderski/rt_rel/texture.cpp:82:1: internal compiler error: in
mem_lo
c_descriptor, at dwarf2out.c:13589
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.
make[1]: *** [CMakeFiles/a.dir/texture.cpp.o] Error 1

I didn't manage to create a reasonably-sized testcase.


-- 
   Summary: ICE when compiling SSE code in non-debug mode
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
 GCC build triplet: i686-pc-cygwin
  GCC host triplet: i686-pc-cygwin
GCC target triplet: i686-pc-cygwin


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



[Bug c++/43508] ICE when compiling SSE code in non-debug mode

2010-03-24 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2010-03-24 13:24 
---
Compiled with:

$ /opt/gcc-trunk/bin/g++ -std=gnu++0x -Wno-pmf-conversions -fno-deduce-init-lis
t -O3 -DNDEBUG   -Wall -Werror -Wno-unused -msse -msse2 -march=native -mfpmath=
sse -fomit-frame-pointer -c -ggdb texture.cpp.i

However, it is very hard to replicate the error. It is fully deterministic,
but occurs on [gcc version 4.5.0 20100322 (experimental) (GCC)] -- a month
older compiler does not fail. It also doesn't happen without -ggdb. It requires
an SSE4.1-capable processor (mine is Core i7), but occurs only when
-march=native -- if I specify no march and explicitly enable -msse4, it also
doesn't fail. I don't know what exact command line without -march should look
like to cause the bug.


-- 


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



[Bug c++/43508] ICE when compiling SSE code in non-debug mode

2010-03-24 Thread piotr dot wyderski at gmail dot com


--- Comment #3 from piotr dot wyderski at gmail dot com  2010-03-24 13:27 
---
Created an attachment (id=20183)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20183action=view)
Testcase to replicate the bug


-- 


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



[Bug debug/43508] ICE when compiling SSE code with -ggdb

2010-03-24 Thread piotr dot wyderski at gmail dot com


--- Comment #5 from piotr dot wyderski at gmail dot com  2010-03-24 15:33 
---

 wonder about the subject, the ICE clearly happens in debug mode, not
 non-debug mode...

The command line specified does not contain -DNDEBUG,
as the preprocessed file was created in non-debug mode,
so all the #ifndef NDEBUG sections have already been
removed by the preprocessor. If the entire build (i.e.
via CMake) is done in debug mode, the compiler doesn't ICE.


-- 


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



[Bug c++/43375] New: ICE during compiling SSE code

2010-03-15 Thread piotr dot wyderski at gmail dot com
 compiling SSE code
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
 GCC build triplet: i686-pc-cygwin
  GCC host triplet: i686-pc-cygwin
GCC target triplet: i686-pc-cygwin


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



[Bug c++/43375] [4.5 Regression] ICE during compiling SSE code

2010-03-15 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2010-03-15 12:20 
---
(In reply to comment #1)

It's a fairly recent regression: the snapshot 20100218 compiled it without
problems.


-- 


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



[Bug c++/42880] New: trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com
gcc version 4.5.0 20100126 (rev. 156253) is
not able to compile the following program:

#include boost/mpl/size.hpp

version 20100115 didn't complain. I've checked
it on boost 1.37 and 1.39. For those who don't
have boost installed, there is a preprocessed
file from boost 1.39.


-- 
   Summary: trunk does not compile boost MPL
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
 GCC build triplet: i686-pc-cygwin
  GCC host triplet: i686-pc-cygwin
GCC target triplet: i686-pc-cygwin


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #1 from piotr dot wyderski at gmail dot com  2010-01-27 10:43 
---
Created an attachment (id=19724)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19724action=view)
preprocessed boost 1.39 mpl/size.hpp


-- 


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2010-01-27 10:44 
---
Created an attachment (id=19725)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19725action=view)
compiler error output


-- 


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #4 from piotr dot wyderski at gmail dot com  2010-01-27 11:06 
---
(In reply to comment #3)

The new compiler was built with gcc-4.5.0 20100115. Both were configured as
follows:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/gcc-trunk/libexec/gcc/i686-pc-cygwin/4.5.0/lto-wrapper.
exe
Target: i686-pc-cygwin
Configured with: ../configure --prefix=/opt/gcc-trunk -v --enable-bootstrap
--en
able-version-specific-runtime-libs --enable-shared --enable-shared-libgcc
--with
-gnu-ld --with-gnu-as --enable-dwarf2-exceptions --disable-symvers
--disable-nls
 --with-arch=core2 --with-tune=generic --enable-threads=posix
--enable-languages
=c,c++
Thread model: posix
gcc version 4.5.0 20100126 (experimental) (GCC)


-- 


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #9 from piotr dot wyderski at gmail dot com  2010-01-27 12:27 
---
(In reply to comment #7)
 Thanks Dave. Thus, essentially, is submitter wrong that the problem is new?

My code compiled flawlessly on 4.5.0-20100115,
otherwise I would have reported the issue earlier...

20100126 has been built in a clean directory, so
no interferences with previous builds are possible.

Paolo: yes, -std=gnu++0x -- it's the reason I use trunk.


-- 


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




[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #16 from piotr dot wyderski at gmail dot com  2010-01-27 12:39 
---

 Can you attach the preprocessed source you get from that build of the compiler

Unfortunately not, because I assumed that the new compiler
will work, so make install overwritten the binaries of 0115.
Anyway, I think I have an earlier build somewhere (20100107)
which also works, so I will provide you a preprocessed source
from that version.


-- 


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #19 from piotr dot wyderski at gmail dot com  2010-01-27 12:47 
---

 Then say that explicitly, *always*. Actually,
 the complete command line is part of the requirements for PRs.

Sorry, I misunderstood you. I use -std=gnu++0x in my
actual program, which today became uncompilable. For
the PR it was:

g++ -std=gnu++0x br.cpp -I/usr/include/boost_1_39_0/

Without extensions enabled, merely:

g++ br.cpp -I/usr/include/boost_1_39_0/

the compiler also emits an error list, however much
shorter (it's probably what you see on Linux): specialization
after instantiation.


-- 


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #23 from piotr dot wyderski at gmail dot com  2010-01-27 13:04 
---

cmdline:

  g++ [-std=gnu++0x] br.cpp -I/usr/include/boost_1_39_0/

On gcc version 4.5.0 20090604 (experimental) (GCC):
compiled OK

On gcc version 4.5.0 20100107 (experimental) (GCC)
compiled OK

On 20100115 it was also OK, but I can't prove it.

On 20100126: a lot of errors, the amount depends
on the presence of -std=gnu++0x

I have no intermediate builds between 15 and 26,
so can't reduce the range any more.


-- 


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #24 from piotr dot wyderski at gmail dot com  2010-01-27 13:08 
---
Created an attachment (id=19727)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19727action=view)
preprocessed boost 1.39 mpl/size.hpp (20100107)


-- 


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



[Bug c++/42880] trunk does not compile boost MPL

2010-01-27 Thread piotr dot wyderski at gmail dot com


--- Comment #26 from piotr dot wyderski at gmail dot com  2010-01-27 13:25 
---

 Apart from include file paths in # lines, the two files are identical.

I double-checked the compilers used to generate
them -- the attachments are correct. So the issue
must be inside the compiler itself, not in its
stdc++ includes.


-- 


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



[Bug c++/42877] New: ICE when checking the type of a lambda

2010-01-26 Thread piotr dot wyderski at gmail dot com
gcc-trunk (20100115)

template typename T struct toff;

template typename TR, typename... TA struct toffTR (*)(TA...) {

typedef TR type;
};

template typename TR, typename TC, typename... TA struct toffTR
(TC::*)(TA...) const {

typedef TR type;
};

template typename TR, typename TC, typename... TA struct toffTR
(TC::*)(TA...) {

typedef TR type;
};


template typename T void dem(T op) {

typedef typename toffdecltype(T::operator ())::type r_type;
}


int main(int argc, char *argv[]) {

dem([](int x){ return x; });
return 0;
}


$ g++ -std=gnu++0x br.cpp
br.cpp: In function 'void dem(T) [with T = main(int, char**)::lambda(int)]':
br.cpp:29:31:   instantiated from here
br.cpp:23:64: internal compiler error: canonical types differ for identical
type
s int(int) and int(int)
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.


-- 
   Summary: ICE when checking the type of a lambda
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
 GCC build triplet: i686-pc-cygwin
  GCC host triplet: i686-pc-cygwin
GCC target triplet: i686-pc-cygwin


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



[Bug c++/42877] ICE when checking the type of a lambda

2010-01-26 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2010-01-26 17:35 
---
(In reply to comment #1)
 probably a dup of Bug 42082 or Bug 42737

Yes, it could be the case.

BTW, Jason, is the presented way of
discovering of the lambda function's
return type correct in C++0x?


-- 


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



[Bug c++/42877] [C++0x] ICE when checking the type of a lambda

2010-01-26 Thread piotr dot wyderski at gmail dot com


--- Comment #6 from piotr dot wyderski at gmail dot com  2010-01-26 20:09 
---
(In reply to comment #4)
 I assume the original version is also intended to work with non-empty 
 captures,
 when operator() is non-static

Yes, that's the purpose of the first two specializations.
But that part works correctly, only the function ptr variant ICEs.


-- 


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



[Bug tree-optimization/42778] New: Superfluous stack management code is generated

2010-01-17 Thread piotr dot wyderski at gmail dot com
#include x86intrin.h

int test1(__m128i v) {

   return _mm_cvtsi128_si32(v);
}

compiled with

g++ -std=gnu++0x -O2 -m32 -march=native -msse -msse2 -msse3 -Wall
-Werror -Wno-unused -Wno-strict-aliasing -march=native
-fomit-frame-pointer -Wno-pmf-conversions -g main.cpp

emits:

004012e0 __Z5test1U8__vectorx:
 4012e0:   83 ec 0csub$0xc,%esp
 4012e3:   66 0f 7e c0 movd   %xmm0,%eax
 4012e7:   83 c4 0cadd$0xc,%esp
 4012ea:   c3  ret

which shows that the stack pointer is being updated
without any purpose.


-- 
   Summary: Superfluous stack management code is generated
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: GCC-trunk(20100107)/Cygwin/WinXP32


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



[Bug tree-optimization/42779] New: [C++0x] Variadic templates + lambdas = extremely poor code quality

2010-01-17 Thread piotr dot wyderski at gmail dot com
The attached code compiled with

g++ -std=gnu++0x -O2 -m32 -march=native -msse -msse2 -msse3 -Wall
-Werror -Wno-unused -Wno-strict-aliasing -march=native
-fomit-frame-pointer -Wno-pmf-conversions -g main.cpp

emits code which is, to put it mildly,
far from optimal. For instance, the code of

bit_vector::op_not_or:

combine([](__m128i x, __m128i y) { return _mm_xor_si128(_mm_or_si128(x, y),
g_Mask[128]); }, true, v1, v2);

emits:

00401800 __ZN10bit_vector9op_not_orERKS_S1_:
  401800:   55  push   %ebp
  401801:   57  push   %edi
  401802:   56  push   %esi
  401803:   53  push   %ebx
  401804:   83 ec 1csub$0x1c,%esp
  401807:   8b 74 24 30 mov0x30(%esp),%esi
  40180b:   8b 7c 24 34 mov0x34(%esp),%edi
  40180f:   8b 6c 24 38 mov0x38(%esp),%ebp
  401813:   8b 5f 04mov0x4(%edi),%ebx
  401816:   39 ee   cmp%ebp,%esi
  401818:   74 46   je 401860
__ZN10bit_vector9op_not_orERKS_S1_+0x60
  40181a:   83 c3 7fadd$0x7f,%ebx
  40181d:   c1 eb 07shr$0x7,%ebx
  401820:   85 db   test   %ebx,%ebx
  401822:   74 30   je 401854
__ZN10bit_vector9op_not_orERKS_S1_+0x54
  401824:   31 c0   xor%eax,%eax
  401826:   66 0f 76 c9 pcmpeqd %xmm1,%xmm1
  40182a:   8d b6 00 00 00 00   lea0x0(%esi),%esi
  401830:   8b 0f   mov(%edi),%ecx
  401832:   89 c2   mov%eax,%edx
  401834:   40  inc%eax
  401835:   c1 e2 04shl$0x4,%edx
  401838:   39 c3   cmp%eax,%ebx
  40183a:   66 0f 6f 04 11  movdqa (%ecx,%edx,1),%xmm0
  40183f:   8b 4d 00mov0x0(%ebp),%ecx
  401842:   66 0f eb 04 11  por(%ecx,%edx,1),%xmm0
  401847:   8b 0e   mov(%esi),%ecx
  401849:   66 0f ef c1 pxor   %xmm1,%xmm0
  40184d:   66 0f 7f 04 11  movdqa %xmm0,(%ecx,%edx,1)
  401852:   75 dc   jne401830
__ZN10bit_vector9op_not_orERKS_S1_+0x30
  401854:   83 c4 1cadd$0x1c,%esp
  401857:   5b  pop%ebx
  401858:   5e  pop%esi
  401859:   5f  pop%edi
  40185a:   5d  pop%ebp
  40185b:   c3  ret


-- 
   Summary: [C++0x] Variadic templates + lambdas = extremely poor
code quality
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: GCC-trunk(20100107)/Cygwin/WinXP32


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



[Bug tree-optimization/42779] [C++0x] Variadic templates + lambdas = extremely poor code quality

2010-01-17 Thread piotr dot wyderski at gmail dot com


--- Comment #1 from piotr dot wyderski at gmail dot com  2010-01-17 20:15 
---
Created an attachment (id=19639)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19639action=view)
Source code


-- 


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



[Bug c++/42780] New: Incorrect warning message

2010-01-17 Thread piotr dot wyderski at gmail dot com
Uncomment the code of bit_vector::op_not (Attachment #19639)
and compile with 

g++ -std=gnu++0x -O2 -m32 -march=native -msse -msse2 -msse3 -Wall
-Werror -Wno-unused -Wno-strict-aliasing -march=native
-fomit-frame-pointer -Wno-pmf-conversions -g main.cpp

an error message will appear:

main.cpp: In function 'long long int __vector__ dump(long long int
__vector__)':
main.cpp:653:1: error: control reaches end of non-void function

but the function dump() is not non-void:

void dump(__m128i v) { ...


-- 
   Summary: Incorrect warning message
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: GCC-trunk(20100107)/Cygwin/WinXP32


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



[Bug tree-optimization/42779] [C++0x] Variadic templates + lambdas = extremely poor code quality

2010-01-17 Thread piotr dot wyderski at gmail dot com


--- Comment #3 from piotr dot wyderski at gmail dot com  2010-01-17 20:46 
---
This is a generic code, as it covers two bug reports.
In fact, it will probably be used as a base for additional
two missing optimization reports. So I thought it would be
good to provide the code of the entire sandbox.

To be more specific: the vectors passed to
combine() are constant. The compiler should
not re-evaluate the base addresses of the
m_Data arrays every iteration, as above:

mov(%edi),%ecx
...
mov0x0(%ebp),%ecx
...
mov(%esi),%ecx

A single base address fetch phase and
index-based addressing with scaled
induction variable (by a factor of 16)
will be more optimal, e.g.:

   // esi = src1
   // edi = src2
   // ebx = dst
   // edx = induction variable

L0:cmpl   %edx, max_index
   je L1:
   movdqa (%esi,%edx,1),%xmm0
   por(%edi,%edx,1),%xmm0
   pxor   %xmm1, %xmm0
   movdqa %xmm0, (%ebx, %edx, 1)
   add$16, %edx
   jmpL0

L1:

as I would have written it by hand in assembler.
An aggresively unrolled version (say, four-way)
with prefetching for longer blocks will also be welcome.


-- 


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



[Bug target/42779] [C++0x] Variadic templates + lambdas = extremely poor code quality, __m128i and aliasing sucks

2010-01-17 Thread piotr dot wyderski at gmail dot com


--- Comment #8 from piotr dot wyderski at gmail dot com  2010-01-17 21:29 
---
It would be great to use my own vector data
types, as in simple cases it allows GCC to
automaticly vectorize them in a portable way,
but in more complex cases it would mean a lot
of explicit type casts = even more unreadable
code, which even now is hard to follow.


-- 


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



[Bug c++/42702] New: Unimplemented functionality

2010-01-12 Thread piotr dot wyderski at gmail dot com
g++ -std=gnu++0x -c -O2

prints:

minimal.cpp:8:44: sorry, unimplemented: cannot expand '_Tail ...' into a
fixed-l
ength argument list

reduced testcase:

  templatetypename _Tp
class tuple
{
{
 }
  templatestd::size_t __i, typename _Head, typename... _Tail
struct tuple_element__i, tuple_Head, _Tail... 
: tuple_element__i - 1, tuple_Tail...  { };


-- 
   Summary: Unimplemented functionality
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC-trunk


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



[Bug c++/42702] Unimplemented functionality

2010-01-12 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2010-01-12 13:05 
---
Subject: Re:  Unimplemented functionality

paolo dot carlini wrote:

at oracle dot com gcc-bugzi...@gcc.gnu.org:

 If it's unimplemented, it's unimplemented, the issue
 is obviously known.

Even in this case?

runtime/base/stack_trace.h:130:30: sorry,
 unimplemented: inlining failed in call to
'base::stack_trace::stack_trace(size_t)': function not inlinable

Best regards
Piotr Wyderski


-- 


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



[Bug c++/42459] New: Escape sequence parsing is broken

2009-12-22 Thread piotr dot wyderski at gmail dot com
To my best knowledge, the \xNN escape sequence
should expect exactly two hexadecimal digits, but
the following program shows that GCC is too greedy:


#include stdio.h

int main() {

static const char t[] = \x05Data;

for(int i = 0; i != sizeof(t); ++i) {

fprintf(stderr, %02x , (unsigned) t[i]);
}

fprintf(stderr, \n);
}

produces:

ffda 74 61 00

instead of:

05 44 61 74 61 00

i.e. the Da from Data is also used as a part of the hexadecimal escape
sequence.


-- 
   Summary: Escape sequence parsing is broken
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC-4.5-20090601


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



[Bug c++/42447] New: ICE during processing complex templates

2009-12-21 Thread piotr dot wyderski at gmail dot com
Compile the attached sources as follows:

 g++ -std=gnu++0x -c -Wno-pmf-conversions file_reader.cpp

An Internal Compiler Error report will appear:

file_reader.cpp: In instantiation of
'std::unique_ptrbase::dynamic_dispatchvoid
(io::file_reader::*)(io::request)::entry [], base::release_deleter':
file_reader.cpp:35664:39:   instantiated from 'std::unique_ptr_Tp [],
_Tp_Deleter::unique_ptr() [with _Tp = base::dynamic_dispatchvoid
(io::file_reader::*)(io::request)::entry, _Tp_Deleter =
base::release_deleter]'
file_reader.cpp:86579:76:   instantiated from 'base::dynamic_dispatchTR
(TC::*)(TD, TA ...)::dynamic_dispatch(TR (TC::*)(TD, TA ...), size_t) [with
TC = io::file_reader, TR = void, TD = io::request, TA = {}, TR (TC::*)(TD, TA
...) = void (io::file_reader::*)(io::request), size_t = unsigned int]'
file_reader.cpp:88954:55:   instantiated from here
file_reader.cpp:35653:5: internal compiler error: in finish_member_declaration,
at cp/semantics.c:2445
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.


-- 
   Summary: ICE during processing complex templates
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: major
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC-trunk


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



[Bug c++/42447] ICE during processing complex templates

2009-12-21 Thread piotr dot wyderski at gmail dot com


--- Comment #1 from piotr dot wyderski at gmail dot com  2009-12-21 12:41 
---
Created an attachment (id=19357)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19357action=view)
The faulting code 


-- 


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



[Bug c++/42447] [C++0x] ICE during processing complex templates

2009-12-21 Thread piotr dot wyderski at gmail dot com


--- Comment #3 from piotr dot wyderski at gmail dot com  2009-12-21 13:47 
---
(In reply to comment #2)
 Any chance you can provide a smaller reproducer? Thanks.
 

No, every simpler testcase based on the attached code I tried
to create compiles successfully. Perhaps here is the problem?


-- 


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



[Bug c++/42447] [C++0x] ICE during processing complex templates

2009-12-21 Thread piotr dot wyderski at gmail dot com


--- Comment #5 from piotr dot wyderski at gmail dot com  2009-12-21 14:27 
---
(In reply to comment #4)
 Certainly *is* a problem if we hope to debug the issue decently fast...
 

I meant the cause of the problem is in its size, i.e.
there must be a critical mass of templates to trigger
the issue. There probably is no problem in std::unique_ptr
on its own; to me it seems to be a random victim of
something strange happening under the hood. As I said,
I am not able to shrink it down in a reasonable way.
For example, this simplified testcase compiles flawlessly:


#include memory

struct release_deleter {

template class T void operator()(T* p) {

static_assert(std::is_podT::value ||
  std::is_sameT, void::value,
  T must be a POD type or void);

}
};


template typename T class dynamic_dispatch;


template 

typename TC,
typename TR,
typename TD,
typename... TA

 class dynamic_dispatchTR (TC::*)(TD, TA...) {

class entry {};

typedef std::unique_ptrentry[], release_deleter entry_ptr;

public:

template typename UC, typename UD void attach_handler(TR
(UC::*m)(UD, TA...));
};



template 

typename TC,
typename TR,
typename TD,
typename... TA

 template 

typename UC,
typename UD

 void dynamic_dispatchTR (TC::*)(TD, TA...)::attach_handler(TR
(UC::*m)(UD, TA...)) {

};


class C {

public:

void M(int);
};


dynamic_dispatchvoid (C::*)(int) dd;

int main() {

dd.attach_handler(C::M);
}

But the problem is definitely related to template
processing. If you comment out the folowing line
(at the very bottom of the attached file, in the
constructor):

attach_handler(static_castvoid (file_reader::*)(read_request0)
(file_reader::execute_command)); 

it compiles OK.


-- 


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



[Bug c++/42447] [C++0x] ICE during processing complex templates

2009-12-21 Thread piotr dot wyderski at gmail dot com


--- Comment #8 from piotr dot wyderski at gmail dot com  2009-12-21 16:38 
---
(In reply to comment #6)

A marvelous tool! I'm reducing it too,
staring at the proces with half-open mouth...


-- 

piotr dot wyderski at gmail dot com changed:

   What|Removed |Added

   Severity|normal  |major


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



[Bug c++/42447] [C++0x] ICE during processing complex templates

2009-12-21 Thread piotr dot wyderski at gmail dot com


--- Comment #10 from piotr dot wyderski at gmail dot com  2009-12-21 17:23 
---
(In reply to comment #9)
 Thus, are you sure the code is valid, before anything else?

It compiles and works on gcc version 4.5.0 20090604.

The current compiler is 

Configured with: ../configure --prefix=/opt/gcc-trunk -v --enable-bootstrap
--en
able-version-specific-runtime-libs --enable-shared --enable-shared-libgcc
--with
-gnu-ld --with-gnu-as --enable-dwarf2-exceptions --disable-symvers
--disable-nls
 --with-arch=core2 --with-tune=generic --enable-threads=posix
--enable-languages
=c,c++
Thread model: posix
gcc version 4.5.0 20091217 (experimental) (GCC)

And here's the reduced testcase:

--8--

namespace std
  templatetypename _Tp
struct __add_ref_Tp
{ typedef _Tp type; };
class tuple
{
};
  templatetypename _T1, typename _T2
{
  {
  }
};
  templatestd::size_t __i, typename... _Elements
inline typename __add_ref
::type
get(tuple_Elements... __t)
{
}
}
struct _Fnv_hash4
{
  {
  }
};
namespace std {
  template class _OutputIterator, class _Tp
{
  {
{
}
{
 {
  }
}
  };
}
  template typename _Tp, typename _Tp_Deleter = default_delete_Tp 
class unique_ptr
{
  reset(pointer __p = pointer())
  {
   {
   }
  }
  {
  }
  };
  templatetypename _Tp, typename _Tp_Deleter
class unique_ptr_Tp[], _Tp_Deleter
{
  typedef std::tuple_Tp*, _Tp_Deleter __tuple_type;
  get() const
  { return std::get0(_M_t); }
  __tuple_type _M_t;
  };
namespace base {
struct release_deleter {
template class T void operator()(T* p) {
}
};
template typename T class dynamic_dispatch;
template 
typename TC,
typename TR,
typename TD,
typename... TA
 class dynamic_dispatchTR (TC::*)(TD, TA...) {
struct entry {
};
typedef std::unique_ptrentry[], release_deleter entry_ptr;
entry_ptr m_Start;
template typename UC, typename UD void attach_handler(TR
(UC::*m)(UD, TA...));
};
template 
typename TC,
typename TR,
typename TD,
typename... TA
 template 
typename UC,
typename UD
 void dynamic_dispatchTR (TC::*)(TD, TA...)::attach_handler(TR
(UC::*m)(UD, TA...)) {
entry* p = m_Cursor;
if (p != m_Start.get()) {
} while(--p != m_Start.get());
}
class __attribute__((dllexport)) request {
};
template std::size_t N_CHID class read_request : public read_request_base
{
};
template typename TC class request_dispatcher
  : private base::dynamic_dispatchvoid (TC::*)(request) {
request_dispatcher();
};
class __attribute__((dllexport)) device {
struct __attribute__((dllexport)) control_block : public OVERLAPPED {
explicit control_block(request req) {
}
};
};
class __attribute__((dllexport)) file_reader : public physical_device {
void execute_command(read_request0 req);
};
template  request_dispatcherfile_reader::request_dispatcher()
  : super(file_reader::report_unsupported_request) {
attach_handler(file_reader::execute_command); 


-- 

piotr dot wyderski at gmail dot com changed:

   What|Removed |Added

   Severity|normal  |major


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



[Bug c++/42447] [C++0x] ICE during processing complex templates

2009-12-21 Thread piotr dot wyderski at gmail dot com


--- Comment #11 from piotr dot wyderski at gmail dot com  2009-12-21 17:38 
---
An even more reduced testcase which ICEs. Delta is amazing...
I think I'll stop here.

// 8

namespace std
class tuple
{
};
  templatestd::size_t __i, typename... _Elements
get(tuple_Elements... __t)
{
}
  template class _OutputIterator, class _Tp
class unique_ptr
{
  };
  templatetypename _Tp, typename _Tp_Deleter
class unique_ptr_Tp[], _Tp_Deleter
{
  typedef std::tuple_Tp*, _Tp_Deleter __tuple_type;
  get() const
  { return std::get0(_M_t); }
  __tuple_type _M_t;
  };
namespace base {
struct release_deleter {
};
template typename T class dynamic_dispatch;
template 
typename TC,
typename TR,
typename TD,
typename... TA
 class dynamic_dispatchTR (TC::*)(TD, TA...) {
struct entry {
};
typedef std::unique_ptrentry[], release_deleter entry_ptr;
entry_ptr m_Start;
template typename UC, typename UD void attach_handler(TR
(UC::*m)(UD, TA...));
};
template 
typename TC,
typename TR,
typename TD,
typename... TA
 template 
typename UC,
typename UD
 void dynamic_dispatchTR (TC::*)(TD, TA...)::attach_handler(TR
(UC::*m)(UD, TA...)) {
entry* p = m_Cursor;
if (p != m_Start.get()) {
} while(--p != m_Start.get());
}
class __attribute__((dllexport)) request {
};
template std::size_t N_CHID class read_request : public read_request_base
{
};
template typename TC class request_dispatcher
  : private base::dynamic_dispatchvoid (TC::*)(request) {
request_dispatcher();
};
class __attribute__((dllexport)) file_reader : public physical_device {
void execute_command(read_request0 req);
};
template  request_dispatcherfile_reader::request_dispatcher()
  : super(file_reader::report_unsupported_request) {
attach_handler(file_reader::execute_command); 


-- 


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



[Bug libstdc++/42408] New: Missing templatized seed()

2009-12-17 Thread piotr dot wyderski at gmail dot com
There is no templatized user-provided seed()
and related constructors in the C++0x random
number generation library. The draft N3000 says
that the engines (Mersenne Twister, among others)
have

templateSeedSequence Sseq explicit mersenne_twister_engine(Sseq q);
templateSeedSequence Sseq void seed(Sseq q);

in order to use a user-supplied seed generator.
GCC classes accept only std::seed_seq, which in
some situations doesn't provide high-enough entropy.


-- 
   Summary: Missing templatized seed()
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC4.5.0


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



[Bug c++/40283] New: [C++0x] Context-specific explicit conversion doesn't work

2009-05-28 Thread piotr dot wyderski at gmail dot com
std::unique_ptr has an explicit conversion to
bool operator. However, according to Wikipedia:

http://en.wikipedia.org/wiki/C%2B%2B0x#Explicit_conversion_operators

In C++0x, the explicit keyword can now be applied to conversion operators. As
with constructors, it prevents the use of those conversion functions in
implicit conversions. However, language contexts that specifically require a
boolean value (the conditions of if-statements and loops, as well as operands
to the logical operators) count as explicit conversions and can thus use a bool
conversion operator.

But the following code doen't compile:

#include stdio.h
#include memory

int main(int argc, char *argv[]) {

std::unique_ptrint p(0);

if (p) {}

return 0;
}

Results in:

$ gcc -std=gnu++0x testcase.cpp
testcase.cpp: In function 'int main(int, char**)':
testcase.cpp:10: error: could not convert 'p' to 'bool'


-- 
   Summary: [C++0x] Context-specific explicit conversion doesn't
work
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC-trunk rev. 147886


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



[Bug c++/40269] New: ICE during procesing class attributes

2009-05-27 Thread piotr dot wyderski at gmail dot com
#include stdio.h

class __declspec(dllexport) A {};

int main(int argc, char *argv[]) {

return 0;
}

$ gcc testcase.cpp
testcase.cpp:3: internal compiler error: tree check: expected function_decl,
hav
e type_decl in handle_dll_attribute, at tree.c:4172
Please submit a full bug report,
with preprocessed source if appropriate.


-- 
   Summary: ICE during procesing class attributes
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC-trunk rev. 147886


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



[Bug libstdc++/40273] New: [C++0x] Invalid conwersion to bool is reported

2009-05-27 Thread piotr dot wyderski at gmail dot com
#include stdio.h
#include functional

int main(int argc, char *argv[]) {

std::functionvoid* () f = 0;

if (f != 0) {}

return 0;
}


 gcc -std=gnu++0x testcase.cpp


$ gcc -std=gnu++0x testcase.cpp
In file included from
/opt/gcc-trunk/lib/gcc/i686-pc-cygwin/4.5.0/include/c++/fu
nctional:70,
 from testcase.cpp:2:
/opt/gcc-trunk/lib/gcc/i686-pc-cygwin/4.5.0/include/c++/tr1_impl/functional: In
function 'bool std::operator!=(const std::function_Signature,
std::_M_clear_t
ype*) [with _Signature = void*()]':
testcase.cpp:8:   instantiated from here
/opt/gcc-trunk/lib/gcc/i686-pc-cygwin/4.5.0/include/c++/tr1_impl/functional:2116
: error: could not convert '__f' to 'bool'


-- 
   Summary: [C++0x] Invalid conwersion to bool is reported
   Product: gcc
   Version: 4.5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC-trunk rev. 147886


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



[Bug libstdc++/40258] New: void has no trivial destructor

2009-05-26 Thread piotr dot wyderski at gmail dot com
There is a discrepancy between boost:: and std:: type traits.

#include boost/type_traits.hpp
#include type_traits
#include cstdio

int main(int argc, char *argv[]) {

fprintf(stderr, std::has_trivial_destructorvoid = %i\n,
std::has_trivial_destructorvoid::value);

fprintf(stderr, boost::has_trivial_destructorvoid = %i\n,
boost::has_trivial_destructorvoid::value);

return 0;
}

According to STD void does not have a trivial destructor,
but according to boost it does. Please state which result
is correct and if it's boost's case, then fix the traits.


-- 
   Summary: void has no trivial destructor
   Product: gcc
   Version: 4.4.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/GCC4.4.0


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



[Bug libstdc++/39676] New: std::result_of doesn't work

2009-04-07 Thread piotr dot wyderski at gmail dot com
--8--

#include functional


int fn(long, float) {

return 0;
}


int main(int argc, char *argv[]) {

typedef std::result_ofdecltype(fn)::type type;
return 0;
}

--8--

$ g++ -std=c++0x testcase.cpp
In file included from
/opt/gcc-4.4.0-trunk/lib/gcc/i686-pc-cygwin/4.4.0/include/
c++/functional:75,
 from testcase.cpp:2:
/opt/gcc-4.4.0-trunk/lib/gcc/i686-pc-cygwin/4.4.0/include/c++/tr1_impl/functiona
l: In instantiation of 'std::_Result_of_implfalse, int ()(long int, float)':
/opt/gcc-4.4.0-trunk/lib/gcc/i686-pc-cygwin/4.4.0/include/c++/tr1_impl/functiona
l:154:   instantiated from 'std::result_ofint ()(long int, float)'
testcase.cpp:13:   instantiated from here
/opt/gcc-4.4.0-trunk/lib/gcc/i686-pc-cygwin/4.4.0/include/c++/tr1_impl/functiona
l:200: error: 'int' is not a class, struct, or union type

gcc used is:

$ gcc -v
Using built-in specs.
Target: i686-pc-cygwin
Configured with: ../configure --prefix=/opt/gcc-4.4.0-trunk -v
--enable-bootstra
p --enable-version-specific-runtime-libs --enable-static --enable-shared
--enabl
e-shared-libgcc --with-gnu-ld --with-gnu-as --enable-sjlj-exceptions
--enable-la
nguages=c,c++ --disable-symvers --enable-libjava --disable-nls
--with-cpu-32=cor
e2 --with-cpu-64=core2 --enable-threads=posix
Thread model: posix
gcc version 4.4.0 20090309 (experimental) (GCC)


-- 
   Summary: std::result_of doesn't work
   Product: gcc
   Version: 4.4.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: WinXP/x86/Cygwin


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



[Bug libstdc++/39676] std::result_of doesn't work

2009-04-07 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2009-04-07 14:05 
---
(In reply to comment #1)
 Note that *most* of the facilities in functional are still following the TR1
 specifications, thus, in general, do not expect conformance to the latest 
 C++0x
 draft (or file a DR for each unimplemented behavior ;)


The only C++0x functionality involved I am aware of is decltype,
which is outside of the template scope. BTW, 

boost::function_traits...::result_type

works flawlessly. Here is a simplified testcase:

#include functional

int main(int argc, char *argv[]) {

typedef std::result_ofint (long, float)::type type;
return 0;
}


-- 


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



[Bug libstdc++/39676] std::result_of doesn't work

2009-04-07 Thread piotr dot wyderski at gmail dot com


--- Comment #5 from piotr dot wyderski at gmail dot com  2009-04-07 14:31 
---
So it is a purely C++0x bug, as you indicated in your first reply.


-- 


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



[Bug libstdc++/39676] std::result_of doesn't work

2009-04-07 Thread piotr dot wyderski at gmail dot com


--- Comment #15 from piotr dot wyderski at gmail dot com  2009-04-07 15:47 
---
Subject: Re:  std::result_of doesn't work

jwakely dot gcc at gmail dot com gcc-bugzi...@gcc.gnu.org:

 You want this:

 typename std::result_of decltype(traitsT::restore) (S*) ::type

Thank you! :-)

 Paolo, let's close this.

Agreed. :-)

Best regards, Piotr


-- 


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



[Bug c++/39642] New: [C++0x] Unimplemented variadic template type expansion

2009-04-04 Thread piotr dot wyderski at gmail dot com
The following testcase:

-8-

#include stdio.h
#include vector

template typename T struct S;

template typename... TA struct Sstd::vectorTA... {

};


int main(int argc, char *argv[]) {
return 0;
}

-8-

produces:

$ g++ -std=c++0x testcase.cpp
testcase.cpp:6: sorry, unimplemented: cannot expand 'TA ...' into a
fixed-length argument list
testcase.cpp:6: error: template argument 1 is invalid


-- 
   Summary: [C++0x] Unimplemented variadic template type expansion
   Product: gcc
   Version: 4.4.0
Status: UNCONFIRMED
  Severity: minor
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Cygwin/WinXP/gcc-4.4.0-snapshot-20090123


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



[Bug c++/39413] New: static_assert and SFINAE

2009-03-09 Thread piotr dot wyderski at gmail dot com
G++ fails when compiling the following program in
g++0x mode. It displays spooky action at a distance
when instantiating the member_ptr template, but I
expect the converting assignment operator from weak_ptr
to be selected instead.

-8---


#include type_traits

class A {

};

class B : public A {

};

class C {

};


namespace gc {

template typename T class member_ptr;
}


template typename T class weak_ptr {

public:

weak_ptr() {}

template typename X weak_ptr(const weak_ptrX v) {}

weak_ptr(const weak_ptr) = default;

weak_ptr(const gc::member_ptrT v);

~weak_ptr() = default;

// --

weak_ptr operator =(const weak_ptr) = default;

template typename X weak_ptr operator =(const weak_ptrX v) {
return *this; }
};

namespace gc {

template typename T class member_ptr {

static_assert(std::is_base_ofC, T::value,
  spooky action at a distance);
};
}



int main(int argc, char *argv[]) {

weak_ptrA ap1;
weak_ptrB bp1;

ap1 = bp1;

return 0;
}


-8---


-- 
   Summary: static_assert and SFINAE
   Product: gcc
   Version: 4.4.0
Status: UNCONFIRMED
  Severity: major
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: GCC-4.4.0 (20090309), Cygwin, Windows XP


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



[Bug web/38973] New: Missing feature documentation

2009-01-26 Thread piotr dot wyderski at gmail dot com
The website

http://gcc.gnu.org/projects/cxx0x.html

claims that the New character types N2249
C++0x extension is not supported by any
version of GCC. But GCC 4.4.0 supports the
u8, u and U string prefixes. :-)


-- 
   Summary: Missing feature documentation
   Product: gcc
   Version: 4.4.0
Status: UNCONFIRMED
  Severity: minor
  Priority: P3
 Component: web
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: GCC-4.4.0, Cygwin, Windows XP


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



[Bug c++/38064] [c++0x] operator== doesn't work for enum classes

2009-01-26 Thread piotr dot wyderski at gmail dot com


--- Comment #3 from piotr dot wyderski at gmail dot com  2009-01-26 10:48 
---
The bug is definitely confirmed and it still happens on GCC-4.4.0 trunk
(revision 143673).


-- 

piotr dot wyderski at gmail dot com changed:

   What|Removed |Added

 CC||piotr dot wyderski at gmail
   ||dot com


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



[Bug web/38973] Missing feature documentation

2009-01-26 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2009-01-26 11:30 
---
The website includes feature descriptions of the 4.4 mainline and even of some
branches (lambda, concepts). I consider this C++0x extension to be extremelly
useful, so IMHO the website should indicate at least partial support of it in
order to allow others start their experiments with it.


-- 


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



[Bug bootstrap/37660] Error Building libssp, recent update

2009-01-14 Thread piotr dot wyderski at gmail dot com


--- Comment #2 from piotr dot wyderski at gmail dot com  2009-01-14 15:20 
---
Still happens on Cygwin


-- 


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



[Bug c++/38552] New: Invalid function return path analysis error report

2008-12-17 Thread piotr dot wyderski at gmail dot com
The following snippet:

8-

#include memory

typedef std::auto_ptrint v_type;

v_type fn(int v) {

v_type r(new int(4));

switch(v) {

case 1:
case 2: {

return v_type(new int(5));

} break;

default:

return r;
}
}

int main(int argc, char *argv[])
{
fn(4);
return 0;
}

8-

compiled with:

 g++ -Wall -Werror test.cpp

errornously produces:

error: control reaches end of non-void function

However, clearly, all control flow paths do return some result.
Without the break statement the code compiles flawlessly.


-- 
   Summary: Invalid function return path analysis error report
   Product: gcc
   Version: 4.3.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Windows Vista 64-bit, Core2, GCC 4.3.1 (cygwin)


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



[Bug c++/38555] New: Invalid function return path analysis error report

2008-12-17 Thread piotr dot wyderski at gmail dot com



-- 
   Summary: Invalid function return path analysis error report
   Product: gcc
   Version: 4.3.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: piotr dot wyderski at gmail dot com
  GCC host triplet: Windows Vista 64-bit, Core2, GCC 4.3.1 (cygwin)


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