Per comments on PR12350, move DR244 back from 'done' to 'partial' and add tests showing what we get wrong.

llvm-svn: 220009
This commit is contained in:
Richard Smith 2014-10-17 01:03:17 +00:00
parent 9e40430102
commit 0680d8aa68
2 changed files with 24 additions and 2 deletions

View File

@ -467,7 +467,7 @@ namespace dr243 { // dr243: yes
A a2 = b; // expected-error {{ambiguous}}
}
namespace dr244 { // dr244: 3.5
namespace dr244 { // dr244: partial
struct B {}; struct D : B {}; // expected-note {{here}}
D D_object;
@ -485,6 +485,28 @@ namespace dr244 { // dr244: 3.5
B_ptr->dr244::~B(); // expected-error {{refers to a member in namespace}}
B_ptr->dr244::~B_alias(); // expected-error {{refers to a member in namespace}}
}
namespace N {
template<typename T> struct E {};
typedef E<int> F;
}
void g(N::F f) {
typedef N::F G;
f.~G();
f.G::~E();
f.G::~F(); // expected-error {{expected the class name after '~' to name a destructor}}
f.G::~G();
// This is technically ill-formed; E is looked up in 'N::' and names the
// class template, not the injected-class-name of the class. But that's
// probably a bug in the standard.
f.N::F::~E();
// This is valid; we look up the second F in the same scope in which we
// found the first one, that is, 'N::'.
f.N::F::~F(); // FIXME: expected-error {{expected the class name after '~' to name a destructor}}
// This is technically ill-formed; G is looked up in 'N::' and is not found;
// as above, this is probably a bug in the standard.
f.N::F::~G();
}
}
namespace dr245 { // dr245: yes

View File

@ -1504,7 +1504,7 @@ accessible?</td>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#244">244</a></td>
<td>CD1</td>
<td>Destructor lookup</td>
<td class="full" align="center">Clang 3.5</td>
<td class="partial" align="center">Partial</td>
</tr>
<tr id="245">
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#245">245</a></td>