https://github.com/apple-fcloutier requested changes to this pull request.

Thanks for the format_matches support (and reviewing again, I now see that 
ReleaseNotes.rst was updated very early on). The last bits that I'm still 
tracking:

1. -Wmissing-format-attribute should be a subgroup of -Wformat-nonliteral 
(should have a test that with both enabled, you only get 
-Wmissing-format-attribute). We should have a test for it as well.
2. We should not add the implicit attribute if 
diag::warn_missing_format_attribute is ignored, since it would create 
downstream diagnostics that cannot be disabled in any reasonable way.

I expect these are the last changes I'll request, everything else looks good.

----

Example for point 1:

```c
// clang -fsyntax-only -Wformat-nonliteral -Wmissing-format-attribute test.c
#include <stdarg.h>

__attribute__((format(printf, 1, 0)))
int vprintf(const char *, va_list);

void foo(const char *fmt, ...) {
        va_list ap;
        va_start(ap, fmt);
        vprintf(fmt, ap);
        // warning: diagnostic behavior may be improved by adding the 
'format(printf, 1, 2)' attribute to the declaration of 'foo' 
[-Wmissing-format-attribute]
        // warning: format string is not a string literal [-Wformat-nonliteral]
}
```

The expected result is that we have just the -Wmissing-format-attribute since 
they are both complaining about the same thing but -Wmissing-format-attribute 
knows how to fix it. Enabling -Wformat-nonliteral should enable 
-Wmissing-format-attribute as well since it is now the better diagnostic for 
that situation.

---

Example for point 2:

```c
// clang -fsyntax-only -Wformat
#include <stdarg.h>

__attribute__((format(printf, 1, 0)))
int vprintf(const char *, va_list);

void foo(const char *fmt, ...) {
        va_list ap;
        va_start(ap, fmt);
        vprintf(fmt, ap);
}

void bar(void) {
        foo("%g\n", 123);
        // warning: format specifies type 'double' but the argument has type 
'int' [-Wformat]
}
```

`foo` is not attributed in source and there is no clear explanation for what's 
going on; if there's ever a false positive, there is no way to prevent clang 
from adding the format attribute implicitly to `foo`. The expected result is 
that if -Wmissing-format-attribute is disabled, then we should not implicitly 
add the format attribute.

https://github.com/llvm/llvm-project/pull/166738
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to