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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.old-deja/] [g++.benjamin/] [scope02.C] - Blame information for rev 749

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 699 jeremybenn
// { dg-do assemble  }
2
//980529 bkoz
3
//3.4.5 Class member access via pointer and non-pointer
4
// non-nested dtor calls
5
 
6
int counter = 0;
7
 
8
struct X {
9
  int rank;
10
  X(int init = 64) : rank(init) { }
11
  ~X() { ++counter; }
12
  typedef X classtype;
13
};
14
typedef X globaltype;
15
 
16
#if 0
17
template 
18
struct X_tem {
19
  T rank;
20
  X_tem(T init = T(64) ) : rank(init) { }
21
  ~X_tem() { ++counter; }
22
  typedef X_tem classtype_tem;
23
};
24
typedef X_tem globaltype_tem;
25
#endif
26
 
27
 
28
 
29
 
30
int main(void)
31
{
32
  // 3.4.5 Class member access
33
  // p 2
34
  // if the id-expression in a class member access is an
35
  // unqualified-id, and the type of the object expression is of class
36
  // type C (or pointer to class type C), the unqualified-id is looked
37
  // up in the scope of class C. If the type of the object-expression
38
  // is of pointer to scalar type, the unqualified-id is looked up in
39
  // the context of the complete postfix-expression.
40
 
41
  // p 3
42
  // if the unqualitified id is ~type-name, and the type of the object
43
  // expression is of a class type C (or pointer to class type C), the
44
  // type-name is looked up in the context of the entire
45
  // postfix-expression and in the scope of class C. The type-name
46
  // shall refer to a class-name. If type-name is found in both
47
  // contexts, the name shall refer to the same class type. If the
48
  // type of the object expression is of scalar type, the type-name is
49
  // looked up in the complete postfix-expression.
50
 
51
  typedef X localtype;
52
 
53
  //
54
  // 1 non-templatized, pointer, unqualified
55
  //
56
  X x01 ;
57
  X *px = &x01;
58
  px->~X();
59
 
60
  X x02 (66);
61
  px = &x02;
62
  px->~localtype();
63
 
64
  X x03 (68);
65
  px = &x03;
66
  px->~classtype(); //-g++  //p3: unqual-id lookup in object and postfix-expr
67
 
68
  X x04 (70);
69
  px = &x04;
70
  px->~globaltype();
71
 
72
 
73
  // p 1
74
  // . . . the id-expression is first looked up in the class of the
75
  // object-expression. If the identifier is not found, itis then
76
  // looked up in the context of the entier postfix-expression and
77
  // shall name a class or function template. If the lookup in the
78
  // class of the object-expression finds a template, the name is also
79
  // looked up in teh context of the entier postfix-expression and
80
  // 1 if the name is not found, use the name from the object-expr
81
  // 2 if the name found in postfix-expr != class template, use object-expr
82
  // 3 if name found is class template, name must match object-expr or error
83
 
84
  // p 4
85
 
86
  // if the id-expr in a class member acess is a qualified-id, the
87
  // id-expression is looked up in both the context of the entire
88
  // postfix-expr and in the scope of the class of the object-expr. If
89
  // the name is found in both contexts, the id-expr shall refer to
90
  // the same entity.
91
 
92
 
93
  //
94
  // 2 non-templatized, pointer, qualified
95
  //
96
  X x05 ;
97
  px = &x05;
98
  px->X::~X();
99
 
100
  X x06 (66);
101
  px = &x06;
102
  px->X::~localtype();
103
 
104
  X x07 (68);
105
  px = &x07;
106
  px->X::~classtype(); // -edg
107
 
108
  X x08 (70);
109
  px = &x08;
110
  px->X::~globaltype();
111
 
112
  X x09 (66);
113
  px = &x09;
114
  px->localtype::~localtype();
115
 
116
  X x10 (68);
117
  px = &x10;
118
  px->classtype::~classtype();
119
 
120
  X x11 (70);
121
  px = &x11;
122
  px->globaltype::~globaltype();
123
 
124
  X x12 (66);
125
  px = &x12;
126
  px->classtype::~localtype();
127
 
128
  X x13 (68);
129
  px = &x13;
130
  px->globaltype::~localtype();
131
 
132
  X x14 (70);
133
  px = &x14;
134
  px->localtype::~globaltype();
135
 
136
  X x15 (70);
137
  px = &x15;
138
  px->classtype::~globaltype();
139
 
140
  X x16 (70);
141
  px = &x16;
142
  px->localtype::~classtype(); //-edg
143
 
144
  X x17 (70);
145
  px = &x17;
146
  px->globaltype::~classtype(); //-edg
147
 
148
#if 0
149
  //
150
  // non-templatized, non-pointer
151
  //
152
  X xo5 ;
153
  xo5.~X(); //unqualified
154
 
155
  localtype xo6 (66);
156
  xo6.~localtype();
157
 
158
  X xo7 (68);
159
  xo7.~classtype();
160
 
161
  X xo8 (70);
162
  xo8.~globaltype();
163
 
164
 
165
  //
166
  // templatized, pointer
167
  //
168
  X_tem xto1 ;
169
  X_tem *pxt = &xto1;
170
  pxt->~X_tem(); //unqualified
171
 
172
  typedef X_tem localtype_tem;
173
  localtype_tem xto2 (66);
174
  pxt = &xto2;
175
  pxt->~localtype_tem();
176
 
177
  //paragraph 2:  unqualitifed id looked up in scope of post-fix expr if object
178
  X_tem xto3 (68);
179
  pxt = &xto3;
180
  pxt->~classtype_tem();
181
 
182
  X_tem xto4 (70);
183
  pxt = &xto4;
184
  pxt->~globaltype_tem();
185
 
186
  //
187
  // templatized, non-pointer
188
  //
189
  X_tem xto5 ;
190
  xto5.~X_tem(); //unqualified
191
 
192
  localtype_tem xto6 (66);
193
  xto6.~localtype_tem();
194
 
195
  X_tem xto7 (68);
196
  xto7.~classtype_tem();
197
 
198
  X_tem xto8 (70);
199
  xto8.~globaltype_tem();
200
#endif
201
  return 0;
202
}
203
 
204
 
205
 
206
 
207
 
208
 

powered by: WebSVN 2.1.0

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