OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [g++.dg/] [init/] [pm1.C] - Blame information for rev 816

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 149 jeremybenn
// { dg-do run }
2
 
3
// Copyright 2002  Free Software Foundation
4
// Contributed by Jason Merrill and Alexandre Oliva
5
 
6
// Test zero-initialization of pointers to data members.  Their NULL
7
// value is represented with -1, not 0.
8
 
9
#include 
10
 
11
struct A
12
{
13
  int i;
14
};
15
 
16
int A::* gp;
17
 
18
typedef int A::* iApm;
19
 
20
iApm gp_zero = 0;
21
iApm gp_dflt = iApm();
22
iApm gp_cast = (iApm)0;
23
iApm gp_func = iApm(0);
24
iApm gp_stat = static_cast(0);
25
 
26
struct AD : A {};
27
 
28
int AD::* gp_impl = gp_dflt;
29
int AD::* gp_down = static_cast(gp_stat);
30
 
31
int A::* ga[2];
32
 
33
// Test use in a simple struct.
34
struct B
35
{
36
  int A::* mp;
37
};
38
 
39
B gb;
40
 
41
struct D;
42
struct C;
43
extern D gd;
44
extern C gc;
45
 
46
// Test that in a class with a constructor, the pointer to member is
47
// zero-initialized until the constructor is run.
48
struct C
49
{
50
  int A::* mp;
51
  inline C ();
52
};
53
 
54
int fail;
55
struct D
56
{
57
  int count;
58
  inline D ();
59
};
60
 
61
C::C() : mp (&A::i) { gd.count++; }
62
 
63
D::D() : count (0)
64
{
65
  if (gc.mp != 0)
66
    abort ();
67
}
68
 
69
// The D must come first for this to work.
70
D gd;
71
C gc;
72
 
73
int main()
74
{
75
  static int A::* slp;
76
  static int A::* sla[2];
77
  static B slb;
78
 
79
  if (gp != 0 || slp != 0
80
      || gp_zero != 0 || gp_dflt != 0 || gp_cast != 0
81
      || gp_func != 0 || gp_stat != 0
82
      || gp_impl != 0 || gp_down != 0)
83
    abort ();
84
  if (ga[1] != 0 || sla[1] != 0)
85
    abort ();
86
  if (gb.mp != 0 || slb.mp != 0)
87
    abort ();
88
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.