================
@@ -11,13 +11,16 @@ struct S {
   // the format argument is argument 2 here.
   void g(const char*, ...) __attribute__((format(printf, 2, 3)));
   const char* g2(const char*) __attribute__((format_arg(2)));
+  void g3(this S&, const char *, ...) __attribute__((format(printf, 2, 3)));
 
   void h(const char*, ...) __attribute__((format(printf, 1, 4))); // \
       expected-error{{implicit this argument as the format string}}
   void h2(const char*, ...) __attribute__((format(printf, 2, 1))); // \
       expected-error{{out of bounds}}
   const char* h3(const char*) __attribute__((format_arg(1))); // \
       expected-error{{invalid for the implicit this argument}}
+  void h4(this S&, const char *, ...) __attribute__((format(printf, 1, 3))); 
// \
+      expected-error {{format argument not a string type}}
----------------
Sirraide wrote:

Can you add this as a test to make sure we actually emit the diagnostics 
correctly?
```c++
struct S {
    __attribute__((format(printf, 1, 2))) void f(this const char* s, ...);
    consteval operator const char*() const { return "%f"; }
};

void f() {
    S().f(4); // Should warn about us passing an 'int' instead of a 'double'.
}
```

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

Reply via email to