diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/warn-using-namespace-in-header.cpp | 18 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-using-namespace-in-header.h | 27 |
2 files changed, 45 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/warn-using-namespace-in-header.cpp b/clang/test/SemaCXX/warn-using-namespace-in-header.cpp index 393e097df59..e040ca74cbf 100644 --- a/clang/test/SemaCXX/warn-using-namespace-in-header.cpp +++ b/clang/test/SemaCXX/warn-using-namespace-in-header.cpp @@ -7,3 +7,21 @@ using namespace dont_warn; // Warning is actually in the header but only the cpp file gets scanned. // expected-warning {{using namespace directive in global context in header}} + + + + + + + + + +// Warn inside linkage specs too. +// expected-warning {{using namespace directive in global context in header}} + + + + + + +// expected-warning {{using namespace directive in global context in header}} diff --git a/clang/test/SemaCXX/warn-using-namespace-in-header.h b/clang/test/SemaCXX/warn-using-namespace-in-header.h index 677c4ac51ae..57bb5d91be4 100644 --- a/clang/test/SemaCXX/warn-using-namespace-in-header.h +++ b/clang/test/SemaCXX/warn-using-namespace-in-header.h @@ -13,3 +13,30 @@ using namespace warn_in_header_in_global_context; namespace dont_warn_here { using namespace warn_in_header_in_global_context; } + +// We should warn in toplevel extern contexts. +namespace warn_inside_linkage {} +extern "C++" { +using namespace warn_inside_linkage; +} + +// This is really silly, but we should warn on it: +extern "C++" { +extern "C" { +extern "C++" { +using namespace warn_inside_linkage; +} +} +} + +// But we shouldn't warn in extern contexts inside namespaces. +namespace dont_warn_here { +extern "C++" { +using namespace warn_in_header_in_global_context; +} +} + +// We also shouldn't warn in case of functions. +inline void foo() { + using namespace warn_in_header_in_global_context; +} |