parent
94e6e4c4f3
commit
5bf5c5cb52
|
@ -1,3 +1,7 @@
|
|||
2002-05-14 Jason Merrill <jason@redhat.com>, Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* g++.dg/init/pm1.C: New test.
|
||||
|
||||
2002-05-12 David S. Miller <davem@redhat.com>
|
||||
|
||||
* gcc.c-torture/execute/conversion.c (ldnear): Use long double
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
// { dg-do run }
|
||||
|
||||
// Copyright 2002 Free Software Foundation
|
||||
// Contributed by Jason Merrill and Alexandre Oliva
|
||||
|
||||
// Test zero-initialization of pointers to data members. Their NULL
|
||||
// value is represented with -1, not 0.
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
struct A
|
||||
{
|
||||
int i;
|
||||
};
|
||||
|
||||
int A::* gp;
|
||||
|
||||
typedef int A::* iApm;
|
||||
|
||||
iApm gp_zero = 0;
|
||||
iApm gp_dflt = iApm();
|
||||
iApm gp_cast = (iApm)0;
|
||||
iApm gp_func = iApm(0);
|
||||
iApm gp_stat = static_cast<iApm>(0);
|
||||
|
||||
struct AD : A {};
|
||||
|
||||
int AD::* gp_impl = gp_dflt;
|
||||
int AD::* gp_down = static_cast<int AD::*>(gp_stat);
|
||||
|
||||
int A::* ga[2];
|
||||
|
||||
// Test use in a simple struct.
|
||||
struct B
|
||||
{
|
||||
int A::* mp;
|
||||
};
|
||||
|
||||
B gb;
|
||||
|
||||
struct D;
|
||||
struct C;
|
||||
extern D gd;
|
||||
extern C gc;
|
||||
|
||||
// Test that in a class with a constructor, the pointer to member is
|
||||
// zero-initialized until the constructor is run.
|
||||
struct C
|
||||
{
|
||||
int A::* mp;
|
||||
inline C ();
|
||||
};
|
||||
|
||||
int fail;
|
||||
struct D
|
||||
{
|
||||
int count;
|
||||
inline D ();
|
||||
};
|
||||
|
||||
C::C() : mp (&A::i) { gd.count++; }
|
||||
|
||||
D::D() : count (0)
|
||||
{
|
||||
if (gc.mp != 0)
|
||||
abort ();
|
||||
}
|
||||
|
||||
// The D must come first for this to work.
|
||||
D gd;
|
||||
C gc;
|
||||
|
||||
int main()
|
||||
{
|
||||
static int A::* slp;
|
||||
static int A::* sla[2];
|
||||
static B slb;
|
||||
|
||||
if (gp != 0 || slp != 0
|
||||
|| gp_zero != 0 || gp_dflt != 0 || gp_cast != 0
|
||||
|| gp_func != 0 || gp_stat != 0
|
||||
|| gp_impl != 0 || gp_down != 0)
|
||||
abort ();
|
||||
if (ga[1] != 0 || sla[1] != 0)
|
||||
abort ();
|
||||
if (gb.mp != 0 || slb.mp != 0)
|
||||
abort ();
|
||||
}
|
Loading…
Reference in New Issue