1 /* { dg-do compile } */
2 /* { dg-skip-if "split DWARF unsupported" { *-*-darwin* } } */
3 /* { dg-options "-g -O2 -fno-var-tracking-assignments -gsplit-dwarf" } */
4
5 /* This used to fail with location views (implicitly) enabled, because
6 var-tracking (not at assignments) creates a range for d starting at
7 the load after the first call, and we did not split the range,
8 despite its crossing between hot and cold partitions, because it's
9 a single range, that we normally extend to the entire function.
10 However, because the range starts at a (presumed) nonzero view, we
11 end up outputting a loclist instead of a single location entry.
12 But then, -gsplit-dwarf selects (startx,length) loclist entries,
13 and the length ends up computing the difference between symbols in
14 different subsections. */
15
16 int a;
17 __attribute__((__cold__)) void b();
18
19 void e(int *);
20 int f();
21
c()22 void c() {
23 int d;
24 e(&d);
25 a = d;
26 if (f())
27 b();
28 }
29