summaryrefslogtreecommitdiffstats
path: root/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp')
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp b/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp
new file mode 100644
index 0000000..560ec40
--- /dev/null
+++ b/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp
@@ -0,0 +1,124 @@
+//===-- main.cpp ------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstdarg>
+#include "ns.h"
+
+namespace {
+ typedef unsigned int my_uint_t;
+ int i; // Find the line number for anonymous namespace variable i.
+
+ int myanonfunc (int a)
+ {
+ return a + a;
+ }
+
+ int
+ variadic_sum (int arg_count...)
+ {
+ int sum = 0;
+ va_list args;
+ va_start(args, arg_count);
+
+ for (int i = 0; i < arg_count; i++)
+ sum += va_arg(args, int);
+
+ va_end(args);
+ return sum;
+ }
+}
+
+namespace A {
+ typedef unsigned int uint_t;
+ namespace B {
+ typedef unsigned int uint_t;
+ int j; // Find the line number for named namespace variable j.
+ int myfunc (int a);
+ int myfunc2(int a)
+ {
+ return a + 2;
+ }
+ float myfunc (float f)
+ {
+ return f - 2.0;
+ }
+ }
+}
+
+namespace Y
+{
+ typedef unsigned int uint_t;
+ using A::B::j;
+ int foo;
+}
+
+using A::B::j; // using declaration
+
+namespace Foo = A::B; // namespace alias
+
+using Foo::myfunc; // using declaration
+
+using namespace Foo; // using directive
+
+namespace A {
+ namespace B {
+ using namespace Y;
+ int k;
+ }
+}
+
+namespace ns1 {
+ int value = 100;
+}
+
+namespace ns2 {
+ int value = 200;
+}
+
+void test_namespace_scopes() {
+ do {
+ using namespace ns1;
+ printf("ns1::value = %d\n", value); // Evaluate ns1::value
+ } while(0);
+
+ do {
+ using namespace ns2;
+ printf("ns2::value = %d\n", value); // Evaluate ns2::value
+ } while(0);
+}
+
+int Foo::myfunc(int a)
+{
+ test_namespace_scopes();
+
+ ::my_uint_t anon_uint = 0;
+ A::uint_t a_uint = 1;
+ B::uint_t b_uint = 2;
+ Y::uint_t y_uint = 3;
+ i = 3;
+ j = 4;
+ printf("::i=%d\n", ::i);
+ printf("A::B::j=%d\n", A::B::j);
+ printf("variadic_sum=%d\n", variadic_sum(3, 1, 2, 3));
+ myanonfunc(3);
+ return myfunc2(3) + j + i + a + 2 + anon_uint + a_uint + b_uint + y_uint; // Set break point at this line.
+}
+
+int
+main (int argc, char const *argv[])
+{
+ test_lookup_at_global_scope();
+ test_lookup_at_file_scope();
+ A::test_lookup_at_ns_scope();
+ A::B::test_lookup_at_nested_ns_scope();
+ A::B::test_lookup_at_nested_ns_scope_after_using();
+ test_lookup_before_using_directive();
+ test_lookup_after_using_directive();
+ return Foo::myfunc(12);
+}
OpenPOWER on IntegriCloud