[Bug c++/70001] [5/6 regression] Infinity compilation time

2016-03-10 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70001

--- Comment #9 from Jakub Jelinek  ---
Author: jakub
Date: Thu Mar 10 17:23:06 2016
New Revision: 234117

URL: https://gcc.gnu.org/viewcvs?rev=234117=gcc=rev
Log:
PR c++/70001
* constexpr.c (cxx_eval_vec_init_1): For pre_init case, reuse
return value from cxx_eval_constant_expression from earlier
elements if it is valid constant initializer requiring no
relocations.

* g++.dg/cpp0x/constexpr-70001-1.C: New test.
* g++.dg/cpp0x/constexpr-70001-2.C: New test.
* g++.dg/cpp0x/constexpr-70001-3.C: New test.

Added:
trunk/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C
trunk/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-2.C
trunk/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-3.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/constexpr.c
trunk/gcc/testsuite/ChangeLog

[Bug c++/70001] [5/6 regression] Infinity compilation time

2016-03-10 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70001

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #8 from Jakub Jelinek  ---
Created attachment 37924
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37924=edit
gcc6-pr70001.patch

So do you mean something like this?  The *-2.C testcase is what I believe
you've been talking about and indeed Patrick's patch broke that.
I'm still wondering if there could be dependency on this even without
relocation, but e.g. for:
constexpr __UINTPTR_TYPE__ foo (void *p) { return (__UINTPTR_TYPE__) p; }
struct X
{
  __UINTPTR_TYPE__ a;
  constexpr X () : a (foo (this)) { }
};
constexpr signed char bar (void *p) { return (signed char) (__UINTPTR_TYPE__)
p; }
struct Y
{
  signed char a;
  constexpr Y () : a (bar (this)) { }
};

constexpr int N = 1 << 4;
struct A { X elems[N]; } F;
struct B { Y elems[N]; } G;

with (unpatched) g++ F contains relocations and G contains all zeros.  clang++
3.8 rejects both constexpr functions as having reinterpret cast, so maybe that
just isn't valid (shall g++ reject that too)?

[Bug c++/70001] [5/6 regression] Infinity compilation time

2016-03-02 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70001

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P2

[Bug c++/70001] [5/6 regression] Infinity compilation time

2016-02-29 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70001

Richard Biener  changed:

   What|Removed |Added

   Target Milestone|--- |5.4
Summary|[5 regression] Infinity |[5/6 regression] Infinity
   |compilation time|compilation time