aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm')
-rw-r--r--gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm43
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm b/gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm
new file mode 100644
index 000000000..129215087
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm
@@ -0,0 +1,43 @@
+// Check if ivars may be accessed via the C++ dot notation.
+// { dg-do run }
+// { dg-options "-fno-objc-call-cxx-cdtors" }
+// { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } }
+
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include <stdlib.h>
+#define CHECK_IF(expr) if(!(expr)) abort()
+
+struct cxx_struct {
+ int a, b;
+ void set_values (int _a, int _b = 3) {
+ a = _a; b = _b;
+ }
+ ~cxx_struct (void) {
+ a = b = 99;
+ }
+};
+
+@interface Manip : TestsuiteObject {
+ int c;
+ cxx_struct s; // { dg-warning "user-defined destructor" }
+ // { dg-warning "constructors and destructors will not be invoked" "" { target *-*-* } 22 }
+}
+- (void) manipulate_ivars;
+@end
+
+@implementation Manip
+- (void) manipulate_ivars {
+ s.set_values (7);
+ CHECK_IF (s.a == 7 && s.b == 3);
+ s.~cxx_struct();
+ CHECK_IF (s.a == 99 && s.b == 99);
+}
+@end
+
+int main (void)
+{
+ Manip *obj = [Manip new];
+ [obj manipulate_ivars];
+ [obj free];
+}
+