[Universal parser] Fix -Wsuggest-attribute=format warnings

Under a configuration including `cppflags=-DUNIVERSAL_PARSER`, warnings listed below show in build time:

```
node.c:396:30: warning: initialization left-hand side might be a candidate for a format attribute [-Wsuggest-attribute=format]
  396 |     bug_report_func rb_bug = ast->node_buffer->config->bug;
      |                              ^~~
```

```
ruby_parser.c:655:21: warning: initialization left-hand side might be a candidate for a format attribute [-Wsuggest-attribute=format]
  655 |     .compile_warn = rb_compile_warn,
      |                     ^~~~~~~~~~~~~~~
ruby_parser.c:656:24: warning: initialization left-hand side might be a candidate for a format attribute [-Wsuggest-attribute=format]
  656 |     .compile_warning = rb_compile_warning,
      |                        ^~~~~~~~~~~~~~~~~~
ruby_parser.c:657:12: warning: initialization left-hand side might be a candidate for a format attribute [-Wsuggest-attribute=format]
  657 |     .bug = rb_bug,
      |            ^~~~~~
ruby_parser.c:658:14: warning: initialization left-hand side might be a candidate for a format attribute [-Wsuggest-attribute=format]
  658 |     .fatal = rb_fatal,
      |              ^~~~~~~~
```

To fix, this patch suggests adding `__attribute__((format(printf, n, m)))` to those function declarations.
This commit is contained in:
HASUMI Hitoshi 2024-03-15 22:14:57 +09:00 коммит произвёл GitHub
Родитель 1d91a1ad2d
Коммит 40ecad0ad7
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
2 изменённых файлов: 17 добавлений и 6 удалений

3
node.h
Просмотреть файл

@ -15,8 +15,7 @@
#include "rubyparser.h"
#include "ruby/backward/2/attributes.h"
typedef void (*bug_report_func)(const char *fmt, ...);
typedef void (*bug_report_func)(const char *fmt, ...) RUBYPARSER_ATTRIBUTE_FORMAT(1, 2);
typedef struct node_buffer_elem_struct {
struct node_buffer_elem_struct *next;
long len; /* Length of nodes */

Просмотреть файл

@ -34,6 +34,18 @@
#endif
#endif
#if defined(__GNUC__)
# if defined(__MINGW_PRINTF_FORMAT)
# define RUBYPARSER_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((format(__MINGW_PRINTF_FORMAT, string_index, argument_index)))
# else
# define RUBYPARSER_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((format(printf, string_index, argument_index)))
# endif
#elif defined(__clang__)
# define RUBYPARSER_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((__format__(__printf__, string_index, argument_index)))
#else
# define RUBYPARSER_ATTRIBUTE_FORMAT(string_index, argument_index)
#endif
/*
* Parser String
*/
@ -1403,10 +1415,10 @@ typedef struct rb_parser_config_struct {
int (*memcicmp)(const void *x, const void *y, long len);
/* Error */
void (*compile_warn)(const char *file, int line, const char *fmt, ...);
void (*compile_warning)(const char *file, int line, const char *fmt, ...);
void (*bug)(const char *fmt, ...);
void (*fatal)(const char *fmt, ...);
void (*compile_warn)(const char *file, int line, const char *fmt, ...) RUBYPARSER_ATTRIBUTE_FORMAT(3, 4);
void (*compile_warning)(const char *file, int line, const char *fmt, ...) RUBYPARSER_ATTRIBUTE_FORMAT(3, 4);
void (*bug)(const char *fmt, ...) RUBYPARSER_ATTRIBUTE_FORMAT(1, 2);
void (*fatal)(const char *fmt, ...) RUBYPARSER_ATTRIBUTE_FORMAT(1, 2);
VALUE (*verbose)(void);
int *(*errno_ptr)(void);