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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [obj-c++.dg/] [qual-types-1.mm] - Blame information for rev 703

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 703 jeremybenn
/* Test if ObjC++ can distinguish protocol qualifiers from
2
   template arguments.  */
3
/* Author:  Ziemowit Laski .  */
4
 
5
/* { dg-do run } */
6
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
7
#include "../objc-obj-c++-shared/TestsuiteObject.m"
8
#include 
9
 
10
#define CHECK_IF(expr) if(!(expr)) abort()
11
 
12
@protocol Zone
13
+ allocFromZone:(void *)zone;
14
- copyFromZone:(void *)zone;
15
@end
16
 
17
@protocol Init 
18
+ initialize;
19
- init;
20
@end
21
 
22
@interface Foo: TestsuiteObject
23
{ @public int val; }
24
- init;
25
@end
26
 
27
template  struct X {
28
  T x; U y;
29
};
30
 
31
X xx;
32
 
33
template  struct Holder
34
{
35
  T *obj;
36
  static int counter;
37
  Holder(void) { obj = [[T alloc] init]; }
38
  ~Holder(void) { [obj free]; --counter; }
39
  id  getObjId(void) { return obj; }
40
  TestsuiteObject  *getObj(void) { return obj; }
41
};
42
 
43
typedef Holder  > FooHolder;
44
 
45
@implementation Foo
46
-(id) init {
47
  [super init];
48
  val = ++FooHolder::counter;
49
  return self;
50
}
51
@end
52
 
53
template 
54
int Holder::counter = 0;
55
 
56
int main (void) {
57
  CHECK_IF(FooHolder::counter == 0);
58
  {
59
    FooHolder holder;
60
    CHECK_IF(holder.obj->val == 1);
61
    CHECK_IF(FooHolder::counter == 1);
62
    FooHolder holder2;
63
    CHECK_IF(holder2.obj->val == 2);
64
    CHECK_IF(FooHolder::counter == 2);
65
  }
66
  CHECK_IF(FooHolder::counter == 0);
67
  return 0;
68
}
69
 

powered by: WebSVN 2.1.0

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