On Fri, 13 Nov 2020, Jakub Jelinek wrote: > Hi! > > Apparently older GDB versions didn't handle this test right and so while > it has been properly printing 42 on line 14 (e.g. on x86_64), it issued > a weird error on line 17 (and because it didn't print any value, guality > testsuite wasn't marking it as FAIL). > That has been apparently fixed in GDB 10, where it now (on x86_64) prints > properly. > Unfortunately that revealed that the test can suffer from instruction > scheduling, where e.g. on i686 (but various other arches) the very first > insn of the function (or whatever b 14 is on) happens to be load of the > S::i variable from memory and that insn has the inner lexical scope, so > GDB 10 prints there 24 instead of 42. The following insn is then > the first store to l and there the automatic i is in scope and prints as 42 > and then the second store to l where the inner lexical scope is current > and prints 24 again. > The test wasn't meant about insn scheduling but about whether we emit the > DIEs properly, so this hack attempts to prevent the undesirable scheduling. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK. > 2020-11-13 Jakub Jelinek <ja...@redhat.com> > > * g++.dg/guality/redeclaration1.C (p): New variable. > (S::f): Increment what p points to before storing S::i into l. Adjust > gdb-test line numbers. > (main): Initialize p to address of an automatic variable. > > --- gcc/testsuite/g++.dg/guality/redeclaration1.C.jj 2020-01-12 > 11:54:37.182401807 +0100 > +++ gcc/testsuite/g++.dg/guality/redeclaration1.C 2020-11-13 > 13:40:40.684122957 +0100 > @@ -3,6 +3,7 @@ > // { dg-skip-if "" { *-*-* } { "-flto" } { "" } } > > volatile int l; > +int *volatile p; > > namespace S > { > @@ -11,10 +12,11 @@ namespace S > f() > { > int i = 42; > - l = i; // { dg-final { gdb-test 14 "i" "42" } } > + l = i; // { dg-final { gdb-test 15 "i" "42" } } > { > extern int i; > - l = i; // { dg-final { gdb-test 17 "i" "24" } } > + p[0]++; > + l = i; // { dg-final { gdb-test 19 "i" "24" } } > } > } > } > @@ -22,6 +24,8 @@ namespace S > int > main (void) > { > + int x = 0; > + p = &x; > S::f (); > return 0; > } > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imend