/* As per inlining-7.c, but testing how the ASCII art version of the path looks. */ /* { dg-additional-options "-O2 -fdiagnostics-show-path-depths" } */ /* { dg-additional-options "-fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */ static inline void depth_6 (void *p) { __builtin_free (p); /* { dg-warning "double-'free' of 'p1'" "warning" } */ } static inline void depth_5 (void *p5) { depth_6 (p5); } static inline void depth_4 (void *p4) { depth_5 (p4); } static inline void depth_3 (void *p3) { depth_4 (p3); depth_4 (p3); } static inline void depth_2 (void *p2) { depth_3 (p2); } void depth_1 (void *p1) { depth_2 (p1); } /* We want the reconstructed call/return hierarchy to show that two calls happen at depth_3, without popping the stack back any further. */ /* { dg-begin-multiline-output "" } __builtin_free (p); ^~~~~~~~~~~~~~~~~~ 'depth_1': events 1-2 (depth 1) | | depth_1 (void *p1) | ^~~~~~~ | | | (1) entry to 'depth_1' | | depth_2 (p1); | ~ | | | (2) inlined call to 'depth_2' from 'depth_1' | +--> 'depth_2': event 3 (depth 2) | | depth_3 (p2); | ^ | | | (3) inlined call to 'depth_3' from 'depth_2' | +--> 'depth_3': event 4 (depth 3) | | depth_4 (p3); | ^ | | | (4) inlined call to 'depth_4' from 'depth_3' | +--> 'depth_4': event 5 (depth 4) | | depth_5 (p4); | ^ | | | (5) inlined call to 'depth_5' from 'depth_4' | +--> 'depth_5': event 6 (depth 5) | | depth_6 (p5); | ^ | | | (6) inlined call to 'depth_6' from 'depth_5' | +--> 'depth_6': event 7 (depth 6) | | __builtin_free (p); | ^~~~~~~~~~~~~~~~~~ | | | (7) first 'free' here | <--------------------+ | 'depth_3': event 8 (depth 3) | | depth_4 (p3); | ^ | | | (8) inlined call to 'depth_4' from 'depth_3' | +--> 'depth_4': event 9 (depth 4) | | depth_5 (p4); | ^ | | | (9) inlined call to 'depth_5' from 'depth_4' | +--> 'depth_5': event 10 (depth 5) | | depth_6 (p5); | ^ | | | (10) inlined call to 'depth_6' from 'depth_5' | +--> 'depth_6': event 11 (depth 6) | | __builtin_free (p); | ^~~~~~~~~~~~~~~~~~ | | | (11) second 'free' here; first 'free' was at (7) | { dg-end-multiline-output "" } */