r194989 - Tests for core issues 251-270.

Richard Smith richard-llvm at metafoo.co.uk
Sun Nov 17 21:24:04 PST 2013


Author: rsmith
Date: Sun Nov 17 23:24:03 2013
New Revision: 194989

URL: http://llvm.org/viewvc/llvm-project?rev=194989&view=rev
Log:
Tests for core issues 251-270.

Modified:
    cfe/trunk/test/CXX/drs/dr2xx.cpp
    cfe/trunk/www/cxx_dr_status.html

Modified: cfe/trunk/test/CXX/drs/dr2xx.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/drs/dr2xx.cpp?rev=194989&r1=194988&r2=194989&view=diff
==============================================================================
--- cfe/trunk/test/CXX/drs/dr2xx.cpp (original)
+++ cfe/trunk/test/CXX/drs/dr2xx.cpp Sun Nov 17 23:24:03 2013
@@ -528,3 +528,196 @@ namespace dr250 { // dr250: yes
   template<int I = 3> void g(double x[]); // expected-error 0-1{{extension}}
   FPtr gp = &g<>;
 }
+
+namespace dr252 { // dr252: yes
+  struct A {
+    void operator delete(void*); // expected-note {{found}}
+  };
+  struct B {
+    void operator delete(void*); // expected-note {{found}}
+  };
+  struct C : A, B {
+    virtual ~C();
+  };
+  C::~C() {} // expected-error {{'operator delete' found in multiple base classes}}
+
+  struct D {
+    void operator delete(void*, int); // expected-note {{here}}
+    virtual ~D();
+  };
+  D::~D() {} // expected-error {{no suitable member 'operator delete'}}
+
+  struct E {
+    void operator delete(void*, int);
+    void operator delete(void*) = delete; // expected-error 0-1{{extension}} expected-note {{here}}
+    virtual ~E();
+  };
+  E::~E() {} // expected-error {{deleted}}
+
+  struct F {
+    // If both functions are available, the first one is a placement delete.
+    void operator delete(void*, __SIZE_TYPE__);
+    void operator delete(void*) = delete; // expected-error 0-1{{extension}} expected-note {{here}}
+    virtual ~F();
+  };
+  F::~F() {} // expected-error {{deleted}}
+
+  struct G {
+    void operator delete(void*, __SIZE_TYPE__);
+    virtual ~G();
+  };
+  G::~G() {}
+}
+
+namespace dr254 { // dr254: yes
+  template<typename T> struct A {
+    typedef typename T::type type; // ok even if this is a typedef-name, because
+                                   // it's not an elaborated-type-specifier
+    typedef struct T::type foo; // expected-error {{elaborated type refers to a typedef}}
+  };
+  struct B { struct type {}; };
+  struct C { typedef struct {} type; }; // expected-note {{here}}
+  A<B>::type n;
+  A<C>::type n; // expected-note {{instantiation of}}
+}
+
+// dr256: dup 624
+
+namespace dr257 { // dr257: yes
+  struct A { A(int); }; // expected-note {{here}}
+  struct B : virtual A {
+    B() {}
+    virtual void f() = 0;
+  };
+  struct C : B {
+    C() {}
+  };
+  struct D : B {
+    D() {} // expected-error {{must explicitly initialize the base class 'dr257::A'}}
+    void f();
+  };
+}
+
+namespace dr258 { // dr258: yes
+  struct A {
+    void f(const int);
+    template<typename> void g(int);
+    float &h() const;
+  };
+  struct B : A {
+    using A::f;
+    using A::g;
+    using A::h;
+    int &f(int);
+    template<int> int &g(int); // expected-note {{candidate}}
+    int &h();
+  } b;
+  int &w = b.f(0);
+  int &x = b.g<int>(0); // expected-error {{no match}}
+  int &y = b.h();
+  float &z = const_cast<const B&>(b).h();
+
+  struct C {
+    virtual void f(const int) = 0;
+  };
+  struct D : C {
+    void f(int);
+  } d;
+
+  struct E {
+    virtual void f() = 0; // expected-note {{unimplemented}}
+  };
+  struct F : E {
+    void f() const {}
+  } f; // expected-error {{abstract}}
+}
+
+namespace dr259 { // dr259: yes c++11
+  template<typename T> struct A {};
+  template struct A<int>; // expected-note {{previous}}
+  template struct A<int>; // expected-error {{duplicate explicit instantiation}}
+
+  // FIXME: We only apply this DR in C++11 mode.
+  template<> struct A<float>;
+  template struct A<float>;
+#if __cplusplus < 201103L
+  // expected-error at -2 {{extension}} expected-note at -3 {{here}}
+#endif
+
+  template struct A<char>; // expected-note {{here}}
+  template<> struct A<char>; // expected-error {{explicit specialization of 'dr259::A<char>' after instantiation}}
+
+  template<> struct A<double>;
+  template<> struct A<double>;
+  template<> struct A<double> {}; // expected-note {{here}}
+  template<> struct A<double> {}; // expected-error {{redefinition}}
+
+  template<typename T> struct B; // expected-note {{here}}
+  template struct B<int>; // expected-error {{undefined}}
+
+  template<> struct B<float>;
+  template struct B<float>;
+#if __cplusplus < 201103L
+  // expected-error at -2 {{extension}} expected-note at -3 {{here}}
+#endif
+}
+
+namespace dr261 { // dr261: no
+#pragma clang diagnostic push
+#pragma clang diagnostic warning "-Wused-but-marked-unused"
+
+  // FIXME: This is ill-formed, with a diagnostic required, because operator new
+  // and operator delete are inline and odr-used, but not defined in this
+  // translation unit.
+  // We're also missing the -Wused-but-marked-unused diagnostic here.
+  struct A {
+    inline void *operator new(__SIZE_TYPE__) __attribute__((unused));
+    inline void operator delete(void*) __attribute__((unused));
+    A() {}
+  };
+
+  // FIXME: These are ill-formed, with a required diagnostic, for the same
+  // reason.
+  struct B {
+    inline void operator delete(void*) __attribute__((unused));
+    ~B() {}
+  };
+  struct C {
+    inline void operator delete(void*) __attribute__((unused));
+    virtual ~C() {}
+  };
+
+  struct D {
+    inline void operator delete(void*) __attribute__((unused));
+  };
+  void h() { C::operator delete(0); } // expected-warning {{marked unused but was used}}
+
+#pragma clang diagnostic pop
+}
+
+namespace dr262 { // dr262: yes
+  int f(int = 0, ...);
+  int k = f();
+  int l = f(0);
+  int m = f(0, 0);
+}
+
+namespace dr263 { // dr263: yes
+  struct X {};
+  struct Y {
+#if __cplusplus < 201103L
+    friend X::X() throw();
+    friend X::~X() throw();
+#else
+    friend constexpr X::X() noexcept;
+    friend X::~X();
+#endif
+    Y::Y(); // expected-error {{extra qualification}}
+    Y::~Y(); // expected-error {{extra qualification}}
+  };
+}
+
+// dr265: dup 353
+// dr266: na
+// dr269: na
+// dr270: na

Modified: cfe/trunk/www/cxx_dr_status.html
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_dr_status.html?rev=194989&r1=194988&r2=194989&view=diff
==============================================================================
--- cfe/trunk/www/cxx_dr_status.html (original)
+++ cfe/trunk/www/cxx_dr_status.html Sun Nov 17 23:24:03 2013
@@ -1551,7 +1551,7 @@ accessible?</td>
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#252">252</a></td>
     <td>CD1</td>
     <td>Looking up deallocation functions in virtual destructors</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr class="open">
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253">253</a></td>
@@ -1563,7 +1563,7 @@ accessible?</td>
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#254">254</a></td>
     <td>CD1</td>
     <td>Definitional problems with <I>elaborated-type-specifier</I>s</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr class="open">
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#255">255</a></td>
@@ -1575,25 +1575,25 @@ accessible?</td>
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#256">256</a></td>
     <td>CD1</td>
     <td>Overflow in size calculations</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="none" align="center">Duplicate of 624</td>
   </tr>
   <tr>
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#257">257</a></td>
     <td>CD2</td>
     <td>Abstract base constructors and virtual base initialization</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#258">258</a></td>
     <td>CD1</td>
     <td><I>using-declaration</I>s and cv-qualifiers</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#259">259</a></td>
     <td>CD1</td>
     <td>Restrictions on explicit specialization and instantiation</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="full" align="center">Yes (C++11 onwards)</td>
   </tr>
   <tr class="open">
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#260">260</a></td>
@@ -1605,19 +1605,19 @@ accessible?</td>
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#261">261</a></td>
     <td>CD1</td>
     <td>When is a deallocation function "used?"</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#262">262</a></td>
     <td>CD1</td>
     <td>Default arguments and ellipsis</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#263">263</a></td>
     <td>CD1</td>
     <td>Can a constructor be declared a friend?</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr class="open">
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#264">264</a></td>
@@ -1629,13 +1629,13 @@ accessible?</td>
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#265">265</a></td>
     <td>dup</td>
     <td>Destructors, exceptions, and deallocation</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="none" align="center">Duplicate of 353</td>
   </tr>
   <tr>
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#266">266</a></td>
     <td>NAD</td>
     <td>No grammar sentence symbol</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="na" align="center">N/A</td>
   </tr>
   <tr class="open">
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#267">267</a></td>
@@ -1654,13 +1654,13 @@ accessible?</td>
     <td>NAD</td>
     <td>Order of initialization of multiply-defined static data members
 of class templates</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#270">270</a></td>
     <td>CD1</td>
     <td>Order of initialization of static data members of class templates</td>
-    <td class="none" align="center">Unknown</td>
+    <td class="na" align="center">N/A</td>
   </tr>
   <tr class="open">
     <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#271">271</a></td>





More information about the cfe-commits mailing list