dr101.C, [...]: New tests.
* g++.dg/tc1/dr101.C, g++.dg/tc1/dr135.C, g++.dg/tc1/dr142.C, g++.dg/tc1/dr152.C, g++.dg/tc1/dr159.C, g++.dg/tc1/dr161.C, g++.dg/tc1/dr166.C, g++.dg/tc1/dr176.C, g++.dg/tc1/dr188.C, g++.dg/tc1/dr193.C, g++.dg/tc1/dr194.C, g++.dg/tc1/dr217.C, g++.dg/tc1/dr48.C, g++.dg/tc1/dr56.C, g++.dg/tc1/dr68.C, g++.dg/tc1/dr76.C, g++.dg/tc1/dr80.C, g++.dg/tc1/dr94.C: New tests. From-SVN: r77943
This commit is contained in:
parent
6b0a661cfa
commit
a27b6b1a78
19 changed files with 493 additions and 0 deletions
|
@ -1,3 +1,12 @@
|
|||
2004-02-16 Giovanni Bajo <giovannibajo@gcc.gnu.org>
|
||||
|
||||
* g++.dg/tc1/dr101.C, g++.dg/tc1/dr135.C, g++.dg/tc1/dr142.C,
|
||||
g++.dg/tc1/dr152.C, g++.dg/tc1/dr159.C, g++.dg/tc1/dr161.C,
|
||||
g++.dg/tc1/dr166.C, g++.dg/tc1/dr176.C, g++.dg/tc1/dr188.C,
|
||||
g++.dg/tc1/dr193.C, g++.dg/tc1/dr194.C, g++.dg/tc1/dr217.C,
|
||||
g++.dg/tc1/dr48.C, g++.dg/tc1/dr56.C, g++.dg/tc1/dr68.C,
|
||||
g++.dg/tc1/dr76.C, g++.dg/tc1/dr80.C, g++.dg/tc1/dr94.C: New tests.
|
||||
|
||||
2004-02-16 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* gcc.c-torture/execute/20020720-1.x: XFAIL on SPARC with -fPIC.
|
||||
|
|
31
gcc/testsuite/g++.dg/tc1/dr101.C
Normal file
31
gcc/testsuite/g++.dg/tc1/dr101.C
Normal file
|
@ -0,0 +1,31 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR101: Redeclaration of extern "C" names via using-declarations
|
||||
|
||||
namespace Test1 {
|
||||
|
||||
typedef unsigned int X;
|
||||
extern "C" void f1();
|
||||
namespace N {
|
||||
typedef unsigned int X;
|
||||
extern "C" void f1();
|
||||
}
|
||||
using N::f1; // { dg-bogus "" "redeclaration through 'using' should not be ambiguous" }
|
||||
using N::X; // { dg-bogus "" "redeclaration through 'using' should not be ambiguous" }
|
||||
}
|
||||
|
||||
|
||||
namespace Test2 {
|
||||
|
||||
typedef unsigned int X;
|
||||
extern "C" int f2();
|
||||
namespace N {
|
||||
typedef unsigned int X;
|
||||
extern "C" int f2();
|
||||
}
|
||||
using namespace N;
|
||||
int i = f2(); // { dg-bogus "" "redeclaration through 'using' should not be ambiguous" }
|
||||
X x; // { dg-bogus "" "redeclaration through 'using' should not be ambiguous" { xfail *-*-* } }
|
||||
|
||||
}
|
||||
|
8
gcc/testsuite/g++.dg/tc1/dr135.C
Normal file
8
gcc/testsuite/g++.dg/tc1/dr135.C
Normal file
|
@ -0,0 +1,8 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR135: Class type in in-class member function definitions
|
||||
|
||||
struct S {
|
||||
S f() { return S(); } // { dg-bogus "" "incomplete class type is allowed as return type" }
|
||||
void g(S) { } // { dg-bogus "" "incomplete class type is allowed as parameter type" }
|
||||
};
|
32
gcc/testsuite/g++.dg/tc1/dr142.C
Normal file
32
gcc/testsuite/g++.dg/tc1/dr142.C
Normal file
|
@ -0,0 +1,32 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR142: Injection-related errors in access example
|
||||
|
||||
class B { // { dg-error "inaccessible" }
|
||||
public:
|
||||
int mi; // { dg-error "inaccessible" }
|
||||
static int si; // { dg-error "inaccessible" }
|
||||
};
|
||||
|
||||
class D: private B {
|
||||
};
|
||||
|
||||
class DD: public D {
|
||||
void f();
|
||||
};
|
||||
|
||||
void DD::f() {
|
||||
mi = 3; // { dg-error "within this context" "" }
|
||||
si = 3; // { dg-error "within this context" "" }
|
||||
::B b;
|
||||
b.mi = 3;
|
||||
b.si = 3;
|
||||
::B::si = 3;
|
||||
::B* bp1 = this; // { dg-error "inaccessible base" "" }
|
||||
::B* bp2 = (::B*)this;
|
||||
bp2->mi = 3;
|
||||
|
||||
|
||||
B b2; // { dg-error "within this context" "" }
|
||||
B::si = 3; // { dg-error "within this context" "" }
|
||||
}
|
36
gcc/testsuite/g++.dg/tc1/dr152.C
Normal file
36
gcc/testsuite/g++.dg/tc1/dr152.C
Normal file
|
@ -0,0 +1,36 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR152: explicit copy constructors
|
||||
|
||||
namespace N1 {
|
||||
struct X {
|
||||
X();
|
||||
explicit X(const X&);
|
||||
};
|
||||
void f(X);
|
||||
int foo()
|
||||
{
|
||||
X x;
|
||||
f(x); // { dg-error "" "" }
|
||||
}
|
||||
}
|
||||
|
||||
namespace N2 {
|
||||
template <class T>
|
||||
struct X {
|
||||
X();
|
||||
explicit X(const X&);
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void f(T ) {}
|
||||
|
||||
template <class T>
|
||||
int foo()
|
||||
{
|
||||
X<T> x;
|
||||
N2::f(x); // { dg-error "" "" }
|
||||
}
|
||||
|
||||
template int foo<float>(); // { dg-error "instantiated from here" }
|
||||
}
|
12
gcc/testsuite/g++.dg/tc1/dr159.C
Normal file
12
gcc/testsuite/g++.dg/tc1/dr159.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR159: Namespace qualification in declarators
|
||||
|
||||
namespace N {
|
||||
namespace M {
|
||||
void f();
|
||||
void g();
|
||||
}
|
||||
void M::f(){}
|
||||
void N::M::g(){}
|
||||
}
|
50
gcc/testsuite/g++.dg/tc1/dr161.C
Normal file
50
gcc/testsuite/g++.dg/tc1/dr161.C
Normal file
|
@ -0,0 +1,50 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR161: Access to protected nested type
|
||||
|
||||
namespace N1 {
|
||||
struct A
|
||||
{
|
||||
protected:
|
||||
typedef int type;
|
||||
};
|
||||
|
||||
struct B : public A
|
||||
{
|
||||
void test(void)
|
||||
{
|
||||
A::type t;
|
||||
}
|
||||
|
||||
friend void ftest(void)
|
||||
{
|
||||
A::type t;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
namespace N2 {
|
||||
template <class T>
|
||||
struct A
|
||||
{
|
||||
protected:
|
||||
typedef int type;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct B : public A<T>
|
||||
{
|
||||
void test(B b)
|
||||
{
|
||||
typename A<T>::type t;
|
||||
}
|
||||
|
||||
friend void ftest(B b)
|
||||
{
|
||||
typename A<T>::type t;
|
||||
}
|
||||
};
|
||||
|
||||
template struct B<void>;
|
||||
}
|
60
gcc/testsuite/g++.dg/tc1/dr166.C
Normal file
60
gcc/testsuite/g++.dg/tc1/dr166.C
Normal file
|
@ -0,0 +1,60 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR166: Friend declarations of template-ids
|
||||
|
||||
namespace N {
|
||||
template <class T> void f(T);
|
||||
void g();
|
||||
|
||||
namespace M {
|
||||
class A {
|
||||
friend void f<int>(int); // N::f
|
||||
static int x; // { dg-error "private" }
|
||||
};
|
||||
|
||||
class B {
|
||||
template <class T> friend void f(T); // M::f
|
||||
static int x; // { dg-error "private" }
|
||||
};
|
||||
|
||||
class C {
|
||||
friend void g(); // M::g
|
||||
static int x; // { dg-error "private" }
|
||||
};
|
||||
|
||||
template <class T> void f(T) // will be instantiated as f<long>
|
||||
{
|
||||
M::A::x = 0; // { dg-error "within this context" }
|
||||
M::B::x = 0;
|
||||
}
|
||||
template <> void f<int>(int)
|
||||
{ M::A::x = 0; } // { dg-error "within this context" }
|
||||
template <> void f<double>(double )
|
||||
{
|
||||
M::B::x = 0;
|
||||
M::f<long>(0); // { dg-error "instantiated" }
|
||||
}
|
||||
|
||||
void g(void)
|
||||
{ M::C::x = 0; }
|
||||
}
|
||||
|
||||
template <class T> void f(T) // will be instantiated as f<long>
|
||||
{
|
||||
M::A::x = 0; // { dg-error "within this context" }
|
||||
M::B::x = 0; // { dg-error "within this context" }
|
||||
}
|
||||
|
||||
template <> void f<int>(int )
|
||||
{
|
||||
N::f<long>(0); // { dg-error "instantiated" }
|
||||
M::A::x = 0;
|
||||
M::B::x = 0; // { dg-error "within this context" }
|
||||
}
|
||||
|
||||
template <> void f<char>(char )
|
||||
{ M::A::x = 0; } // { dg-error "within this context" }
|
||||
|
||||
void g(void)
|
||||
{ M::C::x = 0; } // { dg-error "within this context" }
|
||||
}
|
29
gcc/testsuite/g++.dg/tc1/dr176.C
Normal file
29
gcc/testsuite/g++.dg/tc1/dr176.C
Normal file
|
@ -0,0 +1,29 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR176: Name injection and templates
|
||||
|
||||
namespace N1 {
|
||||
template <class T> struct Base {
|
||||
Base* p;
|
||||
Base<T*>* p2;
|
||||
::Base* p3; // { dg-error "" "" }
|
||||
};
|
||||
|
||||
template <class T> struct Derived: public Base<T> {
|
||||
Base* p; // { dg-bogus "" "injected class name in derived classes" { xfail *-*-* } }
|
||||
Base<T*>* p2;
|
||||
typename Derived::Base* p3; // { dg-bogus "" "injected class name in derived classes" { xfail *-*-* } }
|
||||
};
|
||||
|
||||
template struct Derived<void>; // { dg-bogus "instantiated from here" "everything should be looked up at parsing time (after DR224)" { xfail *-*-* } }
|
||||
}
|
||||
|
||||
|
||||
namespace N2 {
|
||||
template <class T> struct Base {};
|
||||
template <class T> struct Derived: public Base<T> {
|
||||
typename Derived::template Base<double>* p1; // { dg-bogus "" "" { xfail *-*-* } }
|
||||
}
|
||||
|
||||
template struct Derived<void>;
|
||||
}
|
9
gcc/testsuite/g++.dg/tc1/dr188.C
Normal file
9
gcc/testsuite/g++.dg/tc1/dr188.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR188: Comma operator and rvalue conversion
|
||||
|
||||
template <bool> struct StaticAssert;
|
||||
template <> struct StaticAssert<true> {};
|
||||
|
||||
char arr[100];
|
||||
StaticAssert<(sizeof(0,arr) == 100)> check;
|
72
gcc/testsuite/g++.dg/tc1/dr193.C
Normal file
72
gcc/testsuite/g++.dg/tc1/dr193.C
Normal file
|
@ -0,0 +1,72 @@
|
|||
// { dg-do run }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR193: Order of destruction of local automatics of destructor
|
||||
|
||||
extern "C" void abort(void);
|
||||
|
||||
namespace N1 {
|
||||
bool a_done = false;
|
||||
struct A
|
||||
{
|
||||
~A()
|
||||
{
|
||||
a_done = true;
|
||||
}
|
||||
};
|
||||
|
||||
struct B
|
||||
{
|
||||
~B()
|
||||
{
|
||||
if (!a_done)
|
||||
abort();
|
||||
}
|
||||
};
|
||||
|
||||
struct C {
|
||||
B x;
|
||||
~C() {
|
||||
A y;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
namespace N2 {
|
||||
bool a_done = false;
|
||||
|
||||
template <class>
|
||||
struct A
|
||||
{
|
||||
~A()
|
||||
{
|
||||
a_done = true;
|
||||
}
|
||||
};
|
||||
|
||||
template <class>
|
||||
struct B
|
||||
{
|
||||
~B()
|
||||
{
|
||||
if (!a_done)
|
||||
abort();
|
||||
}
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct C {
|
||||
B<T> x;
|
||||
~C() {
|
||||
A<T> y;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
N1::C c1;
|
||||
N2::C<void> c2;
|
||||
return 0;
|
||||
}
|
16
gcc/testsuite/g++.dg/tc1/dr194.C
Normal file
16
gcc/testsuite/g++.dg/tc1/dr194.C
Normal file
|
@ -0,0 +1,16 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR194: Identifying constructors
|
||||
|
||||
struct A
|
||||
{
|
||||
inline explicit A();
|
||||
};
|
||||
|
||||
template <class>
|
||||
struct B
|
||||
{
|
||||
inline explicit B();
|
||||
};
|
||||
|
||||
template struct B<void>;
|
14
gcc/testsuite/g++.dg/tc1/dr217.C
Normal file
14
gcc/testsuite/g++.dg/tc1/dr217.C
Normal file
|
@ -0,0 +1,14 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR217: Default arguments for non-template member functions of class
|
||||
// templates
|
||||
|
||||
template <class T>
|
||||
struct S
|
||||
{
|
||||
void foo (int);
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void S<T>::foo (int = 0) // { dg-error "" "default arguments for parameters of member functions of class templates can be specified in the initial declaration only" { xfail *-*-* } }
|
||||
{ }
|
13
gcc/testsuite/g++.dg/tc1/dr48.C
Normal file
13
gcc/testsuite/g++.dg/tc1/dr48.C
Normal file
|
@ -0,0 +1,13 @@
|
|||
// { dg-do link }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR48: Definitions of unused static members
|
||||
|
||||
struct A {
|
||||
static const int size = 10;
|
||||
int array[size];
|
||||
};
|
||||
|
||||
int main() {
|
||||
A a;
|
||||
return 0;
|
||||
}
|
12
gcc/testsuite/g++.dg/tc1/dr56.C
Normal file
12
gcc/testsuite/g++.dg/tc1/dr56.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR56: Redeclaring typedefs within classes
|
||||
|
||||
class X {
|
||||
typedef int I;
|
||||
typedef int I; // { dg-error "" "Cannot redeclare a typedef in a class scope" { xfail *-*-* } }
|
||||
};
|
||||
|
||||
// In non-class scope, they are allowed.
|
||||
typedef int A;
|
||||
typedef int A;
|
20
gcc/testsuite/g++.dg/tc1/dr68.C
Normal file
20
gcc/testsuite/g++.dg/tc1/dr68.C
Normal file
|
@ -0,0 +1,20 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR68: Grammar does not allow "friend class A<int>;"
|
||||
|
||||
namespace A{
|
||||
class B{};
|
||||
}
|
||||
|
||||
namespace B{
|
||||
class A{};
|
||||
class C{
|
||||
friend class ::A::B;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
template <typename> class K;
|
||||
class J {
|
||||
friend class K<int>;
|
||||
};
|
8
gcc/testsuite/g++.dg/tc1/dr76.C
Normal file
8
gcc/testsuite/g++.dg/tc1/dr76.C
Normal file
|
@ -0,0 +1,8 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR76: Are const volatile variables considered "constant expressions"?
|
||||
|
||||
volatile const int a = 5;
|
||||
|
||||
template <int> struct K;
|
||||
template struct K<a>; // { dg-error "non-constant" }
|
53
gcc/testsuite/g++.dg/tc1/dr80.C
Normal file
53
gcc/testsuite/g++.dg/tc1/dr80.C
Normal file
|
@ -0,0 +1,53 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR80: Class members with same name as class
|
||||
|
||||
struct A
|
||||
{
|
||||
int A;
|
||||
};
|
||||
|
||||
struct A2
|
||||
{
|
||||
static int A2; // { dg-error "same name as" }
|
||||
};
|
||||
|
||||
|
||||
template <class>
|
||||
struct A3
|
||||
{
|
||||
int A3;
|
||||
};
|
||||
|
||||
template <class>
|
||||
struct A4
|
||||
{
|
||||
static int A4; // { dg-error "same name as" }
|
||||
};
|
||||
|
||||
|
||||
struct B
|
||||
{
|
||||
B();
|
||||
int B; // { dg-error "same name as" }
|
||||
};
|
||||
|
||||
struct B2
|
||||
{
|
||||
B2();
|
||||
static int B2; // { dg-error "same name as" }
|
||||
};
|
||||
|
||||
template <class>
|
||||
struct B3
|
||||
{
|
||||
B3();
|
||||
int B3; // { dg-error "same name as" "this error should appear at parsing time" { xfail *-*-* } }
|
||||
};
|
||||
|
||||
template <class>
|
||||
struct B4
|
||||
{
|
||||
B4();
|
||||
static int B4; // { dg-error "same name as" }
|
||||
};
|
9
gcc/testsuite/g++.dg/tc1/dr94.C
Normal file
9
gcc/testsuite/g++.dg/tc1/dr94.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
// { dg-do compile }
|
||||
// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
|
||||
// DR94: Inconsistencies in the descriptions of constant expressions
|
||||
|
||||
struct S {
|
||||
static const int c = 5;
|
||||
};
|
||||
int a[S::c];
|
||||
|
Loading…
Add table
Reference in a new issue