summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/warn-using-namespace-in-header.cpp
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2012-11-05 22:49:03 +0000
committerNico Weber <nicolasweber@gmx.de>2012-11-05 22:49:03 +0000
commit2134387764048c9d7db6d26097d00fd5663b8705 (patch)
treea1084bb887ba07c1bb04dba2e95b34e43a0c5370 /clang/test/SemaCXX/warn-using-namespace-in-header.cpp
parent505d68ffb846681f7d9aaf531a0b86a08baca6a8 (diff)
downloadbcm5719-llvm-2134387764048c9d7db6d26097d00fd5663b8705.tar.gz
bcm5719-llvm-2134387764048c9d7db6d26097d00fd5663b8705.zip
Use Richard's BE_THE_HEADER trick to simplify a test. No intended behavior change.
llvm-svn: 167417
Diffstat (limited to 'clang/test/SemaCXX/warn-using-namespace-in-header.cpp')
-rw-r--r--clang/test/SemaCXX/warn-using-namespace-in-header.cpp98
1 files changed, 53 insertions, 45 deletions
diff --git a/clang/test/SemaCXX/warn-using-namespace-in-header.cpp b/clang/test/SemaCXX/warn-using-namespace-in-header.cpp
index 72c25529b40..d20c6ff67b8 100644
--- a/clang/test/SemaCXX/warn-using-namespace-in-header.cpp
+++ b/clang/test/SemaCXX/warn-using-namespace-in-header.cpp
@@ -1,54 +1,62 @@
// RUN: %clang_cc1 -fsyntax-only -Wheader-hygiene -verify %s
-#include "warn-using-namespace-in-header.h"
+#ifdef BE_THE_HEADER
+// Lots of vertical space to make the error line match up with the line of the
+// expected line in the source file.
+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;
+}
+
+// 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__
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}}
-
-
-
-
-
-
-// expected-warning {{using namespace directive in global context in header}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// expected-warning {{using namespace directive in global context in header}}
-
// |using namespace| through a macro shouldn't warn if the instantiation is in a
// cc file.
USING_MACRO
+
+#endif
OpenPOWER on IntegriCloud