https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121894
--- Comment #5 from qinzhao at gcc dot gnu.org ---
(In reply to Jakub Jelinek from comment #0)
> Consider
> struct S { int a, b, c, d; };
> void bar (int, int, int, int);
>
> void
> foo ()
> {
> S s;
> s.a = 1;
> s.c = 2;
> s.d = 3;
> s.a++;
> s.c++;
> s.d++;
> bar (s.a, s.b, s.c, s.d);
> }
>
when adding one more reference to s.b in the source code, such as:
> void
> foo ()
> {
> S s;
> s.a = 1;
> s.c = 2;
> s.d = 3;
> s.a++;
s.b++;
> s.c++;
> s.d++;
> bar (s.a, s.b, s.c, s.d);
> }
the SRA decides to scalarize s.b, and then delete the call to .DEFERRED_INIT to
the whole object, the final optimized code:
s$b_7 = .DEFERRED_INIT (4, 1, &"s"[0]);
_2 = s$b_7 + 1;
bar (2, _2, 3, 4);
So, the question is, whether the SRA analyze correctly when s.b++ is not in the
source code?