diff mbox series

[committed] Add the primary testcase from PR c++/89285

Message ID 20190225150452.GW7611@tucnak
State New
Headers show
Series [committed] Add the primary testcase from PR c++/89285 | expand

Commit Message

Jakub Jelinek Feb. 25, 2019, 3:04 p.m. UTC
Hi!

This testcase ICEs on the 8.x branch and ICEd as well with my earlier
approach to get the testcase rejected on the trunk again when foo is
constexpr, but actually with the latest approach that was committed
(where constexpr evaluation is done on pre-cp_fold_function trees and
cp_fold can optimize away those reinterpret_casts) it doesn't ICE.

So, I've tested this on the trunk with check-c++-all, verified that 8.x ICEs
on it and committed to trunk as obvious.

2019-02-25  Jakub Jelinek  <jakub@redhat.com>

	PR c++/89285
	* g++.dg/cpp1y/constexpr-89285-2.C: New test.


	Jakub
diff mbox series

Patch

--- gcc/testsuite/g++.dg/cpp1y/constexpr-89285-2.C.jj	2019-02-25 15:47:55.189265284 +0100
+++ gcc/testsuite/g++.dg/cpp1y/constexpr-89285-2.C	2019-02-25 15:47:34.937592247 +0100
@@ -0,0 +1,20 @@ 
+// PR c++/89285
+// { dg-do compile { target c++14 } }
+
+struct A {
+  int a {};
+};
+struct B {
+  int b {};
+  constexpr B (A *x) {
+    int *c = &x->a;
+    while (*c)
+      c = reinterpret_cast<int *>((reinterpret_cast<char *>(c) + *c));
+    *c = reinterpret_cast<char *>(this) - reinterpret_cast<char *>(c);
+  }
+};
+struct C : A {
+  B bar {this};
+};
+
+C foo {};