mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-01 12:43:47 +00:00
Re-arrange DR test cases, and update DR status page.
llvm-svn: 227279
This commit is contained in:
parent
20deb1d78c
commit
4891e74c39
@ -199,129 +199,110 @@ namespace dr1460 { // dr1460: 3.5
|
||||
#if __cplusplus >= 201103L
|
||||
namespace std {
|
||||
typedef decltype(sizeof(int)) size_t;
|
||||
|
||||
|
||||
// libc++'s implementation
|
||||
template <class _E>
|
||||
class initializer_list
|
||||
{
|
||||
const _E* __begin_;
|
||||
size_t __size_;
|
||||
|
||||
|
||||
initializer_list(const _E* __b, size_t __s)
|
||||
: __begin_(__b),
|
||||
__size_(__s)
|
||||
{}
|
||||
|
||||
: __begin_(__b), __size_(__s) {}
|
||||
|
||||
public:
|
||||
typedef _E value_type;
|
||||
typedef const _E& reference;
|
||||
typedef const _E& const_reference;
|
||||
typedef size_t size_type;
|
||||
|
||||
|
||||
typedef const _E* iterator;
|
||||
typedef const _E* const_iterator;
|
||||
|
||||
|
||||
initializer_list() : __begin_(nullptr), __size_(0) {}
|
||||
|
||||
|
||||
size_t size() const {return __size_;}
|
||||
const _E* begin() const {return __begin_;}
|
||||
const _E* end() const {return __begin_ + __size_;}
|
||||
};
|
||||
|
||||
template < class _T1, class _T2 > struct pair { _T2 second; };
|
||||
|
||||
template<typename T> struct basic_string {
|
||||
basic_string(const T* x) {}
|
||||
~basic_string() {};
|
||||
};
|
||||
typedef basic_string<char> string;
|
||||
|
||||
} // std
|
||||
|
||||
namespace dr1467 { // dr1467: yes c++11
|
||||
namespace dr1467 { // dr1467: 3.7 c++11
|
||||
// List-initialization of aggregate from same-type object
|
||||
|
||||
|
||||
namespace basic0 {
|
||||
|
||||
struct S {
|
||||
int i = 42;
|
||||
};
|
||||
|
||||
|
||||
S a;
|
||||
S b(a);
|
||||
S c{a};
|
||||
|
||||
|
||||
struct SS : public S { } x;
|
||||
S y(x);
|
||||
S z{x};
|
||||
|
||||
} // basic0
|
||||
|
||||
|
||||
namespace basic1 {
|
||||
|
||||
struct S {
|
||||
int i{42};
|
||||
};
|
||||
|
||||
|
||||
S a;
|
||||
S b(a);
|
||||
S c{a};
|
||||
|
||||
|
||||
struct SS : public S { } x;
|
||||
S y(x);
|
||||
S z{x};
|
||||
|
||||
} // basic1
|
||||
|
||||
|
||||
namespace basic2 {
|
||||
|
||||
struct S {
|
||||
int i = {42};
|
||||
};
|
||||
|
||||
|
||||
S a;
|
||||
S b(a);
|
||||
S c{a};
|
||||
|
||||
|
||||
struct SS : public S { } x;
|
||||
S y(x);
|
||||
S z{x};
|
||||
|
||||
} // basic2
|
||||
|
||||
|
||||
namespace dr_example {
|
||||
struct OK {
|
||||
OK() = default;
|
||||
OK(const OK&) = default;
|
||||
OK(int) { }
|
||||
};
|
||||
|
||||
|
||||
OK ok;
|
||||
OK ok2{ok};
|
||||
|
||||
|
||||
|
||||
struct X {
|
||||
X() = default;
|
||||
X(const X&) = default;
|
||||
};
|
||||
|
||||
|
||||
X x;
|
||||
X x2{x};
|
||||
} // dr_example
|
||||
|
||||
|
||||
namespace nonaggregate {
|
||||
|
||||
struct NonAggregate {
|
||||
NonAggregate() {}
|
||||
};
|
||||
|
||||
|
||||
struct WantsIt {
|
||||
WantsIt(NonAggregate);
|
||||
};
|
||||
|
||||
|
||||
void f(NonAggregate);
|
||||
void f(WantsIt);
|
||||
|
||||
|
||||
void test1() {
|
||||
NonAggregate n;
|
||||
f({n});
|
||||
@ -332,113 +313,13 @@ namespace dr1467 { // dr1467: yes c++11
|
||||
NonAggregate y{x};
|
||||
NonAggregate z{{x}};
|
||||
}
|
||||
|
||||
} // nonaggregate
|
||||
|
||||
} // dr1467
|
||||
|
||||
|
||||
namespace dr1490 { // dr1490: yes c++11
|
||||
namespace dr1490 { // dr1490: 3.7 c++11
|
||||
// List-initialization from a string literal
|
||||
|
||||
char s[4]{"abc"}; // Ok
|
||||
std::initializer_list<char>{"abc"}; // expected-error {{expected unqualified-id}}}
|
||||
|
||||
} // dr1490
|
||||
|
||||
namespace dr1589 { // dr1589: yes c++11
|
||||
// Ambiguous ranking of list-initialization sequences
|
||||
|
||||
void f0(long, int=0); // Would makes selection of #0 ambiguous
|
||||
void f0(long); // #0
|
||||
void f0(std::initializer_list<int>); // #00
|
||||
void g0() { f0({1L}); } // chooses #00
|
||||
|
||||
void f1(int, int=0); // Would make selection of #1 ambiguous
|
||||
void f1(int); // #1
|
||||
void f1(std::initializer_list<long>); // #2
|
||||
void g1() { f1({42}); } // chooses #2
|
||||
|
||||
void f2(std::pair<const char*, const char*>, int = 0); // Would makes selection of #3 ambiguous
|
||||
void f2(std::pair<const char*, const char*>); // #3
|
||||
void f2(std::initializer_list<std::string>); // #4
|
||||
void g2() { f2({"foo","bar"}); } // chooses #4
|
||||
|
||||
namespace with_error {
|
||||
|
||||
void f0(long); // #0 expected-note {{candidate function}}
|
||||
void f0(std::initializer_list<int>); // #00 expected-note {{candidate function}}
|
||||
void f0(std::initializer_list<int>, int = 0); // Makes selection of #00 ambiguous \
|
||||
// expected-note {{candidate function}}
|
||||
void g0() { f0({1L}); } // chooses #00 expected-error{{call to 'f0' is ambiguous}}
|
||||
|
||||
void f1(int); // #1 expected-note {{candidate function}}
|
||||
void f1(std::initializer_list<long>); // #2 expected-note {{candidate function}}
|
||||
void f1(std::initializer_list<long>, int = 0); // Makes selection of #00 ambiguous \
|
||||
// expected-note {{candidate function}}
|
||||
void g1() { f1({42}); } // chooses #2 expected-error{{call to 'f1' is ambiguous}}
|
||||
|
||||
void f2(std::pair<const char*, const char*>); // #3 TODO: expected- note {{candidate function}}
|
||||
void f2(std::initializer_list<std::string>); // #4 expected-note {{candidate function}}
|
||||
void f2(std::initializer_list<std::string>, int = 0); // Makes selection of #00 ambiguous \
|
||||
// expected-note {{candidate function}}
|
||||
void g2() { f2({"foo","bar"}); } // chooses #4 expected-error{{call to 'f2' is ambiguous}}
|
||||
|
||||
}
|
||||
|
||||
} // dr1589
|
||||
|
||||
|
||||
namespace dr1631 { // dr1589: yes c++11
|
||||
// Incorrect overload resolution for single-element initializer-list
|
||||
|
||||
struct A { int a[1]; };
|
||||
struct B { B(int); };
|
||||
void f(B, int);
|
||||
void f(B, int, int = 0);
|
||||
void f(int, A);
|
||||
|
||||
void test() {
|
||||
f({0}, {{1}});
|
||||
}
|
||||
|
||||
namespace with_error {
|
||||
void f(B, int); // TODO: expected- note {{candidate function}}
|
||||
void f(int, A); // expected-note {{candidate function}}
|
||||
void f(int, A, int = 0); // expected-note {{candidate function}}
|
||||
|
||||
void test() {
|
||||
f({0}, {{1}}); // expected-error{{call to 'f' is ambiguous}}
|
||||
}
|
||||
}
|
||||
|
||||
} // dr1631
|
||||
|
||||
namespace dr1756 { // dr1490: yes c++11
|
||||
// Direct-list-initialization of a non-class object
|
||||
|
||||
int a{0};
|
||||
|
||||
struct X { operator int(); } x;
|
||||
int b{x};
|
||||
}
|
||||
|
||||
namespace dr1758 { // dr1758: yes c++11
|
||||
// Explicit conversion in copy/move list initialization
|
||||
|
||||
struct X { X(); };
|
||||
struct Y { explicit operator X(); } y;
|
||||
X x{y};
|
||||
|
||||
struct A {
|
||||
A() {}
|
||||
A(const A &) {}
|
||||
};
|
||||
struct B {
|
||||
operator A() { return A(); }
|
||||
} b;
|
||||
A a{b};
|
||||
|
||||
} // dr1758
|
||||
|
||||
} // dr190
|
||||
#endif
|
||||
|
@ -3,7 +3,9 @@
|
||||
// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
|
||||
// RUN: %clang_cc1 -std=c++1z -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
// expected-no-diagnostics
|
||||
#endif
|
||||
|
||||
namespace dr1550 { // dr1550: yes
|
||||
int f(bool b, int n) {
|
||||
@ -19,3 +21,84 @@ namespace dr1560 { // dr1560: 3.5
|
||||
const X &get();
|
||||
const X &x = true ? get() : throw 0;
|
||||
}
|
||||
|
||||
#if __cplusplus >= 201103L
|
||||
namespace std {
|
||||
typedef decltype(sizeof(int)) size_t;
|
||||
|
||||
// libc++'s implementation
|
||||
template <class _E>
|
||||
class initializer_list
|
||||
{
|
||||
const _E* __begin_;
|
||||
size_t __size_;
|
||||
|
||||
initializer_list(const _E* __b, size_t __s)
|
||||
: __begin_(__b), __size_(__s) {}
|
||||
|
||||
public:
|
||||
typedef _E value_type;
|
||||
typedef const _E& reference;
|
||||
typedef const _E& const_reference;
|
||||
typedef size_t size_type;
|
||||
|
||||
typedef const _E* iterator;
|
||||
typedef const _E* const_iterator;
|
||||
|
||||
initializer_list() : __begin_(nullptr), __size_(0) {}
|
||||
|
||||
size_t size() const {return __size_;}
|
||||
const _E* begin() const {return __begin_;}
|
||||
const _E* end() const {return __begin_ + __size_;}
|
||||
};
|
||||
|
||||
template < class _T1, class _T2 > struct pair { _T2 second; };
|
||||
|
||||
template<typename T> struct basic_string {
|
||||
basic_string(const T* x) {}
|
||||
~basic_string() {};
|
||||
};
|
||||
typedef basic_string<char> string;
|
||||
|
||||
} // std
|
||||
|
||||
namespace dr1589 { // dr1589: 3.7 c++11
|
||||
// Ambiguous ranking of list-initialization sequences
|
||||
|
||||
void f0(long, int=0); // Would makes selection of #0 ambiguous
|
||||
void f0(long); // #0
|
||||
void f0(std::initializer_list<int>); // #00
|
||||
void g0() { f0({1L}); } // chooses #00
|
||||
|
||||
void f1(int, int=0); // Would make selection of #1 ambiguous
|
||||
void f1(int); // #1
|
||||
void f1(std::initializer_list<long>); // #2
|
||||
void g1() { f1({42}); } // chooses #2
|
||||
|
||||
void f2(std::pair<const char*, const char*>, int = 0); // Would makes selection of #3 ambiguous
|
||||
void f2(std::pair<const char*, const char*>); // #3
|
||||
void f2(std::initializer_list<std::string>); // #4
|
||||
void g2() { f2({"foo","bar"}); } // chooses #4
|
||||
|
||||
namespace with_error {
|
||||
void f0(long); // #0 expected-note {{candidate function}}
|
||||
void f0(std::initializer_list<int>); // #00 expected-note {{candidate function}}
|
||||
void f0(std::initializer_list<int>, int = 0); // Makes selection of #00 ambiguous \
|
||||
// expected-note {{candidate function}}
|
||||
void g0() { f0({1L}); } // chooses #00 expected-error{{call to 'f0' is ambiguous}}
|
||||
|
||||
void f1(int); // #1 expected-note {{candidate function}}
|
||||
void f1(std::initializer_list<long>); // #2 expected-note {{candidate function}}
|
||||
void f1(std::initializer_list<long>, int = 0); // Makes selection of #00 ambiguous \
|
||||
// expected-note {{candidate function}}
|
||||
void g1() { f1({42}); } // chooses #2 expected-error{{call to 'f1' is ambiguous}}
|
||||
|
||||
void f2(std::pair<const char*, const char*>); // #3 TODO: expected- note {{candidate function}}
|
||||
void f2(std::initializer_list<std::string>); // #4 expected-note {{candidate function}}
|
||||
void f2(std::initializer_list<std::string>, int = 0); // Makes selection of #00 ambiguous \
|
||||
// expected-note {{candidate function}}
|
||||
void g2() { f2({"foo","bar"}); } // chooses #4 expected-error{{call to 'f2' is ambiguous}}
|
||||
}
|
||||
|
||||
} // dr1589
|
||||
#endif
|
||||
|
@ -17,3 +17,29 @@ namespace dr1684 { // dr1684: 3.6
|
||||
constexpr int f(NonLiteral) { return 0; } // expected-error {{not a literal type}}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if __cplusplus >= 201103L
|
||||
namespace dr1631 { // dr1631: 3.7 c++11
|
||||
// Incorrect overload resolution for single-element initializer-list
|
||||
|
||||
struct A { int a[1]; };
|
||||
struct B { B(int); };
|
||||
void f(B, int);
|
||||
void f(B, int, int = 0);
|
||||
void f(int, A);
|
||||
|
||||
void test() {
|
||||
f({0}, {{1}});
|
||||
}
|
||||
|
||||
namespace with_error {
|
||||
void f(B, int); // TODO: expected- note {{candidate function}}
|
||||
void f(int, A); // expected-note {{candidate function}}
|
||||
void f(int, A, int = 0); // expected-note {{candidate function}}
|
||||
|
||||
void test() {
|
||||
f({0}, {{1}}); // expected-error{{call to 'f' is ambiguous}}
|
||||
}
|
||||
}
|
||||
} // dr1631
|
||||
#endif
|
||||
|
34
clang/test/CXX/drs/dr17xx.cpp
Normal file
34
clang/test/CXX/drs/dr17xx.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
// RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
|
||||
// RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
|
||||
// RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
|
||||
// RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
|
||||
|
||||
// expected-no-diagnostics
|
||||
|
||||
#if __cplusplus >= 201103L
|
||||
namespace dr1756 { // dr1756: 3.7 c++11
|
||||
// Direct-list-initialization of a non-class object
|
||||
|
||||
int a{0};
|
||||
|
||||
struct X { operator int(); } x;
|
||||
int b{x};
|
||||
} // dr1756
|
||||
|
||||
namespace dr1758 { // dr1758: 3.7 c++11
|
||||
// Explicit conversion in copy/move list initialization
|
||||
|
||||
struct X { X(); };
|
||||
struct Y { explicit operator X(); } y;
|
||||
X x{y};
|
||||
|
||||
struct A {
|
||||
A() {}
|
||||
A(const A &) {}
|
||||
};
|
||||
struct B {
|
||||
operator A() { return A(); }
|
||||
} b;
|
||||
A a{b};
|
||||
} // dr1758
|
||||
#endif
|
@ -8617,7 +8617,7 @@ and <I>POD class</I></td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1467">1467</a></td>
|
||||
<td>DR</td>
|
||||
<td>List-initialization of aggregate from same-type object</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="svn" align="center">SVN (C++11 onwards)</td>
|
||||
</tr>
|
||||
<tr class="open" id="1468">
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1468">1468</a></td>
|
||||
@ -8755,7 +8755,7 @@ and <I>POD class</I></td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1490">1490</a></td>
|
||||
<td>DR</td>
|
||||
<td>List-initialization from a string literal</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="svn" align="center">SVN (C++11 onwards)</td>
|
||||
</tr>
|
||||
<tr id="1491">
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1491">1491</a></td>
|
||||
@ -9349,7 +9349,7 @@ and <I>POD class</I></td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1589">1589</a></td>
|
||||
<td>DR</td>
|
||||
<td>Ambiguous ranking of list-initialization sequences</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="svn" align="center">SVN (C++11 onwards)</td>
|
||||
</tr>
|
||||
<tr class="open" id="1590">
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1590">1590</a></td>
|
||||
@ -9601,7 +9601,7 @@ and <I>POD class</I></td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1631">1631</a></td>
|
||||
<td>DR</td>
|
||||
<td>Incorrect overload resolution for single-element <I>initializer-list</I></td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="svn" align="center">SVN (C++11 onwards)</td>
|
||||
</tr>
|
||||
<tr class="open" id="1632">
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1632">1632</a></td>
|
||||
@ -10351,7 +10351,7 @@ and <I>POD class</I></td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1756">1756</a></td>
|
||||
<td>DR</td>
|
||||
<td>Direct-list-initialization of a non-class object</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="svn" align="center">SVN (C++11 onwards)</td>
|
||||
</tr>
|
||||
<tr id="1757">
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1757">1757</a></td>
|
||||
@ -10363,7 +10363,7 @@ and <I>POD class</I></td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1758">1758</a></td>
|
||||
<td>DR</td>
|
||||
<td>Explicit conversion in copy/move list initialization</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="svn" align="center">SVN (C++11 onwards)</td>
|
||||
</tr>
|
||||
<tr id="1759">
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1759">1759</a></td>
|
||||
|
Loading…
x
Reference in New Issue
Block a user