https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108147
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
M2Emit_EmitError is:
71 extern "C" void M2Emit_EmitError (unsigned int error, unsigned int
note, unsigned int token, DynamicStrings_String message)
72 {
73 if (error)
74 {
75 m2linemap_ErrorAtf (M2LexBuf_TokenToLocation (token),
DynamicStrings_string (message));
76 }
77 else if (note)
78 {
79 /* avoid dangling else. */
80 m2linemap_NoteAtf (M2LexBuf_TokenToLocation (token),
DynamicStrings_string (message));
81 }
82 else
83 {
84 /* avoid dangling else. */
85 m2linemap_WarningAtf (M2LexBuf_TokenToLocation (token),
DynamicStrings_string (message));
86 }
87 }
Dump of assembler code for function M2Emit_EmitError(unsigned int, unsigned
int, unsigned int, DynamicStrings_String):
0x000000001111bab0 <+0>: lis r2,4563
0x000000001111bab4 <+4>: addi r2,r2,29696
0x000000001111bab8 <+8>: mflr r0
0x000000001111babc <+12>: std r31,-8(r1)
0x000000001111bac0 <+16>: std r0,16(r1)
0x000000001111bac4 <+20>: stdu r1,-48(r1)
0x000000001111bac8 <+24>: cmpdi r3,0
0x000000001111bacc <+28>: mr r31,r6
0x000000001111bad0 <+32>: mr r3,r5
0x000000001111bad4 <+36>: bne 0x1111bb60 <M2Emit_EmitError(unsigned
int, unsigned int, unsigned int, DynamicStrings_String)+176>
0x000000001111bad8 <+40>: cmpdi r4,0
0x000000001111badc <+44>: bne 0x1111bb20 <M2Emit_EmitError(unsigned
int, unsigned int, unsigned int, DynamicStrings_String)+112>
0x000000001111bae0 <+48>: bl 0x11054d48
<M2LexBuf_TokenToLocation(unsigned int)+8>
0x000000001111bae4 <+52>: nop
0x000000001111bae8 <+56>: mr r9,r3
0x000000001111baec <+60>: mr r3,r31
0x000000001111baf0 <+64>: mr r31,r9
0x000000001111baf4 <+68>: bl 0x1111f118
<DynamicStrings_string(DynamicStrings_String)+8>
0x000000001111baf8 <+72>: nop
0x000000001111bafc <+76>: mr r4,r3
0x000000001111bb00 <+80>: mr r3,r31
0x000000001111bb04 <+84>: bl 0x10ffc2e8
<m2linemap_WarningAtf(location_t, char const*, ...)+8>
0x000000001111bb08 <+88>: nop
0x000000001111bb0c <+92>: addi r1,r1,48
0x000000001111bb10 <+96>: ld r0,16(r1)
0x000000001111bb14 <+100>: ld r31,-8(r1)
0x000000001111bb18 <+104>: mtlr r0
0x000000001111bb1c <+108>: blr
0x000000001111bb20 <+112>: bl 0x11054d48
<M2LexBuf_TokenToLocation(unsigned int)+8>
0x000000001111bb24 <+116>: nop
0x000000001111bb28 <+120>: mr r9,r3
0x000000001111bb2c <+124>: mr r3,r31
0x000000001111bb30 <+128>: mr r31,r9
0x000000001111bb34 <+132>: bl 0x1111f118
<DynamicStrings_string(DynamicStrings_String)+8>
0x000000001111bb38 <+136>: nop
0x000000001111bb3c <+140>: mr r4,r3
0x000000001111bb40 <+144>: mr r3,r31
0x000000001111bb44 <+148>: bl 0x10ffc448
<m2linemap_NoteAtf(location_t, char const*, ...)+8>
0x000000001111bb48 <+152>: nop
0x000000001111bb4c <+156>: addi r1,r1,48
0x000000001111bb50 <+160>: ld r0,16(r1)
0x000000001111bb54 <+164>: ld r31,-8(r1)
0x000000001111bb58 <+168>: mtlr r0
0x000000001111bb5c <+172>: blr
0x000000001111bb60 <+176>: bl 0x11054d48
<M2LexBuf_TokenToLocation(unsigned int)+8>
0x000000001111bb64 <+180>: nop
0x000000001111bb68 <+184>: mr r9,r3
0x000000001111bb6c <+188>: mr r3,r31
0x000000001111bb70 <+192>: mr r31,r9
0x000000001111bb74 <+196>: bl 0x1111f118
<DynamicStrings_string(DynamicStrings_String)+8>
0x000000001111bb78 <+200>: nop
0x000000001111bb7c <+204>: mr r4,r3
0x000000001111bb80 <+208>: mr r3,r31
0x000000001111bb84 <+212>: bl 0x10ffc188
<m2linemap_ErrorAtf(location_t, char const*, ...)+8>
0x000000001111bb88 <+216>: nop
0x000000001111bb8c <+220>: addi r1,r1,48
0x000000001111bb90 <+224>: ld r0,16(r1)
0x000000001111bb94 <+228>: ld r31,-8(r1)
0x000000001111bb98 <+232>: mtlr r0
0x000000001111bb9c <+236>: blr
0x000000001111bba0 <+240>: .long 0x0
0x000000001111bba4 <+244>: .long 0x1000900
0x000000001111bba8 <+248>: .long 0x180
while the callee is:
200 void
201 m2linemap_WarningAtf (location_t location, const char *message, ...)
202 {
203 diagnostic_info diagnostic;
204 va_list ap;
205 rich_location richloc (line_table, location);
206
207 va_start (ap, message);
208 diagnostic_set_info (&diagnostic, message, &ap, &richloc,
DK_WARNING);
209 diagnostic_report_diagnostic (global_dc, &diagnostic);
210 va_end (ap);
211 }
with full disassembly above.