Félix Cloutier
cd95d7998c
[Clang][Sema] Fix attribute((format)) bug on non-variadic functions
...
The [initial implementation][1] of __attribute__((format)) on non-variadic functions
accidentally only accepted one data argument. This worked:
```c
__attribute__((format(printf, 1, 2)))
void f(const char *, int);
```
but this didn't:
```c
__attribute__((format(printf, 1, 2)))
void f(const char *, int, int);
```
This is due to an oversight in changing the way diagnostics are emitted for
`attribute((format))`, and to a coincidence in the handling of the variadic case. Test
cases only covered the case that worked by coincidence.
Before the previous change, using `__attribute__((format))` on a non-variadic function at
all was an error and clang bailed out. After that change, it only generates a GCC
compatibility warning. However, as execution falls through, it hits a second diagnostic
when the first data argument is neither 0 nor the last parameter of the function.
This change updates that check to allow any parameter after the format string to be the
first data argument when the function is non-variadic. When the function is variadic, it
still needs to be the index of the `...` "parameter". Attribute documentation is updated
to reflect the change and new tests are added to verify that it works with _two_ data
parameters.
[1]: https://reviews.llvm.org/D112579
Radar-Id: rdar://102069446
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D137603
2022-12-06 13:08:18 -08:00
..
2022-09-29 11:00:32 +01:00
2022-09-29 11:00:32 +01:00
2022-02-24 15:30:13 -05:00
2022-04-20 11:30:12 -04:00
2022-11-06 17:38:57 -08:00
2022-02-04 15:20:36 -05:00
2022-02-03 16:42:27 -05:00
2022-09-29 11:00:32 +01:00
2022-02-03 16:42:27 -05:00
2022-11-08 19:30:26 +00:00
2022-09-29 11:00:32 +01:00
2022-10-25 14:35:11 +01:00
2022-02-03 16:42:27 -05:00
2022-09-29 11:00:32 +01:00
2022-09-29 11:00:32 +01:00
2022-09-29 11:00:32 +01:00
2022-02-03 16:42:27 -05:00
2022-09-29 11:00:32 +01:00
2022-09-29 11:00:32 +01:00
2022-09-29 11:00:32 +01:00
2022-09-29 11:00:32 +01:00
2022-09-29 11:00:32 +01:00
2022-11-10 23:30:27 -08:00
2022-08-10 13:54:17 -04:00
2022-04-20 11:30:12 -04:00
2022-02-03 16:42:27 -05:00
2022-08-10 13:54:17 -04:00
2022-02-03 16:42:27 -05:00
2022-05-04 08:35:47 -04:00
2022-10-14 08:18:28 -04:00
2022-07-13 15:32:29 -04:00
2022-02-24 15:30:30 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-09-21 09:15:03 -07:00
2022-09-21 09:15:03 -07:00
2022-02-03 16:42:27 -05:00
2022-02-24 15:30:30 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-06-15 11:58:26 +02:00
2022-02-08 13:38:07 -05:00
2022-02-03 16:42:27 -05:00
2022-05-26 08:35:56 -04:00
2022-02-03 16:42:27 -05:00
2022-08-04 18:35:27 +01:00
2022-08-04 18:35:27 +01:00
2022-08-04 18:35:27 +01:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-09-29 11:00:32 +01:00
2022-02-03 16:42:27 -05:00
2022-08-10 13:54:17 -04:00
2022-02-03 16:42:27 -05:00
2022-09-29 11:00:32 +01:00
2022-03-23 09:40:43 -07:00
2022-10-25 14:35:11 +01:00
2022-02-03 16:42:27 -05:00
2022-09-29 11:00:32 +01:00
2022-02-03 16:42:27 -05:00
2022-10-27 10:50:04 -07:00
2022-02-03 16:42:27 -05:00
2022-09-12 22:40:54 +08:00
2022-07-08 22:36:05 +02:00
2022-07-13 14:58:23 +02:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-09-24 22:18:04 +08:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-17 15:33:50 -05:00
2022-03-30 07:12:49 -04:00
2022-02-03 16:42:27 -05:00
2022-07-27 01:56:25 +00:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-24 15:30:30 -05:00
2022-02-04 15:20:36 -05:00
2022-09-21 09:15:03 -07:00
2022-03-14 21:45:31 +01:00
2022-02-03 16:42:27 -05:00
2022-09-29 11:00:32 +01:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-05-13 20:34:57 +01:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-03-16 08:46:52 -07:00
2022-04-20 13:28:15 -04:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-03-21 13:39:43 -04:00
2022-02-03 16:42:27 -05:00
2022-06-15 11:58:26 +02:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-03-28 15:08:47 -07:00
2022-02-03 16:42:27 -05:00
2022-03-28 15:08:47 -07:00
2022-02-03 16:42:27 -05:00
2022-10-14 08:18:28 -04:00
2022-12-06 13:08:18 -08:00
2022-07-12 09:17:54 -07:00
2022-07-12 09:17:54 -07:00
2022-08-29 11:30:44 +03:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-07-29 19:07:07 +00:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-06-17 12:39:52 +01:00
2022-11-06 17:38:57 -08:00
2022-02-03 16:42:27 -05:00
2022-03-24 11:52:43 -04:00
2022-08-10 13:54:17 -04:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-03-14 23:40:17 +01:00
2022-03-14 23:40:17 +01:00
2022-02-11 15:51:08 +01:00
2022-02-11 15:51:08 +01:00
2022-02-24 15:30:30 -05:00
2022-02-03 16:42:27 -05:00
2022-02-24 15:30:30 -05:00
2022-02-17 13:54:09 -05:00
2022-06-15 11:58:26 +02:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-24 15:30:30 -05:00
2022-03-21 13:39:43 -04:00
2022-09-13 20:12:09 +00:00
2022-10-01 15:40:59 +01:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-24 15:30:30 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-05-26 07:42:13 -04:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-04-20 11:30:12 -04:00
2022-05-04 08:35:47 -04:00
2022-06-02 08:28:43 -04:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-05-04 08:35:47 -04:00
2022-02-24 15:30:30 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-08-10 13:54:17 -04:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-02-03 16:42:27 -05:00
2022-11-08 07:21:23 -05:00
2022-07-22 15:24:54 -04:00
2022-09-07 12:46:20 -04:00
2022-02-04 15:20:36 -05:00
2022-09-19 09:26:56 -07:00
2022-02-04 15:20:36 -05:00
2022-07-22 15:24:54 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-09-20 12:35:18 -04:00
2022-04-20 11:30:12 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-10-18 12:47:12 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-09-24 22:18:04 +08:00
2022-07-22 15:24:54 -04:00
2022-11-10 23:30:27 -08:00
2022-06-07 09:49:36 +00:00
2022-06-10 13:13:59 +00:00
2022-04-20 13:01:30 -07:00
2022-01-29 08:12:16 -05:00
2022-02-04 15:20:36 -05:00
2022-04-05 22:43:48 -04:00
2022-05-09 12:12:53 +01:00
2022-07-22 15:24:54 -04:00
2022-03-31 13:45:39 -04:00
2022-03-09 15:04:24 +01:00
2022-09-13 11:08:58 -04:00
2022-08-10 13:54:17 -04:00
2022-09-13 09:33:20 -04:00
2022-09-13 08:13:01 -04:00
2022-05-26 14:51:39 -04:00
2022-09-28 13:27:52 -04:00
2022-04-29 13:37:33 -04:00
2022-06-02 08:28:43 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-24 15:30:30 -05:00
2022-08-10 13:54:17 -04:00
2022-08-10 13:54:17 -04:00
2022-08-10 13:54:17 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-09-12 07:47:39 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-09-16 16:36:00 +02:00
2022-07-22 15:24:54 -04:00
2022-09-24 22:18:04 +08:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-10-07 21:31:38 +00:00
2022-10-10 16:06:23 +00:00
2022-02-04 15:20:36 -05:00
2022-08-31 09:23:45 -04:00
2022-02-24 15:30:30 -05:00
2022-06-30 17:21:37 +08:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-05-04 08:35:47 -04:00
2022-04-20 11:30:12 -04:00
2022-05-04 08:35:47 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-24 15:30:30 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-09-24 22:18:04 +08:00
2022-02-04 15:20:36 -05:00
2022-10-05 12:58:01 -07:00
2022-02-24 15:30:13 -05:00
2022-02-04 15:20:36 -05:00
2022-05-26 07:01:30 -07:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-05-09 10:16:19 -04:00
2022-02-04 15:20:36 -05:00
2022-05-09 10:16:19 -04:00
2022-08-27 15:18:36 -07:00
2022-09-12 22:40:54 +08:00
2022-04-05 04:58:19 -07:00
2022-09-24 22:18:04 +08:00
2022-02-04 15:20:36 -05:00
2022-03-16 11:10:32 +01:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-07-22 15:24:54 -04:00
2022-02-04 15:20:36 -05:00
2022-06-30 17:21:37 +08:00
2022-03-17 08:22:30 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-08-04 10:26:31 -07:00
2022-09-01 10:10:10 +08:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-09-05 10:54:18 +02:00
2022-09-01 10:10:10 +08:00
2022-02-04 15:20:36 -05:00
2022-09-29 12:16:13 +01:00
2022-03-24 18:06:10 -07:00
2022-03-10 13:19:53 -08:00
2022-07-22 15:24:54 -04:00
2022-07-22 15:24:54 -04:00
2022-06-06 07:17:35 -04:00
2022-05-05 18:39:13 -04:00
2022-11-02 08:00:25 -04:00
2022-05-31 11:13:08 -07:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-09-24 22:18:04 +08:00
2022-04-20 11:30:12 -04:00
2022-02-04 15:20:36 -05:00
2022-02-24 15:30:13 -05:00
2022-04-20 11:30:12 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-05-04 08:35:47 -04:00
2022-04-20 11:30:12 -04:00
2022-04-20 11:30:12 -04:00
2022-11-07 23:05:28 +00:00
2022-08-10 13:54:17 -04:00
2022-02-24 15:30:30 -05:00
2022-02-04 15:20:36 -05:00
2022-07-22 15:24:54 -04:00
2022-05-03 11:23:12 -07:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-08-10 13:54:17 -04:00
2022-02-04 15:20:36 -05:00
2022-10-20 11:56:49 -07:00
2022-11-15 12:07:03 -08:00
2022-02-04 15:20:36 -05:00
2022-05-04 08:35:47 -04:00
2022-05-04 08:35:47 -04:00
2022-05-26 08:35:56 -04:00
2022-05-26 08:35:56 -04:00
2022-12-06 11:02:27 +08:00
2022-11-04 10:21:38 +01:00
2022-11-04 10:21:38 +01:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-07-22 15:24:54 -04:00
2022-09-16 16:36:00 +02:00
2022-02-04 15:20:36 -05:00
2022-02-24 15:30:30 -05:00
2022-08-09 11:08:52 -04:00
2022-08-09 11:08:52 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-24 15:30:30 -05:00
2022-09-04 05:29:32 +00:00
2022-02-04 15:20:36 -05:00
2022-03-03 10:33:40 +01:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-06-15 11:58:26 +02:00
2022-02-04 15:20:36 -05:00
2022-10-04 13:01:01 -07:00
2022-02-04 15:20:36 -05:00
2022-08-10 13:54:17 -04:00
2022-10-24 08:38:21 -04:00
2022-02-24 15:30:30 -05:00
2022-02-04 15:20:36 -05:00
2022-09-16 16:36:00 +02:00
2022-10-14 10:06:02 -04:00
2022-10-14 10:06:02 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-06-15 11:58:26 +02:00
2022-09-15 12:10:54 -07:00
2022-02-04 15:20:36 -05:00
2022-08-10 13:54:17 -04:00
2022-02-04 15:20:36 -05:00
2022-03-22 13:15:13 -04:00
2022-06-03 10:10:37 -04:00
2022-06-03 10:10:37 -04:00
2022-05-31 21:51:15 -05:00
2022-05-31 21:51:15 -05:00
2022-02-03 16:42:27 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-06-29 06:45:59 -07:00
2022-06-29 06:45:59 -07:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-04-13 08:21:31 -04:00
2022-08-10 13:54:17 -04:00
2022-09-12 22:40:54 +08:00
2022-08-09 11:36:48 -04:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-05-04 08:35:47 -04:00
2022-09-29 12:16:13 +01:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-05-04 08:35:47 -04:00
2022-07-26 15:47:47 +08:00
2022-02-04 15:20:36 -05:00
2022-07-26 15:47:47 +08:00
2022-11-10 23:30:27 -08:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-04 15:20:36 -05:00
2022-02-24 15:30:30 -05:00
2022-02-07 09:25:01 -05:00
2022-08-10 10:32:43 +00:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-24 15:30:30 -05:00
2022-10-14 10:06:02 -04:00
2022-02-24 15:30:30 -05:00
2022-02-24 15:30:30 -05:00
2022-04-06 09:28:20 +08:00
2022-06-14 23:16:41 +02:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-06-02 14:41:18 -07:00
2022-09-16 16:36:00 +02:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-05-29 08:49:45 +09:00
2022-01-20 14:12:49 +00:00
2022-02-07 09:25:01 -05:00
2022-10-30 22:39:47 -07:00
2022-02-07 09:25:01 -05:00
2022-05-16 10:07:01 +08:00
2022-02-24 15:30:30 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-05-24 17:49:44 +00:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-05-04 08:35:47 -04:00
2022-07-14 07:50:58 +02:00
2022-09-22 14:04:35 +02:00
2022-10-24 12:38:32 -07:00
2022-02-07 09:25:01 -05:00
2022-06-02 20:57:31 +00:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-24 15:30:13 -05:00
2022-04-20 11:30:12 -04:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-08-10 09:00:47 +08:00
2022-06-15 11:58:26 +02:00
2022-05-04 13:25:21 -04:00
2022-04-08 16:19:58 -04:00
2022-04-20 11:30:12 -04:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-09-28 14:23:28 -04:00
2022-02-07 09:25:01 -05:00
2022-10-26 20:38:37 +00:00
2022-10-26 20:38:37 +00:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-10-06 10:08:23 -04:00
2022-02-07 09:25:01 -05:00
2022-09-01 13:17:42 +01:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-15 09:46:42 +08:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-06-24 09:49:07 -07:00
2022-06-02 08:28:43 -04:00
2022-01-20 19:56:34 +01:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-05-26 08:35:56 -04:00
2022-05-13 10:23:47 -04:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-03-24 10:34:44 +01:00
2022-03-24 10:34:44 +01:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-05-05 12:12:30 -04:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-06-01 13:30:29 -07:00
2022-02-23 15:00:18 -08:00
2022-02-07 09:25:01 -05:00
2022-02-23 15:00:18 -08:00
2022-02-07 09:25:01 -05:00
2022-02-07 09:25:01 -05:00
2022-02-24 15:30:13 -05:00