aboutsummaryrefslogtreecommitdiff
path: root/test/CXX/class/class.nest/p3.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2010-02-21 07:08:09 +0000
committerChandler Carruth <chandlerc@gmail.com>2010-02-21 07:08:09 +0000
commit8761d680eaa7386e03f51286f4b84a1ffe575e2e (patch)
tree9ef5c9e8fa5f0dcf9e251600d3a429aa176ad355 /test/CXX/class/class.nest/p3.cpp
parent48108fdb9c3bcffe5bccd88a1a91353a4df71629 (diff)
Make Decl::isOutOfLine() virtual, and use that to determine when definitions
are for out of line declarations more easily. This simplifies the logic and handles the case of out-of-line class definitions correctly. Fixes PR6107. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96729 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX/class/class.nest/p3.cpp')
-rw-r--r--test/CXX/class/class.nest/p3.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/CXX/class/class.nest/p3.cpp b/test/CXX/class/class.nest/p3.cpp
new file mode 100644
index 0000000000..c4c4ca7e09
--- /dev/null
+++ b/test/CXX/class/class.nest/p3.cpp
@@ -0,0 +1,25 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+// C++0x [class.nest] p3:
+// If class X is defined in a namespace scope, a nested class Y may be
+// declared in class X and later defined in the definition of class X or be
+// later defined in a namespace scope enclosing the definition of class X.
+
+namespace example {
+ class E {
+ class I1;
+ class I2;
+ class I1 { };
+ };
+ class E::I2 { };
+}
+
+// Don't insert out-of-line inner class definitions into the namespace scope.
+namespace PR6107 {
+ struct S1 { };
+ struct S2 {
+ struct S1;
+ };
+ struct S2::S1 { };
+ S1 s1;
+}