diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2012-12-02 13:20:44 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2012-12-02 13:20:44 +0000 |
| commit | 13cc256e404620c1de0cbcc4e43ce1e2dbbc4898 (patch) | |
| tree | 2732d02d7d51218d6eed98ac7fcfc5b8794896b5 /test/SemaCXX/warn-using-namespace-in-header.cpp | |
| parent | 657bc3d9848e3be92029b2416031340988cd0111 (diff) | |
Notes
Diffstat (limited to 'test/SemaCXX/warn-using-namespace-in-header.cpp')
| -rw-r--r-- | test/SemaCXX/warn-using-namespace-in-header.cpp | 80 |
1 files changed, 43 insertions, 37 deletions
diff --git a/test/SemaCXX/warn-using-namespace-in-header.cpp b/test/SemaCXX/warn-using-namespace-in-header.cpp index 72c25529b40f..f68b99893aae 100644 --- a/test/SemaCXX/warn-using-namespace-in-header.cpp +++ b/test/SemaCXX/warn-using-namespace-in-header.cpp @@ -1,54 +1,60 @@ // RUN: %clang_cc1 -fsyntax-only -Wheader-hygiene -verify %s -#include "warn-using-namespace-in-header.h" - -namespace dont_warn {} -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}} - - - - +#ifdef BE_THE_HEADER +namespace warn_in_header_in_global_context {} +using namespace warn_in_header_in_global_context; // expected-warning {{using namespace directive in global context in header}} +// While we want to error on the previous using directive, we don't when we are +// inside a namespace +namespace dont_warn_here { +using namespace warn_in_header_in_global_context; +} -// expected-warning {{using namespace directive in global context in header}} +// We should warn in toplevel extern contexts. +namespace warn_inside_linkage {} +extern "C++" { +using namespace warn_inside_linkage; // expected-warning {{using namespace directive in global context in header}} +} +// This is really silly, but we should warn on it: +extern "C++" { +extern "C" { +extern "C++" { +using namespace warn_inside_linkage; // expected-warning {{using namespace directive in global context in header}} +} +} +} +// 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; +} +namespace macronamespace {} +#define USING_MACRO using namespace macronamespace; +// |using namespace| through a macro should warn if the instantiation is in a +// header. +USING_MACRO // expected-warning {{using namespace directive in global context in header}} +#else +#define BE_THE_HEADER +#include __FILE__ - - - - - - - - - - - - - -// expected-warning {{using namespace directive in global context in header}} +namespace dont_warn {} +using namespace dont_warn; // |using namespace| through a macro shouldn't warn if the instantiation is in a // cc file. USING_MACRO + +#endif |
