Re: bug formatting a .h function extern declaration with attribute macros
Simon Josefsson via Bug reports for the GNU m4 macro processor <[email protected]> Fri, 04 Apr 2025 17:48:25 +0200
| Newsgroups | gmane.comp.gnu.m4.bugs,gmane.comp.gnu.indent.bugs |
|---|---|
| Message-ID | <[email protected]> |
--=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Eric Blake <[email protected]> writes: > On Fri, Apr 04, 2025 at 02:16:03PM +0200, Simon Josefsson wrote: >> Eric Blake <[email protected]> writes: >>=20 >> >> # define G_GNUC_IDN2_ATTRIBUTE_PURE __attribute__ ((pure)) >> ... >> >> extern _IDN2_API const char *idn2_check_version (const char *req_ve= rsion) >> >> G_GNUC_IDN2_ATTRIBUTE_PURE; >> > >> > Figuring out how to write the __attribute__-hiding macros conditional >> > on compiler version wasn't the issue (the m4 definitions for >> > ATTRIBUTE_PURE come from gnulib, and are under a similar ladder of >> > #if); rather, it's that an all-caps macro that takes no arguments and >> > appears after the func(params) but before the trailing ; of an extern >> > function declaration confuse indent. >>=20 >> By formatting things like the above, without any '(())', then indent is >> happy. I run indent on the idn2.h and it looks like the above without >> any INDENT-OFF. If I included the '(())' part, then just like you I had >> issues getting indent to behave. The conditional part is unrelated to >> the indent issue, but I can see that my recommendation was unclear. > > ATTRIBUTE_COLD wasn't necessarily the problem. It was > "ATTRIBUTE_FORMAT ((__printf__, 3, 4))". And that one needs > parameters, since it applies to a varargs that is not at a fixed > location. Would then the following not work? The point is to move the (()) out from the function declaration. #define M4_ATTRIBUTE_FORMAT_PRINTF34 __attribute__ ((__format__ (__printf__= , 3, 4))) extern void m4_error (int, int, const char *, ...) M4_ATTRIBUTE_FORMAT_PRINTF34; /Simon --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQNoBAEWCAMQFiEEo8ychwudMQq61M8vUXIrCP5HRaIFAmfv/0oUHHNpbW9uQGpv c2Vmc3Nvbi5vcmfCHCYAmDMEXJLOtBYJKwYBBAHaRw8BAQdACIcrZIvhrxDBkK9f V+QlTmXxo2naObDuGtw58YaxlOu0JVNpbW9uIEpvc2Vmc3NvbiA8c2ltb25Aam9z ZWZzc29uLm9yZz6IlgQTFggAPgIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgBYh BLHSvRN1vst4TPT4xNc89jjFPAa+BQJn0XQkBQkNZGbwAAoJENc89jjFPAa+BtIA /iR73CfBurG9y8pASh3cbGOMHpDZfMAtosu6jbpO69GHAP4p7l57d+iVty2VQMsx +3TCSAvZkpr4P/FuTzZ8JZe8BrgzBFySz4EWCSsGAQQB2kcPAQEHQOxTCIOaeXAx I2hIX4HK9bQTpNVei708oNr1Klm8qCGKiPUEGBYIACYCGwIWIQSx0r0Tdb7LeEz0 +MTXPPY4xTwGvgUCZ9F0SgUJDWRmSQCBdiAEGRYIAB0WIQSjzJyHC50xCrrUzy9R cisI/kdFogUCXJLPgQAKCRBRcisI/kdFoqdMAQCgH45aseZgIrwKOvUOA9QfsmeE 8GZHYNuFHmM9FEQS6AD6A4x5aYvoY6lo98pgtw2HPDhmcCXFItjXCrV4A0GmJA4J ENc89jjFPAa+wUUBAO64fbZek6FPlRK0DrlWsrjCXuLi6PUxyzCAY6lG2nhUAQC6 qobB9mkZlZ0qihy1x4JRtflqFcqqT9n7iUZkCDIiDbg4BFySz2oSCisGAQQBl1UB BQEBB0AxlRumDW6nZY7A+VCfek9VpEx6PJmdJyYPt3lNHMd6HAMBCAeIfgQYFggA JgIbDBYhBLHSvRN1vst4TPT4xNc89jjFPAa+BQJn0XTSBQkNZGboAAoJENc89jjF PAa+0M0BAPPRq73kLnHYNDMniVBOzUdi2XeF32idjEWWfjvyIJUOAP4wZ+ALxIeh is3Uw2BzGZE6ttXQ2Q+DeCJO3TPpIqaXDAAKCRBRcisI/kdFoqV4AQDbIUn29ir4 igV+tR5aorTtYNraqdb9Tk1PhmLlMkERpAD8D6tAGPD/X9bM83a55BiiOykXk+ur W+E6Gck3cyRwBA8= =1frX -----END PGP SIGNATURE----- --=-=-=--