r194795 - Tests for core issue 216-223.
Richard Smith
richard-llvm at metafoo.co.uk
Fri Nov 15 00:55:01 PST 2013
Author: rsmith
Date: Fri Nov 15 02:55:01 2013
New Revision: 194795
URL: http://llvm.org/viewvc/llvm-project?rev=194795&view=rev
Log:
Tests for core issue 216-223.
Modified:
cfe/trunk/test/CXX/drs/dr2xx.cpp
cfe/trunk/www/cxx_dr_status.html
cfe/trunk/www/make_cxx_dr_status
Modified: cfe/trunk/test/CXX/drs/dr2xx.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/drs/dr2xx.cpp?rev=194795&r1=194794&r2=194795&view=diff
==============================================================================
--- cfe/trunk/test/CXX/drs/dr2xx.cpp (original)
+++ cfe/trunk/test/CXX/drs/dr2xx.cpp Fri Nov 15 02:55:01 2013
@@ -111,3 +111,109 @@ namespace dr215 { // dr215: yes
void foo() { (void)+X<Y>().n; }
};
}
+
+namespace dr216 { // dr216: no
+ // FIXME: Should reject this: 'f' has linkage but its type does not,
+ // and 'f' is odr-used but not defined in this TU.
+ typedef enum { e } *E;
+ void f(E);
+ void g(E e) { f(e); }
+
+ struct S {
+ // FIXME: Should reject this: 'f' has linkage but its type does not,
+ // and 'f' is odr-used but not defined in this TU.
+ typedef enum { e } *E;
+ void f(E);
+ };
+ void g(S s, S::E e) { s.f(e); }
+}
+
+namespace dr217 { // dr217: yes
+ template<typename T> struct S {
+ void f(int);
+ };
+ template<typename T> void S<T>::f(int = 0) {} // expected-error {{default arguments cannot be added}}
+}
+
+namespace dr218 { // dr218: yes
+ namespace A {
+ struct S {};
+ void f(S);
+ }
+ namespace B {
+ struct S {};
+ void f(S);
+ }
+
+ struct C {
+ int f;
+ void test1(A::S as) { f(as); } // expected-error {{called object type 'int'}}
+ void test2(A::S as) { void f(); f(as); } // expected-error {{too many arguments}} expected-note {{}}
+ void test3(A::S as) { using A::f; f(as); } // ok
+ void test4(A::S as) { using B::f; f(as); } // ok
+ void test5(A::S as) { int f; f(as); } // expected-error {{called object type 'int'}}
+ void test6(A::S as) { struct f {}; (void) f(as); } // expected-error {{no matching conversion}} expected-note +{{}}
+ };
+
+ namespace D {
+ struct S {};
+ struct X { void operator()(S); } f;
+ }
+ void testD(D::S ds) { f(ds); } // expected-error {{undeclared identifier}}
+
+ namespace E {
+ struct S {};
+ struct f { f(S); };
+ }
+ void testE(E::S es) { f(es); } // expected-error {{undeclared identifier}}
+
+ namespace F {
+ struct S {
+ template<typename T> friend void f(S, T) {}
+ };
+ }
+ void testF(F::S fs) { f(fs, 0); }
+
+ namespace G {
+ namespace X {
+ int f;
+ struct A {};
+ }
+ namespace Y {
+ template<typename T> void f(T);
+ struct B {};
+ }
+ template<typename A, typename B> struct C {};
+ }
+ void testG(G::C<G::X::A, G::Y::B> gc) { f(gc); }
+}
+
+// dr219: na
+// dr220: na
+
+namespace dr221 { // dr221: yes
+ struct A {
+ A &operator=(int&);
+ A &operator+=(int&);
+ static A &operator=(A&, double&); // expected-error {{cannot be a static member}}
+ static A &operator+=(A&, double&); // expected-error {{cannot be a static member}}
+ friend A &operator=(A&, char&); // expected-error {{must be a non-static member function}}
+ friend A &operator+=(A&, char&);
+ };
+ A &operator=(A&, float&); // expected-error {{must be a non-static member function}}
+ A &operator+=(A&, float&);
+
+ void test(A a, int n, char c, float f) {
+ a = n;
+ a += n;
+ a = c;
+ a += c;
+ a = f;
+ a += f;
+ }
+}
+
+// dr222 is a mystery -- it lists no changes to the standard, and yet was
+// apparently both voted into the WP and acted upon by the editor.
+
+// dr223: na
Modified: cfe/trunk/www/cxx_dr_status.html
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_dr_status.html?rev=194795&r1=194794&r2=194795&view=diff
==============================================================================
--- cfe/trunk/www/cxx_dr_status.html (original)
+++ cfe/trunk/www/cxx_dr_status.html Fri Nov 15 02:55:01 2013
@@ -1335,37 +1335,37 @@ accessible?</td>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#216">216</a></td>
<td>CD1</td>
<td>Linkage of nameless class-scope enumeration types</td>
- <td class="none" align="center">Unknown</td>
+ <td class="none" align="center">No</td>
</tr>
<tr>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#217">217</a></td>
<td>TC1</td>
<td>Default arguments for non-template member functions of class templates</td>
- <td class="none" align="center">Unknown</td>
+ <td class="full" align="center">Yes</td>
</tr>
<tr>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#218">218</a></td>
<td>CD1</td>
<td>Specification of Koenig lookup</td>
- <td class="none" align="center">Unknown</td>
+ <td class="full" align="center">Yes</td>
</tr>
<tr>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#219">219</a></td>
<td>NAD</td>
<td>Cannot defend against destructors that throw exceptions</td>
- <td class="none" align="center">Unknown</td>
+ <td class="na" align="center">N/A</td>
</tr>
<tr>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#220">220</a></td>
<td>CD1</td>
<td>All deallocation functions should be required not to throw</td>
- <td class="none" align="center">Unknown</td>
+ <td class="na" align="center">N/A</td>
</tr>
<tr>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#221">221</a></td>
<td>CD1</td>
<td>Must compound assignment operators be member functions?</td>
- <td class="none" align="center">Unknown</td>
+ <td class="full" align="center">Yes</td>
</tr>
<tr>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#222">222</a></td>
@@ -1377,7 +1377,7 @@ accessible?</td>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#223">223</a></td>
<td>DRWP</td>
<td>The meaning of deprecation</td>
- <td class="none" align="center">Unknown</td>
+ <td class="na" align="center">N/A</td>
</tr>
<tr>
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#224">224</a></td>
Modified: cfe/trunk/www/make_cxx_dr_status
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/www/make_cxx_dr_status?rev=194795&r1=194794&r2=194795&view=diff
==============================================================================
--- cfe/trunk/www/make_cxx_dr_status (original)
+++ cfe/trunk/www/make_cxx_dr_status Fri Nov 15 02:55:01 2013
@@ -131,6 +131,7 @@ def availability(issue):
assert False, 'unknown status %s for issue %s' % (status, dr.issue)
return (avail, avail_style)
+count = {}
for dr in drs:
if dr.status in ('concepts',):
# Yeah, cool story bro.
@@ -144,6 +145,8 @@ for dr in drs:
else:
row_style = ''
avail, avail_style = availability(dr.issue)
+ if not avail.startswith('Sup') and not avail.startswith('Dup'):
+ count[avail] = count.get(avail, 0) + 1
print >> out_file, '''\
<tr%s>
@@ -154,6 +157,9 @@ for dr in drs:
</tr>''' % (row_style, dr.url, dr.issue, dr.status, dr.title, avail_style,
avail)
+for status, num in count.items():
+ print "%s: %s" % (status, num)
+
print >> out_file, '''\
</table>
More information about the cfe-commits
mailing list