cxx-ivars-2.mm

来自「用于进行gcc测试」· MM 代码 · 共 77 行

MM
77
字号
// Check if the '- .cxx_construct' and '-.cxx_destruct' methods get called// and if they perform their desired function.// { dg-do run { xfail { "*-*-*" } } } PR27247/PR23681// { dg-options "-fobjc-call-cxx-cdtors" }#include <objc/Object.h>#include <stdlib.h>#define CHECK_IF(expr) if(!(expr)) abort()static int ctor1_called, ctor2_called, dtor1_called;struct bar {  int a, b;  bar(void) {    a = 5; b = 6;    ctor1_called++;  }  ~bar(void) {    a = b = 99;    dtor1_called++;  }};struct boo: bar {  int c;  boo(int _c = 9): c(_c) {    ctor2_called++;  }};@interface Baz: Object {@public  bar aa;}@end@implementation Baz@end@interface Foo: Baz {@public  int a;  boo bb;  bar b;  float c;  bar d;}@end@implementation Foo@endint main (void){  CHECK_IF(!ctor1_called && !ctor2_called && !dtor1_called); /* are we sane? */  Baz *baz = [Baz new];  CHECK_IF(ctor1_called && !ctor2_called && !dtor1_called);  CHECK_IF(baz->aa.a == 5 && baz->aa.b == 6);  ctor1_called = 0;  /* reset */    [baz free];  CHECK_IF(!ctor1_called && !ctor2_called && dtor1_called);  dtor1_called = 0;  /* reset */  Foo *foo = [Foo new];  CHECK_IF(ctor1_called && ctor2_called && !dtor1_called);  CHECK_IF(foo->bb.a == 5 && foo->bb.b == 6 && foo->bb.c == 9);  CHECK_IF(foo->b.a == 5 && foo->b.b == 6);  CHECK_IF(foo->d.a == 5 && foo->d.b == 6);  ctor1_called = ctor2_called = 0;  /* reset */    [foo free];  CHECK_IF(!ctor1_called && !ctor2_called && dtor1_called);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?