Skip to content

Commit 3df1a11

Browse files
author
Christophe Lyon
committed
aarch64: fix warning emission for ABI break since GCC 9.1
While looking at PR 105549, which is about fixing the ABI break introduced in GCC 9.1 in parameter alignment with bit-fields, we noticed that the GCC 9.1 warning is not emitted in all the cases where it should be. This patch fixes that and the next patch in the series fixes the GCC 9.1 break. We split this into two patches since patch #2 introduces a new ABI break starting with GCC 13.1. This way, patch #1 can be back-ported to release branches if needed to fix the GCC 9.1 warning issue. The main idea is to add a new global boolean that indicates whether we're expanding the start of a function, so that aarch64_layout_arg can emit warnings for callees as well as callers. This removes the need for aarch64_function_arg_boundary to warn (with its incomplete information). However, in the first patch there are still cases where we emit warnings were we should not; this is fixed in patch #2 where we can distinguish between GCC 9.1 and GCC.13.1 ABI breaks properly. The fix in aarch64_function_arg_boundary (replacing & with &&) looks like an oversight of a previous commit in this area which changed 'abi_break' from a boolean to an integer. We also take the opportunity to fix the comment above aarch64_function_arg_alignment since the value of the abi_break parameter was changed in a previous commit, no longer matching the description. 2022-11-28 Christophe Lyon <[email protected]> Richard Sandiford <[email protected]> gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_function_arg_alignment): Fix comment. (aarch64_layout_arg): Factorize warning conditions. (aarch64_function_arg_boundary): Fix typo. * function.cc (currently_expanding_function_start): New variable. (expand_function_start): Handle currently_expanding_function_start. * function.h (currently_expanding_function_start): Declare. gcc/testsuite/ChangeLog: * gcc.target/aarch64/bitfield-abi-warning-align16-O2.c: New test. * gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c: New test. * gcc.target/aarch64/bitfield-abi-warning-align32-O2.c: New test. * gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c: New test. * gcc.target/aarch64/bitfield-abi-warning-align8-O2.c: New test. * gcc.target/aarch64/bitfield-abi-warning.h: New test. * g++.target/aarch64/bitfield-abi-warning-align16-O2.C: New test. * g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C: New test. * g++.target/aarch64/bitfield-abi-warning-align32-O2.C: New test. * g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C: New test. * g++.target/aarch64/bitfield-abi-warning-align8-O2.C: New test. * g++.target/aarch64/bitfield-abi-warning.h: New test.
1 parent b073f2b commit 3df1a11

15 files changed

+1132
-7
lines changed

gcc/config/aarch64/aarch64.cc

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7536,9 +7536,9 @@ aarch64_vfp_is_call_candidate (cumulative_args_t pcum_v, machine_mode mode,
75367536
/* Given MODE and TYPE of a function argument, return the alignment in
75377537
bits. The idea is to suppress any stronger alignment requested by
75387538
the user and opt for the natural alignment (specified in AAPCS64 \S
7539-
4.1). ABI_BREAK is set to true if the alignment was incorrectly
7540-
calculated in versions of GCC prior to GCC-9. This is a helper
7541-
function for local use only. */
7539+
4.1). ABI_BREAK is set to the old alignment if the alignment was
7540+
incorrectly calculated in versions of GCC prior to GCC-9. This is
7541+
a helper function for local use only. */
75427542

75437543
static unsigned int
75447544
aarch64_function_arg_alignment (machine_mode mode, const_tree type,
@@ -7614,11 +7614,24 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
76147614
if (pcum->aapcs_arg_processed)
76157615
return;
76167616

7617+
bool warn_pcs_change
7618+
= (warn_psabi
7619+
&& !pcum->silent_p
7620+
&& (currently_expanding_function_start
7621+
|| currently_expanding_gimple_stmt));
7622+
7623+
unsigned int alignment
7624+
= aarch64_function_arg_alignment (mode, type, &abi_break);
7625+
gcc_assert (!alignment || abi_break < alignment);
7626+
76177627
pcum->aapcs_arg_processed = true;
76187628

76197629
pure_scalable_type_info pst_info;
76207630
if (type && pst_info.analyze_registers (type))
76217631
{
7632+
/* aarch64_function_arg_alignment has never had an effect on
7633+
this case. */
7634+
76227635
/* The PCS says that it is invalid to pass an SVE value to an
76237636
unprototyped function. There is no ABI-defined location we
76247637
can return in this case, so we have no real choice but to raise
@@ -7689,6 +7702,8 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
76897702
and homogenous short-vector aggregates (HVA). */
76907703
if (allocate_nvrn)
76917704
{
7705+
/* aarch64_function_arg_alignment has never had an effect on
7706+
this case. */
76927707
if (!pcum->silent_p && !TARGET_FLOAT)
76937708
aarch64_err_no_fpadvsimd (mode);
76947709

@@ -7753,7 +7768,7 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
77537768
&& (aarch64_function_arg_alignment (mode, type, &abi_break)
77547769
== 16 * BITS_PER_UNIT))
77557770
{
7756-
if (abi_break && warn_psabi && currently_expanding_gimple_stmt)
7771+
if (warn_pcs_change && abi_break)
77577772
inform (input_location, "parameter passing for argument of type "
77587773
"%qT changed in GCC 9.1", type);
77597774
++ncrn;
@@ -7816,7 +7831,7 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
78167831
int new_size = ROUND_UP (pcum->aapcs_stack_size, 16 / UNITS_PER_WORD);
78177832
if (pcum->aapcs_stack_size != new_size)
78187833
{
7819-
if (abi_break && warn_psabi && currently_expanding_gimple_stmt)
7834+
if (warn_pcs_change && abi_break)
78207835
inform (input_location, "parameter passing for argument of type "
78217836
"%qT changed in GCC 9.1", type);
78227837
pcum->aapcs_stack_size = new_size;
@@ -7936,14 +7951,13 @@ aarch64_function_arg_boundary (machine_mode mode, const_tree type)
79367951
unsigned int alignment = aarch64_function_arg_alignment (mode, type,
79377952
&abi_break);
79387953
alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
7939-
if (abi_break & warn_psabi)
7954+
if (abi_break && warn_psabi)
79407955
{
79417956
abi_break = MIN (MAX (abi_break, PARM_BOUNDARY), STACK_BOUNDARY);
79427957
if (alignment != abi_break)
79437958
inform (input_location, "parameter passing for argument of type "
79447959
"%qT changed in GCC 9.1", type);
79457960
}
7946-
79477961
return alignment;
79487962
}
79497963

gcc/function.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5062,9 +5062,12 @@ stack_protect_epilogue (void)
50625062
PARMS_HAVE_CLEANUPS is nonzero if there are cleanups associated with
50635063
the function's parameters, which must be run at any return statement. */
50645064

5065+
bool currently_expanding_function_start;
50655066
void
50665067
expand_function_start (tree subr)
50675068
{
5069+
currently_expanding_function_start = true;
5070+
50685071
/* Make sure volatile mem refs aren't considered
50695072
valid operands of arithmetic insns. */
50705073
init_recog_no_volatile ();
@@ -5257,6 +5260,8 @@ expand_function_start (tree subr)
52575260
/* If we are doing generic stack checking, the probe should go here. */
52585261
if (flag_stack_check == GENERIC_STACK_CHECK)
52595262
stack_check_probe_note = emit_note (NOTE_INSN_DELETED);
5263+
5264+
currently_expanding_function_start = false;
52605265
}
52615266

52625267
void

gcc/function.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,4 +723,6 @@ extern const char *current_function_name (void);
723723

724724
extern void used_types_insert (tree);
725725

726+
extern bool currently_expanding_function_start;
727+
726728
#endif /* GCC_FUNCTION_H */
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/* { dg-do compile } */
2+
/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
3+
4+
#define ALIGN 16
5+
//#define EXTRA
6+
7+
#include "bitfield-abi-warning.h"
8+
9+
/* In f1, f2, f4, f8, f16, f16p (and stdarg versions): */
10+
/* { dg-final { scan-assembler-times "and\tw0, w2, 1" 12 { xfail *-*-* } } } */
11+
/* In fp, f1p, f2p, f4p, f8p (and stdarg versions): */
12+
/* { dg-final { scan-assembler-times "and\tw0, w1, 1" 10 { xfail *-*-* } } } */
13+
14+
/* Bitfield parameter in registers. */
15+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 47 } f1 */
16+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 48 } f2 */
17+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 49 } f4 */
18+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 50 } f8 */
19+
20+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 53 } fp */
21+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 54 } f1p */
22+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 55 } f2p */
23+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 56 } f4p */
24+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 57 } f8p */
25+
26+
/* Bitfield call argument in registers. */
27+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 60 } g1 */
28+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 61 } g2 */
29+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 62 } g4 */
30+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 63 } g8 */
31+
32+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 66 } gp */
33+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 67 } g1p */
34+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 68 } g2p */
35+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 69 } g4p */
36+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 70 } g8p */
37+
38+
39+
/* Bitfield parameter in stack. */
40+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 74 } f1_stack */
41+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 75 } f2_stack */
42+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 76 } f4_stack */
43+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 77 } f8_stack */
44+
45+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 80 } fp_stack */
46+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 81 } f1p_stack */
47+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 82 } f2p_stack */
48+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 83 } f4p_stack */
49+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 84 } f8p_stack */
50+
51+
/* Bitfield call argument in stack. */
52+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 87 } g1_stack */
53+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 88 } g2_stack */
54+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 89 } g4_stack */
55+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 90 } g8_stack */
56+
57+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 93 } gp_stack */
58+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 94 } g1p_stack */
59+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 95 } g2p_stack */
60+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 96 } g4p_stack */
61+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 97 } g8p_stack */
62+
63+
64+
/* Bitfield parameter in stdarg. */
65+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 101 } f1_stdarg */
66+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 102 } f2_stdarg */
67+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 103 } f4_stdarg */
68+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 104 } f8_stdarg */
69+
70+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 107 } fp_stdarg */
71+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 108 } f1p_stdarg */
72+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 109 } f2p_stdarg */
73+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 110 } f4p_stdarg */
74+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 111 } f8p_stdarg */
75+
76+
/* Bitfield call argument in stdarg. */
77+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 114 } g1_stdarg */
78+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 115 } g2_stdarg */
79+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 116 } g4_stdarg */
80+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 117 } g8_stdarg */
81+
82+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 120 } gp_stdarg */
83+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 121 } g1p_stdarg */
84+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 122 } g2p_stdarg */
85+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 123 } g4p_stdarg */
86+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 124 } g8p_stdarg */
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/* { dg-do compile } */
2+
/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
3+
4+
#define ALIGN 16
5+
#define EXTRA
6+
7+
#include "bitfield-abi-warning.h"
8+
9+
/* In f1, f2, f4, f8, f16, f16p (and stdarg versions): */
10+
/* { dg-final { scan-assembler-times "and\tw0, w2, 1" 12 { xfail *-*-* } } } */
11+
/* In fp, f1p, f2p, f4p, f8p (and stdarg versions): */
12+
/* { dg-final { scan-assembler-times "and\tw0, w1, 1" 10 { xfail *-*-* } } } */
13+
14+
/* Bitfield parameter in registers. */
15+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 47 } f1 */
16+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 48 } f2 */
17+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 49 } f4 */
18+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 50 } f8 */
19+
20+
/* No change in parameter passing in GCC 9.1 for lines 53-57 (fp, f1p, f2p,
21+
f4p, f8p) (because the argument fits in a single register). Should not
22+
warn, but aarch64_function_arg_boundary would need to take the argument size
23+
into account as well as whether it's passed via registers or the stack. */
24+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 53 } fp */
25+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 54 } f1p */
26+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 55 } f2p */
27+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 56 } f4p */
28+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 57 } f8p */
29+
30+
/* Bitfield call argument in registers. */
31+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 60 } g1 */
32+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 61 } g2 */
33+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 62 } g4 */
34+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 63 } g8 */
35+
36+
/* No change in parameter passing in GCC 9.1 for lines 66-70 (gp, g1p, g2p,
37+
g4p, g8p), no warning expected. */
38+
39+
40+
/* Bitfield parameter in stack. */
41+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 74 } f1_stack */
42+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 75 } f2_stack */
43+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 76 } f4_stack */
44+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 77 } f8_stack */
45+
46+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 80 } fp_stack */
47+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 81 } f1p_stack */
48+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 82 } f2p_stack */
49+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 83 } f4p_stack */
50+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 84 } f8p_stack */
51+
52+
/* Bitfield call argument in stack. */
53+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 87 } g1_stack */
54+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 88 } g2_stack */
55+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 89 } g4_stack */
56+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 90 } g8_stack */
57+
58+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 93 } gp_stack */
59+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 94 } g1p_stack */
60+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 95 } g2p_stack */
61+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 96 } g4p_stack */
62+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 97 } g8p_stack */
63+
64+
65+
/* Bitfield parameter in stdarg. */
66+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 101 } f1_stdarg */
67+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 102 } f2_stdarg */
68+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 103 } f4_stdarg */
69+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 104 } f8_stdarg */
70+
71+
/* Parameter passing for these should not have changed in GCC 9.1 (PR 105549).
72+
Fortunately we warn. Note the discrepancy with lines 120-124 below: we warn
73+
in the callee, but not in the caller. */
74+
/* { dg-note {parameter passing for argument of type 'Sp' changed in GCC 9.1} "" { target *-*-* } 107 } fp_stdarg */
75+
/* { dg-note {parameter passing for argument of type 'S1p' changed in GCC 9.1} "" { target *-*-* } 108 } f1p_stdarg */
76+
/* { dg-note {parameter passing for argument of type 'S2p' changed in GCC 9.1} "" { target *-*-* } 109 } f2p_stdarg */
77+
/* { dg-note {parameter passing for argument of type 'S4p' changed in GCC 9.1} "" { target *-*-* } 110 } f4p_stdarg */
78+
/* { dg-note {parameter passing for argument of type 'S8p' changed in GCC 9.1} "" { target *-*-* } 111 } f8p_stdarg */
79+
80+
/* Bitfield call argument in stdarg. */
81+
/* { dg-note {parameter passing for argument of type 'S1' changed in GCC 9.1} "" { target *-*-* } 114 } g1_stdarg */
82+
/* { dg-note {parameter passing for argument of type 'S2' changed in GCC 9.1} "" { target *-*-* } 115 } g2_stdarg */
83+
/* { dg-note {parameter passing for argument of type 'S4' changed in GCC 9.1} "" { target *-*-* } 116 } g4_stdarg */
84+
/* { dg-note {parameter passing for argument of type 'S8' changed in GCC 9.1} "" { target *-*-* } 117 } g8_stdarg */
85+
86+
/* No change in parameter passing in GCC 9.1 for lines 120-124 (gp_stdarg
87+
g1p_stdarg, g2p_stdarg, g4p_stdarg, g8p_stdarg), no warning expected. */

0 commit comments

Comments
 (0)