https://gcc.gnu.org/g:469c1ef00d01fa465ad189609abd86edf0db2b0f
commit r17-2091-g469c1ef00d01fa465ad189609abd86edf0db2b0f Author: Richard Earnshaw <[email protected]> Date: Wed Jul 1 13:46:56 2026 +0100 arm: make the SHAPE macro take a trailing semicolon The SHAPE macro is used like a statement, but as currently written does not take a trailing semicolon. This can be confusing for context-sensitive editors as it looks like a statement, but isn't really. Fix this by tweaking the macro to use a no-op trailing statement that now requires a semicolon. The ATTRIBUTE_UNUSED isn't really needed but makes the intent clearer. gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (SHAPE): Add a trailing statement that lacks a semicolon. Add that to all existing uses. Diff: --- gcc/config/arm/arm-mve-builtins-shapes.cc | 145 +++++++++++++++--------------- 1 file changed, 73 insertions(+), 72 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index 31dbe6256f03..8a2f4a825fd5 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -372,9 +372,10 @@ half_type_suffix (function_resolver &r, /* Declare the function shape NAME, pointing it to an instance of class <NAME>_def. */ -#define SHAPE(NAME) \ - static CONSTEXPR const NAME##_def NAME##_obj; \ - namespace shapes { const function_shape *const NAME = &NAME##_obj; } +#define SHAPE(NAME) \ + static CONSTEXPR const NAME##_def NAME##_obj; \ + namespace shapes { const function_shape *const NAME = &NAME##_obj; } \ + extern int __require_trailing_semicolon ATTRIBUTE_UNUSED /* Base class for functions that are not overloaded. */ struct nonoverloaded_base : public function_shape @@ -467,7 +468,7 @@ struct binary_def : public overloaded_base<0> return r.resolve_uniform (2); } }; -SHAPE (binary) +SHAPE (binary); /* <[u]int32>_t vfoo[_<t0>](<T0>_t, <T0>_t) @@ -494,7 +495,7 @@ struct binary_acc_int32_def : public overloaded_base<0> return r.resolve_uniform (2); } }; -SHAPE (binary_acc_int32) +SHAPE (binary_acc_int32); /* <[u]int64>_t vfoo[_<t0>](<T0>_t, <T0>_t) @@ -517,7 +518,7 @@ struct binary_acc_int64_def : public overloaded_base<0> return r.resolve_uniform (2); } }; -SHAPE (binary_acc_int64) +SHAPE (binary_acc_int64); /* <[u]int32>_t vfoo[_<t0>]([u]int32_t, <T0>_t, <T0>_t) @@ -559,7 +560,7 @@ struct binary_acca_int32_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_acca_int32) +SHAPE (binary_acca_int32); /* [u]int64_t vfoo[_<t0>]([u]int64_t, <T0>_t, <T0>_t) @@ -602,7 +603,7 @@ struct binary_acca_int64_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_acca_int64) +SHAPE (binary_acca_int64); /* <T0>_t vfoo[_n_t0](<T0>_t, int32_t) @@ -629,7 +630,7 @@ struct binary_imm32_def : public overloaded_base<0> return r.resolve_uniform (1, 1); } }; -SHAPE (binary_imm32) +SHAPE (binary_imm32); /* <T0>_t vfoo[_n_t0](<T0>_t, const int) @@ -665,7 +666,7 @@ struct binary_rshift_def : public overloaded_base<0> return c.require_immediate_range (1, 1, bits); } }; -SHAPE (binary_rshift) +SHAPE (binary_rshift); /* <uT0>_t vfoo[_n_t0](<T0>_t, int) @@ -721,7 +722,7 @@ struct binary_lshift_unsigned_def : public overloaded_base<0> } }; -SHAPE (binary_lshift_unsigned) +SHAPE (binary_lshift_unsigned); /* <uT0>_t vfoo[_t0](<uT0>_t, <T0>_t) @@ -760,7 +761,7 @@ struct binary_maxamina_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_maxamina) +SHAPE (binary_maxamina); /* <uS0>_t vfoo[_<t0>](<uS0>_t, <T0>_t) @@ -790,7 +791,7 @@ struct binary_maxavminav_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_maxavminav) +SHAPE (binary_maxavminav); /* <S0>_t vfoo[_<t0>](<S0>_t, <T0>_t) @@ -820,7 +821,7 @@ struct binary_maxvminv_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_maxvminv) +SHAPE (binary_maxvminv); /* <T0:half>_t vfoo[_t0](<T0:half>_t, <T0>_t) @@ -854,7 +855,7 @@ struct binary_move_narrow_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_move_narrow) +SHAPE (binary_move_narrow); /* <uT0:half>_t vfoo[_t0](<uT0:half>_t, <T0>_t) @@ -888,7 +889,7 @@ struct binary_move_narrow_unsigned_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_move_narrow_unsigned) +SHAPE (binary_move_narrow_unsigned); /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t) <T0>_t vfoo[_n_t0](<T0>_t, <S0>_t) @@ -920,7 +921,7 @@ struct binary_opt_n_def : public overloaded_base<0> return r.resolve_uniform_opt_n (2); } }; -SHAPE (binary_opt_n) +SHAPE (binary_opt_n); /* <T0>_t vfoo[t0](<T0>_t, <T0>_t) <T0>_t vfoo[_n_t0](<T0>_t, <S0>_t) @@ -986,7 +987,7 @@ struct binary_orrq_def : public overloaded_base<0> return r.finish_opt_n_resolution (i, 0, type); } }; -SHAPE (binary_orrq) +SHAPE (binary_orrq); /* <T0>_t vfoo[t0](<T0>_t, <T0>_t) <T0>_t vfoo[_n_t0](<T0>_t, int32_t) @@ -1047,7 +1048,7 @@ struct binary_round_lshift_def : public overloaded_base<0> return r.finish_opt_n_resolution (i, 0, type, TYPE_signed); } }; -SHAPE (binary_round_lshift) +SHAPE (binary_round_lshift); /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t) <T0>_t vfoo_n[_t0](<T0>_t, const int) @@ -1104,7 +1105,7 @@ struct binary_lshift_def : public overloaded_base<0> return c.require_immediate_range (1, 0, bits - 1); } }; -SHAPE (binary_lshift) +SHAPE (binary_lshift); /* Used with the above form, but only for the MODE_r case which does not always support the same set of predicates as MODE_none and @@ -1145,7 +1146,7 @@ struct binary_lshift_r_def : public overloaded_base<0> return r.finish_opt_n_resolution (i, 0, type, TYPE_signed); } }; -SHAPE (binary_lshift_r) +SHAPE (binary_lshift_r); /* <T0:half>_t vfoo[_n_t0](<T0:half>_t, <T0>_t, const int) @@ -1190,7 +1191,7 @@ struct binary_rshift_narrow_def : public overloaded_base<0> return c.require_immediate_range (2, 1, bits / 2); } }; -SHAPE (binary_rshift_narrow) +SHAPE (binary_rshift_narrow); /* <uT0:half>_t vfoo[_n_t0](<uT0:half>_t, <T0>_t, const int) @@ -1236,7 +1237,7 @@ struct binary_rshift_narrow_unsigned_def : public overloaded_base<0> } }; -SHAPE (binary_rshift_narrow_unsigned) +SHAPE (binary_rshift_narrow_unsigned); /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t) @@ -1276,7 +1277,7 @@ struct binary_widen_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_widen) +SHAPE (binary_widen); /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t) @@ -1325,7 +1326,7 @@ struct binary_widen_poly_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (binary_widen_poly) +SHAPE (binary_widen_poly); /* <T0:twice>_t vfoo[_n_t0](<T0>_t, const int) @@ -1376,7 +1377,7 @@ struct binary_widen_n_def : public overloaded_base<0> } }; -SHAPE (binary_widen_n) +SHAPE (binary_widen_n); /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t) <T0:twice>_t vfoo[_n_t0](<T0>_t, <S0>_t) @@ -1423,7 +1424,7 @@ struct binary_widen_opt_n_def : public overloaded_base<0> return r.finish_opt_n_resolution (last_arg, 0, type); } }; -SHAPE (binary_widen_opt_n) +SHAPE (binary_widen_opt_n); /* Shape for comparison operations that operate on uniform types. @@ -1450,7 +1451,7 @@ struct cmp_def : public overloaded_base<0> return r.resolve_uniform_opt_n (2); } }; -SHAPE (cmp) +SHAPE (cmp); /* <T0>xN_t vfoo[_t0](uint64_t, uint64_t) @@ -1466,7 +1467,7 @@ struct create_def : public nonoverloaded_base build_all (b, "v0,su64,su64", group, MODE_none, preserve_user_namespace); } }; -SHAPE (create) +SHAPE (create); /* <S0>_t vfoo[_t0](<T0>_t, const int) @@ -1507,7 +1508,7 @@ struct getq_lane_def : public overloaded_base<0> } }; -SHAPE (getq_lane) +SHAPE (getq_lane); /* <T0>[xN]_t vfoo_t0(). <T0>[xN]_t vfoo(<T0>_t). @@ -1556,7 +1557,7 @@ struct inherent_def : public overloaded_base<0> } }; -SHAPE (inherent) +SHAPE (inherent); /* <T0>_t vfoo[_t0](const <s0>_t *) @@ -1590,7 +1591,7 @@ struct load_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (load) +SHAPE (load); /* <T0>_t foo_t0 (const <X>_t *) @@ -1608,7 +1609,7 @@ struct load_ext_def : public nonoverloaded_base build_all (b, "t0,al", group, MODE_none, preserve_user_namespace); } }; -SHAPE (load_ext) +SHAPE (load_ext); /* Base class for load_ext_gather_offset and load_ext_gather_shifted_offset, which differ only in the units of the displacement. */ @@ -1665,7 +1666,7 @@ struct load_gather_base_def : public nonoverloaded_base return c.require_immediate_range_multiple (1, -bound, bound, multiple); } }; -SHAPE (load_gather_base) +SHAPE (load_gather_base); /* <T0>_t vfoo[_t0](<X>_t const *, <Y>_t) @@ -1706,7 +1707,7 @@ struct load_ext_gather_offset_def : public load_ext_gather return r.resolve_to (mode, type); } }; -SHAPE (load_ext_gather_offset) +SHAPE (load_ext_gather_offset); /* <T0>_t vfoo[_t0](<T0>_t) <T0>_t vfoo_n_t0(<sT0>_t) @@ -1755,7 +1756,7 @@ struct mvn_def : public overloaded_base<0> return r.finish_opt_n_resolution (last_arg, 0, type); } }; -SHAPE (mvn) +SHAPE (mvn); /* int32_t foo(int32_t, int32_t) @@ -1770,7 +1771,7 @@ struct scalar_s32_shift_def : public nonoverloaded_base build_all (b, "ss32,ss32,ss32", group, MODE_none, preserve_user_namespace); } }; -SHAPE (scalar_s32_shift) +SHAPE (scalar_s32_shift); /* int32_t foo(int32_t, const int) @@ -1793,7 +1794,7 @@ struct scalar_s32_shift_imm_def : public nonoverloaded_base return c.require_immediate_range (1, 1, 32); } }; -SHAPE (scalar_s32_shift_imm) +SHAPE (scalar_s32_shift_imm); /* uint32_t foo(uint32_t, int32_t) @@ -1808,7 +1809,7 @@ struct scalar_u32_shift_def : public nonoverloaded_base build_all (b, "su32,su32,ss32", group, MODE_none, preserve_user_namespace); } }; -SHAPE (scalar_u32_shift) +SHAPE (scalar_u32_shift); /* uint32_t foo(uint32_t, const int) @@ -1831,7 +1832,7 @@ struct scalar_u32_shift_imm_def : public nonoverloaded_base return c.require_immediate_range (1, 1, 32); } }; -SHAPE (scalar_u32_shift_imm) +SHAPE (scalar_u32_shift_imm); /* int64_t foo(int64_t, int32_t) @@ -1846,7 +1847,7 @@ struct scalar_s64_shift_def : public nonoverloaded_base build_all (b, "ss64,ss64,ss32", group, MODE_none, preserve_user_namespace); } }; -SHAPE (scalar_s64_shift) +SHAPE (scalar_s64_shift); /* int64_t foo(int64_t, const int) @@ -1869,7 +1870,7 @@ struct scalar_s64_shift_imm_def : public nonoverloaded_base return c.require_immediate_range (1, 1, 32); } }; -SHAPE (scalar_s64_shift_imm) +SHAPE (scalar_s64_shift_imm); /* uint64_t foo(uint64_t, int32_t) @@ -1884,7 +1885,7 @@ struct scalar_u64_shift_def : public nonoverloaded_base build_all (b, "su64,su64,ss32", group, MODE_none, preserve_user_namespace); } }; -SHAPE (scalar_u64_shift) +SHAPE (scalar_u64_shift); /* uint64_t foo(uint64_t, const int) @@ -1907,7 +1908,7 @@ struct scalar_u64_shift_imm_def : public nonoverloaded_base return c.require_immediate_range (1, 1, 32); } }; -SHAPE (scalar_u64_shift_imm) +SHAPE (scalar_u64_shift_imm); /* <T0>_t vfoo[_t0](<S0>_t, <T0>_t, const_int) @@ -1947,7 +1948,7 @@ struct setq_lane_def : public overloaded_base<0> return c.require_immediate_range (2, 0, num_lanes - 1); } }; -SHAPE (setq_lane) +SHAPE (setq_lane); /* void vfoo[_t0](<X>_t *, <T0>[xN]_t) @@ -1986,7 +1987,7 @@ struct store_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (store) +SHAPE (store); /* Base class for store_scatter_offset and store_scatter_shifted_offset, which differ only in the units of the displacement. Also used by @@ -2050,7 +2051,7 @@ struct store_scatter_offset_def : public store_scatter return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (store_scatter_offset) +SHAPE (store_scatter_offset); /* void vfoo[_t0](<Y>_t, const int, <T0>_t) @@ -2115,7 +2116,7 @@ struct store_scatter_base_def : public store_scatter return c.require_immediate_range_multiple (1, -bound, bound, multiple); } }; -SHAPE (store_scatter_base) +SHAPE (store_scatter_base); /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, <T0>_t) @@ -2141,7 +2142,7 @@ struct ternary_def : public overloaded_base<0> return r.resolve_uniform_opt_n (3); } }; -SHAPE (ternary) +SHAPE (ternary); /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, const int) @@ -2179,7 +2180,7 @@ struct ternary_lshift_def : public overloaded_base<0> return c.require_immediate_range (2, 0, bits - 1); } }; -SHAPE (ternary_lshift) +SHAPE (ternary_lshift); /* <T0>_t vfoo[_n_t0](<T0>_t, <T0>_t, <S0>_t) @@ -2206,7 +2207,7 @@ struct ternary_n_def : public overloaded_base<0> return r.resolve_uniform (2, 1); } }; -SHAPE (ternary_n) +SHAPE (ternary_n); /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, <T0>_t) <T0>_t vfoo[_n_t0](<T0>_t, <T0>_t, <S0>_t) @@ -2236,7 +2237,7 @@ struct ternary_opt_n_def : public overloaded_base<0> return r.resolve_uniform_opt_n (3); } }; -SHAPE (ternary_opt_n) +SHAPE (ternary_opt_n); /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, const int) @@ -2274,7 +2275,7 @@ struct ternary_rshift_def : public overloaded_base<0> return c.require_immediate_range (2, 1, bits); } }; -SHAPE (ternary_rshift) +SHAPE (ternary_rshift); /* <T0>_t vfoo[_t0](<T0>_t) @@ -2301,7 +2302,7 @@ struct unary_def : public overloaded_base<0> return r.resolve_unary (); } }; -SHAPE (unary) +SHAPE (unary); /* <S0:twice>_t vfoo[_<t0>](<T0>_t) @@ -2329,7 +2330,7 @@ struct unary_acc_def : public overloaded_base<0> return r.resolve_unary (); } }; -SHAPE (unary_acc) +SHAPE (unary_acc); /* <T0>_t foo_t0[_t1](<T1>_t) @@ -2357,7 +2358,7 @@ struct unary_convert_def : public overloaded_base<1> return r.resolve_unary (); } }; -SHAPE (unary_convert) +SHAPE (unary_convert); /* [u]int32_t vfoo[_<t0>](<T0>_t) @@ -2384,7 +2385,7 @@ struct unary_int32_def : public overloaded_base<0> return r.resolve_uniform (1); } }; -SHAPE (unary_int32) +SHAPE (unary_int32); /* [u]int32_t vfoo[_<t0>]([u]int32_t, <T0>_t) @@ -2425,7 +2426,7 @@ struct unary_int32_acc_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (unary_int32_acc) +SHAPE (unary_int32_acc); /* <T0>_t vfoo[_n]_t0(<S0>_t) @@ -2478,7 +2479,7 @@ struct unary_n_def : public overloaded_base<0> return r.resolve_unary_n (); } }; -SHAPE (unary_n) +SHAPE (unary_n); /* <T0:twice>_t vfoo[_t0](<T0>_t) @@ -2522,7 +2523,7 @@ struct unary_widen_def : public overloaded_base<0> return r.report_no_such_form (type); } }; -SHAPE (unary_widen) +SHAPE (unary_widen); /* <S0:twice>_t vfoo[_<t0>](<S0:twice>_t, <T0>_t) @@ -2556,7 +2557,7 @@ struct unary_widen_acc_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (unary_widen_acc) +SHAPE (unary_widen_acc); /* <T0>_t vfoo[_t0](T0, T0, uint32_t*) @@ -2592,7 +2593,7 @@ struct vadc_vsbc_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (vadc_vsbc) +SHAPE (vadc_vsbc); /* mve_pred16_t foo_t0(uint32_t) @@ -2608,7 +2609,7 @@ struct vctp_def : public nonoverloaded_base build_all (b, "p,su32", group, MODE_none, preserve_user_namespace); } }; -SHAPE (vctp) +SHAPE (vctp); /* <T0>_t foo_t0[_t1](<T1>_t) <T0>_t foo_t0_n[_t1](<T1>_t, const int) @@ -2708,7 +2709,7 @@ struct vcvt_def : public overloaded_base<0> return c.require_immediate_range (1, 1, bits); } }; -SHAPE (vcvt) +SHAPE (vcvt); /* float16x8_t foo_f16_f32(float16x8_t, float32x4_t) @@ -2725,7 +2726,7 @@ struct vcvt_f16_f32_def : public nonoverloaded_base build_all (b, "v0,v0,v1", group, MODE_none, preserve_user_namespace); } }; -SHAPE (vcvt_f16_f32) +SHAPE (vcvt_f16_f32); /* float32x4_t foo_f32_f16(float16x8_t) @@ -2743,7 +2744,7 @@ struct vcvt_f32_f16_def : public nonoverloaded_base build_all (b, "v0,v1", group, MODE_none, preserve_user_namespace); } }; -SHAPE (vcvt_f32_f16) +SHAPE (vcvt_f32_f16); /* <T0>_t foo_t0[_t1](<T1>_t) @@ -2802,7 +2803,7 @@ struct vcvtx_def : public overloaded_base<0> return r.report_no_such_form (from_type); } }; -SHAPE (vcvtx) +SHAPE (vcvtx); /* <T0>_t vfoo[_n]_t0(uint32_t, const int) <T0>_t vfoo[_wb]_t0(uint32_t *, const int) @@ -2887,7 +2888,7 @@ struct viddup_def : public overloaded_base<0> return c.require_immediate_one_of (1, 1, 2, 4, 8); } }; -SHAPE (viddup) +SHAPE (viddup); /* <T0>_t vfoo[_n]_t0(uint32_t, uint32_t, const int) <T0>_t vfoo[_wb]_t0(uint32_t *, uint32_t, const int) @@ -2975,7 +2976,7 @@ struct vidwdup_def : public overloaded_base<0> return c.require_immediate_one_of (2, 1, 2, 4, 8); } }; -SHAPE (vidwdup) +SHAPE (vidwdup); /* mve_pred16_t foo_t0(mve_pred16_t) @@ -2990,7 +2991,7 @@ struct vpnot_def : public nonoverloaded_base build_all (b, "p,p", group, MODE_none, preserve_user_namespace); } }; -SHAPE (vpnot) +SHAPE (vpnot); /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, mve_pred16_t) @@ -3029,7 +3030,7 @@ struct vpsel_def : public overloaded_base<0> return r.resolve_to (r.mode_suffix_id, type); } }; -SHAPE (vpsel) +SHAPE (vpsel); /* <T0>_t vfoo[_t0](T0, uint32_t* , const int) @@ -3073,7 +3074,7 @@ struct vshlc_def : public overloaded_base<0> return c.require_immediate_range (2, 1, 32); } }; -SHAPE (vshlc) +SHAPE (vshlc); } /* end namespace arm_mve */
