// RUN: %clang_cc1 -std=c++20 -Wno-all -Wunsafe-buffer-usage \ // RUN: -verify %s // This example uncovered a bug in UnsafeBufferUsage.cpp, where the // code assumed that a CXXMethodDecl always have an identifier. int printf( const char* format, char *); // <-- Fake decl of `printf`; to reproduce the bug, this example needs an implicit cast within a printf call. namespace std { // fake std namespace; to reproduce the bug, a CXXConversionDecl needs to be in std namespace. class X { char * p; public: operator char*() {return p;} }; class Y { public: X x; }; } void test(std::Y &y) { // Here `y.x` involves an implicit cast and calls the overloaded cast operator, which has no identifier: printf("%s", y.x); // expected-warning{{function 'printf' is unsafe}} expected-note{{}} }