// RUN: %check_clang_tidy %s llvmlibc-implementation-in-namespace %t #define MACRO_A "defining macros outside namespace is valid" class ClassB; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: declaration must be enclosed within the 'LIBC_NAMESPACE' namespace struct StructC {}; // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: declaration must be enclosed within the 'LIBC_NAMESPACE' namespace char *VarD = MACRO_A; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: declaration must be enclosed within the 'LIBC_NAMESPACE' namespace typedef int typeE; // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: declaration must be enclosed within the 'LIBC_NAMESPACE' namespace void funcF() {} // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: declaration must be enclosed within the 'LIBC_NAMESPACE' namespace namespace outer_most { // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: the outermost namespace should be the 'LIBC_NAMESPACE' macro class A {}; } // Wrapped in anonymous namespace. namespace { // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: declaration must be enclosed within the 'LIBC_NAMESPACE' namespace class A {}; } namespace namespaceG { // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: the outermost namespace should be the 'LIBC_NAMESPACE' macro namespace __llvm_libc { namespace namespaceH { class ClassB; } // namespace namespaceH struct StructC {}; } // namespace __llvm_libc char *VarD = MACRO_A; typedef int typeE; void funcF() {} } // namespace namespaceG // Wrapped in macro namespace but with an incorrect name #define LIBC_NAMESPACE custom_namespace namespace LIBC_NAMESPACE { // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: the 'LIBC_NAMESPACE' macro should start with '__llvm_libc' namespace namespaceH { class ClassB; } // namespace namespaceH } // namespace LIBC_NAMESPACE // Wrapped in macro namespace with a valid name, LIBC_NAMESPACE starts with '__llvm_libc' #undef LIBC_NAMESPACE #define LIBC_NAMESPACE __llvm_libc_xyz namespace LIBC_NAMESPACE { namespace namespaceI { class ClassB; } // namespace namespaceI struct StructC {}; char *VarD = MACRO_A; typedef int typeE; void funcF() {} extern "C" void extern_funcJ() {} } // namespace LIBC_NAMESPACE