Commit dd8216e1 by Jason Merrill

update

From-SVN: r31836
parent f4a4b669
// Build don't link: // Build don't link:
class A {
class B { struct A {
typedef long T; struct B {
int i; typedef long T;
}; int i;
}; };
class C { };
class B { struct C {
typedef float T; struct B {
int i; typedef float T;
}; int i;
}; };
};
C::B::T a; C::B::T a;
...@@ -11,6 +11,6 @@ void h(X* p) { ...@@ -11,6 +11,6 @@ void h(X* p) {
X::E2 e2; X::E2 e2;
int x2 = X::a2; int x2 = X::a2;
X::E1 e1; X::E1 e1; // ERROR - within this context
int x1 = X::a1; // ERROR - within this context int x1 = X::a1; // ERROR - within this context
} }
...@@ -6,6 +6,8 @@ class A { ...@@ -6,6 +6,8 @@ class A {
struct B { struct B {
int x; int x;
}; };
struct C;
friend struct C;
struct C { struct C {
int bug (A::B &y); int bug (A::B &y);
}; };
......
...@@ -38,15 +38,15 @@ int foo2 (int (*a)(int) = &foo) ...@@ -38,15 +38,15 @@ int foo2 (int (*a)(int) = &foo)
} }
class X{ class X{
class Y{}; class Y{}; // ERROR - private
}; };
typedef int const * bart (); typedef int const * bart ();
typedef bart const * const * bar2; // ERROR - qualifiers typedef bart const * const * bar2; // ERROR - qualifiers
bar2 baz (X::Y y) bar2 baz (X::Y y)
{ { // ERROR - in this context
X::Y f; X::Y f; // ERROR - in this context
bar2 wa [5]; bar2 wa [5];
wa[0] = baz(f); wa[0] = baz(f);
undef2 (1); // ERROR - implicit declaration undef2 (1); // ERROR - implicit declaration
......
...@@ -18,7 +18,7 @@ void h(X* p) { ...@@ -18,7 +18,7 @@ void h(X* p) {
X::E2 e2; X::E2 e2;
int x2 = X::a2; int x2 = X::a2;
X::E1 e1; // Should be rejected, but isn't.// ERROR - .* , XFAIL *-*-* X::E1 e1; // ERROR - within this context
int x1 = X::a1; // ERROR - Should be rejected, and is. int x1 = X::a1; // ERROR - Should be rejected, and is.
} }
// Build don't link:
// prms-id: 8785
class Outer {
private:
int x; // ERROR - private
public:
struct Inner {
int y;
void f( Outer * p, int i) {
p->x = i; // ERROR -
};
void f( Outer & p) {
p.x = y; // ERROR -
};
};
};
int main() {
Outer::Inner A;
Outer Thing;
A.f(Thing);
A.f(&Thing,2);
}
...@@ -8,8 +8,8 @@ public: ...@@ -8,8 +8,8 @@ public:
}; };
class B_table : private A_table { class B_table : private A_table {
typedef void (B_table::* B_ti_fn) (int &item);
public: public:
typedef void (B_table::* B_ti_fn) (int &item);
B_table() { j = 0x4321;} B_table() { j = 0x4321;}
virtual void call_fn_fn1(int &item, void *pfn1); virtual void call_fn_fn1(int &item, void *pfn1);
void func1(int &item) { printf("func1(%d)\n",item);} void func1(int &item) { printf("func1(%d)\n",item);}
......
// Test that access control for types and statics works properly
// with nested types.
// Build don't link:
class A {
static int I1; // ERROR - private
struct B1 { }; // ERROR - private
public:
static int I2;
struct B2 { };
};
class D: public A {
struct E {
void f ();
};
};
void D::E::f ()
{
int i = I1; // ERROR - within this context
B1 b1; // ERROR - within this context
i = I2;
B2 b2;
}
void f ()
{
A::B1 b1; // ERROR - within this context
new A::B1; // ERROR - within this context
(A::B1) b1; // ERROR - within this context
}
// Build don't link: // Build don't link:
// Special g++ Options: -ansi // Special g++ Options: -ansi
// Origin: Theo Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr> // Origin: Theo Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
// Special g++ Options:
inline const unsigned& f(unsigned const& a) { inline const unsigned& f(unsigned const& a) {
return a; return a;
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
// Adapted by Alexandre Oliva <oliva@dcc.unicamp.br> // Adapted by Alexandre Oliva <oliva@dcc.unicamp.br>
// plain char, signed char and unsigned char are distinct types // plain char, signed char and unsigned char are distinct types
template <class X, class Y> class bug {}; template <class X, class Y> struct bug {};
template <class X> class bug<X,char> { typedef char t; }; template <class X> struct bug<X,char> { typedef char t; };
template <class X> class bug<X,unsigned char> { typedef unsigned char t; }; template <class X> struct bug<X,unsigned char> { typedef unsigned char t; };
template <class X> class bug<X,signed char> { typedef signed char t; }; template <class X> struct bug<X,signed char> { typedef signed char t; };
template <class X> class bug<char,X> { typedef char t; }; template <class X> struct bug<char,X> { typedef char t; };
template <class X> class bug<unsigned char,X> { typedef unsigned char t; }; template <class X> struct bug<unsigned char,X> { typedef unsigned char t; };
template <class X> class bug<signed char,X> { typedef signed char t; }; template <class X> struct bug<signed char,X> { typedef signed char t; };
void foo() { void foo() {
bug<int,char>::t(); bug<int,char>::t();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment