forked from OSchip/llvm-project
parent
c9f019ab0f
commit
c8f7fd10a9
|
@ -724,3 +724,288 @@ namespace dr169 { // dr169: yes
|
|||
using B::n<int>; // expected-error {{using declaration can not refer to a template specialization}}
|
||||
};
|
||||
}
|
||||
|
||||
namespace { // dr171: yes
|
||||
int dr171a;
|
||||
}
|
||||
int dr171b; // expected-note {{here}}
|
||||
namespace dr171 {
|
||||
extern "C" void dr171a();
|
||||
extern "C" void dr171b(); // expected-error {{conflicts}}
|
||||
}
|
||||
|
||||
namespace dr172 { // dr172: yes
|
||||
enum { zero };
|
||||
int check1[-1 < zero ? 1 : -1];
|
||||
|
||||
enum { x = -1, y = (unsigned int)-1 };
|
||||
int check2[sizeof(x) > sizeof(int) ? 1 : -1];
|
||||
|
||||
enum { a = (unsigned int)-1 / 2 };
|
||||
int check3a[sizeof(a) == sizeof(int) ? 1 : -1];
|
||||
int check3b[-a < 0 ? 1 : -1];
|
||||
|
||||
enum { b = (unsigned int)-1 / 2 + 1 };
|
||||
int check4a[sizeof(b) == sizeof(unsigned int) ? 1 : -1];
|
||||
int check4b[-b > 0 ? 1 : -1];
|
||||
|
||||
enum { c = (unsigned long)-1 / 2 };
|
||||
int check5a[sizeof(c) == sizeof(long) ? 1 : -1];
|
||||
int check5b[-c < 0 ? 1 : -1];
|
||||
|
||||
enum { d = (unsigned long)-1 / 2 + 1 };
|
||||
int check6a[sizeof(d) == sizeof(unsigned long) ? 1 : -1];
|
||||
int check6b[-d > 0 ? 1 : -1];
|
||||
|
||||
enum { e = (unsigned long long)-1 / 2 }; // expected-error 0-1{{extension}}
|
||||
int check7a[sizeof(e) == sizeof(long) ? 1 : -1]; // expected-error 0-1{{extension}}
|
||||
int check7b[-e < 0 ? 1 : -1];
|
||||
|
||||
enum { f = (unsigned long long)-1 / 2 + 1 }; // expected-error 0-1{{extension}}
|
||||
int check8a[sizeof(f) == sizeof(unsigned long) ? 1 : -1]; // expected-error 0-1{{extension}}
|
||||
int check8b[-f > 0 ? 1 : -1];
|
||||
}
|
||||
|
||||
namespace dr173 { // dr173: yes
|
||||
int check[('0' + 1 == '1' && '0' + 2 == '2' && '0' + 3 == '3' &&
|
||||
'0' + 4 == '4' && '0' + 5 == '5' && '0' + 6 == '6' &&
|
||||
'0' + 7 == '7' && '0' + 8 == '8' && '0' + 9 == '9') ? 1 : -1];
|
||||
}
|
||||
|
||||
// dr174: sup 1012
|
||||
|
||||
namespace dr175 { // dr175: yes
|
||||
struct A {}; // expected-note {{here}}
|
||||
struct B : private A {}; // expected-note {{constrained by private inheritance}}
|
||||
struct C : B {
|
||||
A a; // expected-error {{private}}
|
||||
dr175::A b;
|
||||
};
|
||||
}
|
||||
|
||||
namespace dr176 { // dr176: yes
|
||||
template<typename T> class Y;
|
||||
template<> class Y<int> {
|
||||
void f() {
|
||||
typedef Y A; // expected-note {{here}}
|
||||
typedef Y<char> A; // expected-error {{different types ('Y<char>' vs 'Y<int>')}}
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T> struct Base {}; // expected-note 2{{found}}
|
||||
template<typename T> struct Derived : public Base<T> {
|
||||
void f() {
|
||||
typedef typename Derived::template Base<T> A;
|
||||
typedef typename Derived::Base A;
|
||||
}
|
||||
};
|
||||
template struct Derived<int>;
|
||||
|
||||
template<typename T> struct Derived2 : Base<int>, Base<char> {
|
||||
typename Derived2::Base b; // expected-error {{found in multiple base classes}}
|
||||
typename Derived2::Base<double> d;
|
||||
};
|
||||
|
||||
template<typename T> class X { // expected-note {{here}}
|
||||
X *p1;
|
||||
X<T> *p2;
|
||||
X<int> *p3;
|
||||
dr176::X *p4; // expected-error {{requires template arguments}}
|
||||
};
|
||||
}
|
||||
|
||||
namespace dr177 { // dr177: yes
|
||||
struct B {};
|
||||
struct A {
|
||||
A(A &); // expected-note {{not viable: expects an l-value}}
|
||||
A(const B &);
|
||||
};
|
||||
B b;
|
||||
A a = b; // expected-error {{no viable constructor copying variable}}
|
||||
}
|
||||
|
||||
namespace dr178 { // dr178: yes
|
||||
int check[int() == 0 ? 1 : -1];
|
||||
#if __cplusplus >= 201103L
|
||||
static_assert(int{} == 0, "");
|
||||
struct S { int a, b; };
|
||||
static_assert(S{1}.b == 0, "");
|
||||
struct T { constexpr T() : n() {} int n; };
|
||||
static_assert(T().n == 0, "");
|
||||
struct U : S { constexpr U() : S() {} };
|
||||
static_assert(U().b == 0, "");
|
||||
#endif
|
||||
}
|
||||
|
||||
namespace dr179 { // dr179: yes
|
||||
void f();
|
||||
int n = &f - &f; // expected-error {{arithmetic on pointers to the function type 'void ()'}}
|
||||
}
|
||||
|
||||
namespace dr180 { // dr180: yes
|
||||
template<typename T> struct X : T, T::some_base {
|
||||
X() : T::some_type_that_might_be_T(), T::some_base() {}
|
||||
friend class T::some_class;
|
||||
void f() {
|
||||
enum T::some_enum e;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace dr181 { // dr181: yes
|
||||
namespace X {
|
||||
template <template X<class T> > struct A { }; // expected-error +{{}}
|
||||
template <template X<class T> > void f(A<X>) { } // expected-error +{{}}
|
||||
}
|
||||
|
||||
namespace Y {
|
||||
template <template <class T> class X> struct A { };
|
||||
template <template <class T> class X> void f(A<X>) { }
|
||||
}
|
||||
}
|
||||
|
||||
namespace dr182 { // dr182: yes
|
||||
template <class T> struct C {
|
||||
void f();
|
||||
void g();
|
||||
};
|
||||
|
||||
template <class T> void C<T>::f() {}
|
||||
template <class T> void C<T>::g() {}
|
||||
|
||||
class A {
|
||||
class B {}; // expected-note {{here}}
|
||||
void f();
|
||||
};
|
||||
|
||||
template void C<A::B>::f();
|
||||
template <> void C<A::B>::g(); // expected-error {{private}}
|
||||
|
||||
void A::f() {
|
||||
C<B> cb;
|
||||
cb.f();
|
||||
}
|
||||
}
|
||||
|
||||
namespace dr183 { // dr183: sup 382
|
||||
template<typename T> struct A {};
|
||||
template<typename T> struct B {
|
||||
typedef int X;
|
||||
};
|
||||
template<> struct A<int> {
|
||||
typename B<int>::X x;
|
||||
};
|
||||
}
|
||||
|
||||
namespace dr184 { // dr184: yes
|
||||
template<typename T = float> struct B {};
|
||||
|
||||
template<template<typename TT = float> class T> struct A {
|
||||
void f();
|
||||
void g();
|
||||
};
|
||||
|
||||
template<template<typename TT> class T> void A<T>::f() { // expected-note {{here}}
|
||||
T<> t; // expected-error {{too few template arguments}}
|
||||
}
|
||||
|
||||
template<template<typename TT = char> class T> void A<T>::g() {
|
||||
T<> t;
|
||||
typedef T<> X;
|
||||
typedef T<char> X;
|
||||
}
|
||||
|
||||
void h() { A<B>().g(); }
|
||||
}
|
||||
|
||||
// dr185 FIXME: add codegen test
|
||||
|
||||
namespace dr187 { // dr187: sup 481
|
||||
const int Z = 1;
|
||||
template<int X = Z, int Z = X> struct A;
|
||||
typedef A<> T;
|
||||
typedef A<1, 1> T;
|
||||
}
|
||||
|
||||
namespace dr188 { // dr188: yes
|
||||
char c[10];
|
||||
int check[sizeof(0, c) == 10 ? 1 : -1];
|
||||
}
|
||||
|
||||
// dr190 FIXME: add codegen test for tbaa
|
||||
|
||||
// dr193 FIXME: add codegen test
|
||||
|
||||
namespace dr194 { // dr194: yes
|
||||
struct A {
|
||||
A();
|
||||
void A(); // expected-error {{has the same name as its class}} expected-error {{constructor cannot have a return type}}
|
||||
};
|
||||
struct B {
|
||||
void B(); // expected-error {{has the same name as its class}} expected-error {{constructor cannot have a return type}}
|
||||
B();
|
||||
};
|
||||
struct C {
|
||||
inline explicit C(int) {}
|
||||
};
|
||||
}
|
||||
|
||||
namespace dr195 { // dr195: yes
|
||||
void f();
|
||||
int *p = (int*)&f; // expected-error 0-1{{extension}}
|
||||
void (*q)() = (void(*)())&p; // expected-error 0-1{{extension}}
|
||||
}
|
||||
|
||||
namespace dr197 { // dr197: yes
|
||||
char &f(char);
|
||||
|
||||
template <class T> void g(T t) {
|
||||
char &a = f(1);
|
||||
char &b = f(T(1)); // expected-error {{unrelated type 'int'}}
|
||||
char &c = f(t); // expected-error {{unrelated type 'int'}}
|
||||
}
|
||||
|
||||
void f(int);
|
||||
|
||||
enum E { e };
|
||||
int &f(E);
|
||||
|
||||
void h() {
|
||||
g('a');
|
||||
g(2);
|
||||
g(e); // expected-note {{in instantiation of}}
|
||||
}
|
||||
}
|
||||
|
||||
namespace dr198 { // dr198: yes
|
||||
struct A {
|
||||
int n;
|
||||
struct B {
|
||||
int m[sizeof(n)];
|
||||
#if __cplusplus < 201103L
|
||||
// expected-error@-2 {{invalid use of non-static data member}}
|
||||
#endif
|
||||
int f() { return n; }
|
||||
// expected-error@-1 {{use of non-static data member 'n' of 'A' from nested type 'B'}}
|
||||
};
|
||||
struct C;
|
||||
struct D;
|
||||
};
|
||||
struct A::C {
|
||||
int m[sizeof(n)];
|
||||
#if __cplusplus < 201103L
|
||||
// expected-error@-2 {{invalid use of non-static data member}}
|
||||
#endif
|
||||
int f() { return n; }
|
||||
// expected-error@-1 {{use of non-static data member 'n' of 'A' from nested type 'C'}}
|
||||
};
|
||||
struct A::D : A {
|
||||
int m[sizeof(n)];
|
||||
#if __cplusplus < 201103L
|
||||
// expected-error@-2 {{invalid use of non-static data member}}
|
||||
#endif
|
||||
int f() { return n; }
|
||||
};
|
||||
}
|
||||
|
||||
// dr199 FIXME: add codegen test
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// 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++1y %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
|
||||
|
||||
namespace dr200 { // dr200: dup 214
|
||||
template <class T> T f(int);
|
||||
template <class T, class U> T f(U) = delete; // expected-error 0-1{{extension}}
|
||||
|
||||
void g() {
|
||||
f<int>(1);
|
||||
}
|
||||
}
|
|
@ -248,7 +248,7 @@
|
|||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#35">35</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Definition of default-initialization</td>
|
||||
<td class="none" align="center">Duplicate of 178</td>
|
||||
<td class="full" align="center">Duplicate of 178</td>
|
||||
</tr>
|
||||
<tr class="open">
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#36">36</a></td>
|
||||
|
@ -1064,85 +1064,85 @@
|
|||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#171">171</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Global namespace scope</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#172">172</a></td>
|
||||
<td>CD1</td>
|
||||
<td>Unsigned int as underlying type of enum</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#173">173</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Constraints on execution character set</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#174">174</a></td>
|
||||
<td>NAD</td>
|
||||
<td>Undeprecating global static</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="none" align="center">Superseded by 1012</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#175">175</a></td>
|
||||
<td>CD1</td>
|
||||
<td>Class name injection and base name access</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#176">176</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Name injection and 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#177">177</a></td>
|
||||
<td>CD1</td>
|
||||
<td>Lvalues vs rvalues in copy-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#178">178</a></td>
|
||||
<td>TC1</td>
|
||||
<td>More on value-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#179">179</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Function pointers and subtraction</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#180">180</a></td>
|
||||
<td>CD1</td>
|
||||
<td><TT>typename</TT> and elaborated types</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#181">181</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Errors in template <I>template-parameter</I> example</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#182">182</a></td>
|
||||
<td>NAD</td>
|
||||
<td>Access checking on explicit specializations</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#183">183</a></td>
|
||||
<td>TC1</td>
|
||||
<td><TT>typename</TT> in explicit specializations</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="none" align="center">Superseded by 382</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#184">184</a></td>
|
||||
<td>CD1</td>
|
||||
<td>Default arguments in template <I>template-parameter</I>s</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#185">185</a></td>
|
||||
|
@ -1160,13 +1160,13 @@
|
|||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#187">187</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Scope of template parameter names</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="none" align="center">Superseded by 481</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#188">188</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Comma operator and rvalue conversion</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#189">189</a></td>
|
||||
|
@ -1202,13 +1202,13 @@
|
|||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#194">194</a></td>
|
||||
<td>TC1</td>
|
||||
<td>Identifying constructors</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#195">195</a></td>
|
||||
<td>CD1</td>
|
||||
<td>Converting between function and object pointers</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#196">196</a></td>
|
||||
|
@ -1220,13 +1220,13 @@
|
|||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#197">197</a></td>
|
||||
<td>CD1</td>
|
||||
<td>Issues with two-stage lookup of dependent names</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#198">198</a></td>
|
||||
<td>CD1</td>
|
||||
<td>Definition of "use" in local and nested classes</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#199">199</a></td>
|
||||
|
@ -1238,7 +1238,7 @@
|
|||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#200">200</a></td>
|
||||
<td>dup</td>
|
||||
<td>Partial ordering and explicit arguments</td>
|
||||
<td class="none" align="center">Unknown</td>
|
||||
<td class="none" align="center">Duplicate of 214</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#201">201</a></td>
|
||||
|
|
Loading…
Reference in New Issue