On Mon, Nov 25, 2013 at 11:47:29AM +0100, Jakub Jelinek wrote:
> That looks much better, I wonder if it would reproduce even if the result
> is saved somewhere (either E *e; field in S with swapping of the two class
> definitions, or global var or static data member static E *e; of S),
> otherwise the new just allocates and throws away.  Ok with that change, or
> if it makes the problem no longer reproduceable, ok as is.

It is reproduceable with all three variants.  I'll commit this one shortly.
 
> Note, once the LTO issues with internal functions are fixed, we need
> to grep for all those dg-skip-if and remove them.

Yeah, definitely.  I'm keeping it in mind.

2013-11-25  Marek Polacek  <pola...@redhat.com>

testsuite/
        * g++.dg/ubsan/pr59250.C: New test.

--- gcc/testsuite/g++.dg/ubsan/pr59250.C.mp3    2013-11-25 10:43:24.797315678 
+0100
+++ gcc/testsuite/g++.dg/ubsan/pr59250.C        2013-11-25 11:55:37.000000000 
+0100
@@ -0,0 +1,19 @@
+// PR sanitizer/59250
+// { dg-do compile }
+// { dg-options "-fsanitize=undefined" }
+// { dg-skip-if "" { *-*-* } { "-flto" } { "" } }
+
+struct E {
+ int i;
+};
+
+struct S {
+  const char *s;
+  S (const char *);
+  static E *e;
+};
+
+S::S (const char *) : s (0)
+{
+  e = new E ();
+}

        Marek

Reply via email to