xref: /aosp_15_r20/external/clang/test/CodeGenObjC/2008-10-3-EhValue.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang -fexceptions -fobjc-exceptions -S -emit-llvm  %s -o /dev/null
2*67e74705SXin Li
3*67e74705SXin Li@interface Object {
4*67e74705SXin Li@public
5*67e74705SXin Li     Class isa;
6*67e74705SXin Li}
7*67e74705SXin Li+initialize;
8*67e74705SXin Li+alloc;
9*67e74705SXin Li+new;
10*67e74705SXin Li+free;
11*67e74705SXin Li-free;
12*67e74705SXin Li+(Class)class;
13*67e74705SXin Li-(Class)class;
14*67e74705SXin Li-init;
15*67e74705SXin Li-superclass;
16*67e74705SXin Li-(const char *)name;
17*67e74705SXin Li@end
18*67e74705SXin Li
19*67e74705SXin Li@interface Frob: Object
20*67e74705SXin Li@end
21*67e74705SXin Li
22*67e74705SXin Li@implementation Frob: Object
23*67e74705SXin Li@end
24*67e74705SXin Li
25*67e74705SXin Listatic Frob* _connection = ((void *)0);
26*67e74705SXin Li
27*67e74705SXin Liextern void abort(void);
28*67e74705SXin Li
29*67e74705SXin Livoid test (Object* sendPort)
30*67e74705SXin Li{
31*67e74705SXin Li int cleanupPorts = 1;
32*67e74705SXin Li Frob* receivePort = ((void *)0);
33*67e74705SXin Li
34*67e74705SXin Li @try {
35*67e74705SXin Li  receivePort = (Frob *) -1;
36*67e74705SXin Li  _connection = (Frob *) -1;
37*67e74705SXin Li  receivePort = ((void *)0);
38*67e74705SXin Li  sendPort = ((void *)0);
39*67e74705SXin Li  cleanupPorts = 0;
40*67e74705SXin Li  @throw [Object new];
41*67e74705SXin Li }
42*67e74705SXin Li @catch(Frob *obj) {
43*67e74705SXin Li  if(!(0)) abort();
44*67e74705SXin Li }
45*67e74705SXin Li @catch(id exc) {
46*67e74705SXin Li  if(!(!receivePort)) abort();
47*67e74705SXin Li  if(!(!sendPort)) abort();
48*67e74705SXin Li  if(!(!cleanupPorts)) abort();
49*67e74705SXin Li }
50*67e74705SXin Li}
51