From 9fd42e0e67701795e3b9017084e36298158ef39b Mon Sep 17 00:00:00 2001 From: Marvin Greenberg Date: Thu, 30 Jan 2014 16:18:21 -0500 Subject: [PATCH] Work around clang bugs with symbol resolution --- Examples/test-suite/nested_scope.i | 12 +++- ..._using_directive_and_declaration_forward.i | 58 ++++++++++++++++++ .../using_directive_and_declaration_forward.i | 60 +++++++++++++++++++ 3 files changed, 129 insertions(+), 1 deletion(-) diff --git a/Examples/test-suite/nested_scope.i b/Examples/test-suite/nested_scope.i index 358dbbb61..04945a7b6 100644 --- a/Examples/test-suite/nested_scope.i +++ b/Examples/test-suite/nested_scope.i @@ -3,12 +3,22 @@ %inline %{ namespace ns { struct Global { +#ifdef __clang__ + struct Outer { + struct Nested; + struct Nested { + int data; + }; + }; + struct Outer::Nested instance; +#else struct Outer { struct Nested; }; struct Outer::Nested { int data; } instance; +#endif }; } -%} \ No newline at end of file +%} diff --git a/Examples/test-suite/template_using_directive_and_declaration_forward.i b/Examples/test-suite/template_using_directive_and_declaration_forward.i index a5a7fbf31..dcc1d6ab4 100644 --- a/Examples/test-suite/template_using_directive_and_declaration_forward.i +++ b/Examples/test-suite/template_using_directive_and_declaration_forward.i @@ -9,7 +9,15 @@ namespace Outer1 { } using namespace Outer1::Space1; using Outer1::Space1::Thing1; +#ifdef __clang__ +namespace Outer1 { + namespace Space1 { + template class Thing1 {}; + } +} +#else template class Thing1 {}; +#endif void useit1(Thing1 t) {} void useit1a(Outer1::Space1::Thing1 t) {} void useit1b(::Outer1::Space1::Thing1 t) {} @@ -25,7 +33,15 @@ namespace Outer2 { } using namespace Outer2; using Space2::Thing2; +#ifdef __clang__ +namespace Outer2 { + namespace Space2 { + template class Thing2 {}; + } +} +#else template class Thing2 {}; +#endif void useit2(Thing2 t) {} void useit2a(Outer2::Space2::Thing2 t) {} void useit2b(::Outer2::Space2::Thing2 t) {} @@ -45,7 +61,17 @@ namespace Outer3 { using namespace Outer3; using namespace Space3; using Middle3::Thing3; +#ifdef __clang__ +namespace Outer3 { + namespace Space3 { + namespace Middle3 { + template class Thing3 {}; + } + } +} +#else template class Thing3 {}; +#endif void useit3(Thing3 t) {} void useit3a(Outer3::Space3::Middle3::Thing3 t) {} void useit3b(::Outer3::Space3::Middle3::Thing3 t) {} @@ -66,7 +92,17 @@ namespace Outer4 { } using namespace Outer4::Space4; using Middle4::Thing4; +#ifdef __clang__ +namespace Outer4 { + namespace Space4 { + namespace Middle4 { + template class Thing4 {}; + } + } +} +#else template class Thing4 {}; +#endif void useit4(Thing4 t) {} void useit4a(Outer4::Space4::Middle4::Thing4 t) {} void useit4b(::Outer4::Space4::Middle4::Thing4 t) {} @@ -90,7 +126,19 @@ namespace Outer5 { using namespace ::Outer5::Space5; using namespace Middle5; using More5::Thing5; +#ifdef __clang__ +namespace Outer5 { + namespace Space5 { + namespace Middle5 { + namespace More5 { + template class Thing5 {}; + } + } + } +} +#else template class Thing5 {}; +#endif void useit5(Thing5 t) {} void useit5a(Outer5::Space5::Middle5::More5::Thing5 t) {} void useit5b(::Outer5::Space5::Middle5::More5::Thing5 t) {} @@ -109,7 +157,17 @@ namespace Outer7 { } } using namespace Outer7::Space7; +#ifdef __clang__ +namespace Outer7 { + namespace Space7 { + namespace Middle7 { + template class Thing7 {}; + } + } +} +#else template class Middle7::Thing7 {}; +#endif using Middle7::Thing7; void useit7(Thing7 t) {} void useit7a(Outer7::Space7::Middle7::Thing7 t) {} diff --git a/Examples/test-suite/using_directive_and_declaration_forward.i b/Examples/test-suite/using_directive_and_declaration_forward.i index 238b3b77f..1f219e671 100644 --- a/Examples/test-suite/using_directive_and_declaration_forward.i +++ b/Examples/test-suite/using_directive_and_declaration_forward.i @@ -9,7 +9,15 @@ namespace Outer1 { } using namespace Outer1::Space1; using Outer1::Space1::Thing1; +#ifdef __clang__ +namespace Outer1 { + namespace Space1 { + class Thing1 {}; + } +} +#else class Thing1 {}; +#endif void useit1(Thing1 t) {} void useit1a(Outer1::Space1::Thing1 t) {} void useit1b(::Outer1::Space1::Thing1 t) {} @@ -25,7 +33,17 @@ namespace Outer2 { } using namespace Outer2; using Space2::Thing2; +using namespace Outer1::Space1; +using Outer1::Space1::Thing1; +#ifdef __clang__ +namespace Outer2 { + namespace Space2 { + class Thing2 {}; + } +} +#else class Thing2 {}; +#endif void useit2(Thing2 t) {} void useit2a(Outer2::Space2::Thing2 t) {} void useit2b(::Outer2::Space2::Thing2 t) {} @@ -45,7 +63,17 @@ namespace Outer3 { using namespace Outer3; using namespace Space3; using Middle3::Thing3; +#ifdef __clang__ +namespace Outer3 { + namespace Space3 { + namespace Middle3 { + class Thing3 {}; + } + } +} +#else class Thing3 {}; +#endif void useit3(Thing3 t) {} void useit3a(Outer3::Space3::Middle3::Thing3 t) {} void useit3b(::Outer3::Space3::Middle3::Thing3 t) {} @@ -66,7 +94,17 @@ namespace Outer4 { } using namespace Outer4::Space4; using Middle4::Thing4; +#ifdef __clang__ +namespace Outer4 { + namespace Space4 { + namespace Middle4 { + class Thing4 {}; + } + } +} +#else class Thing4 {}; +#endif void useit4(Thing4 t) {} void useit4a(Outer4::Space4::Middle4::Thing4 t) {} void useit4b(::Outer4::Space4::Middle4::Thing4 t) {} @@ -90,7 +128,19 @@ namespace Outer5 { using namespace ::Outer5::Space5; using namespace Middle5; using More5::Thing5; +#ifdef __clang__ +namespace Outer5 { + namespace Space5 { + namespace Middle5 { + namespace More5 { + class Thing5 {}; + } + } + } +} +#else class Thing5 {}; +#endif void useit5(Thing5 t) {} void useit5a(Outer5::Space5::Middle5::More5::Thing5 t) {} void useit5b(::Outer5::Space5::Middle5::More5::Thing5 t) {} @@ -109,7 +159,17 @@ namespace Outer7 { } } using namespace Outer7::Space7; +#ifdef __clang__ +namespace Outer7 { + namespace Space7 { + namespace Middle7 { + class Thing7 {}; + } + } +} +#else class Middle7::Thing7 {}; +#endif using Middle7::Thing7; void useit7(Thing7 t) {} void useit7a(Outer7::Space7::Middle7::Thing7 t) {}