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

Reply via email to