From b74b7579245cc7724490f6038908858963ac3104 Mon Sep 17 00:00:00 2001 From: Nicola Pero Date: Sun, 5 Jun 2011 11:10:31 +0000 Subject: [PATCH] In gcc/testsuite/: 2011-06-05 Nicola Pero In gcc/testsuite/: 2011-06-05 Nicola Pero * objc.dg/gnu-api-2-objc.m: Fixed testcase. Use log2 of the alignment, not the alignment, when calling class_addIvar(). Add an 'isa' instance variable to the test root class. * obj-c++.dg/gnu-api-2-objc.mm: Likewise. From-SVN: r174656 --- gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/obj-c++.dg/gnu-api-2-objc.mm | 24 +++++++++++++++++++--- gcc/testsuite/objc.dg/gnu-api-2-objc.m | 24 +++++++++++++++++++--- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c4080ff2930..7194f87fac4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2011-06-05 Nicola Pero + + * objc.dg/gnu-api-2-objc.m: Fixed testcase. Use log2 of the + alignment, not the alignment, when calling class_addIvar(). Add + an 'isa' instance variable to the test root class. + * obj-c++.dg/gnu-api-2-objc.mm: Likewise. + 2011-06-04 Jan Hubicka PR tree-optimization/48893 diff --git a/gcc/testsuite/obj-c++.dg/gnu-api-2-objc.mm b/gcc/testsuite/obj-c++.dg/gnu-api-2-objc.mm index 90da96ae5c1..ce70c5e434f 100644 --- a/gcc/testsuite/obj-c++.dg/gnu-api-2-objc.mm +++ b/gcc/testsuite/obj-c++.dg/gnu-api-2-objc.mm @@ -45,6 +45,23 @@ - (id) variable { return variable_ivar; } @end +/* Hack to calculate the log2 of a byte alignment. */ +unsigned char +log_2_of (unsigned int x) +{ + unsigned char result = 0; + + /* We count how many times we need to divide by 2 before we reach 1. + This algorithm is good enough for the small numbers (such as 8, + 16 or 64) that we have to deal with. */ + while (x > 1) + { + x = x / 2; + result++; + } + + return result; +} int main () { @@ -56,8 +73,9 @@ int main () Class new_class = objc_allocateClassPair (objc_getClass ("MyRootClass"), "MyNewSubClass", 0); /* A new root class would obviously need at least an 'isa' - instance variable. We don't add it so we never actually - instantiate an instance of the class, which wouldn't work. */ + instance variable. */ + class_addIvar (new_root_class, "isa", sizeof (Class), log_2_of (__alignof__ (Class)), + @encode (Class)); objc_registerClassPair (new_root_class); objc_registerClassPair (new_class); @@ -114,7 +132,7 @@ int main () /* Add a bit of everything to the class to exercise undoing all these changes. */ /* Instance variable. */ - class_addIvar (new_class, "my_variable", sizeof (float), __alignof__ (float), @encode (float)); + class_addIvar (new_class, "my_variable", sizeof (float), log_2_of (__alignof__ (float)), @encode (float)); /* Instance method. */ class_addMethod (new_class, @selector (setVariable:), method_getImplementation (method), diff --git a/gcc/testsuite/objc.dg/gnu-api-2-objc.m b/gcc/testsuite/objc.dg/gnu-api-2-objc.m index 59344efaf27..d1177d70e53 100644 --- a/gcc/testsuite/objc.dg/gnu-api-2-objc.m +++ b/gcc/testsuite/objc.dg/gnu-api-2-objc.m @@ -45,6 +45,23 @@ - (id) variable { return variable_ivar; } @end +/* Hack to calculate the log2 of a byte alignment. */ +unsigned char +log_2_of (unsigned int x) +{ + unsigned char result = 0; + + /* We count how many times we need to divide by 2 before we reach 1. + This algorithm is good enough for the small numbers (such as 8, + 16 or 64) that we have to deal with. */ + while (x > 1) + { + x = x / 2; + result++; + } + + return result; +} int main(int argc, void **args) { @@ -56,8 +73,9 @@ int main(int argc, void **args) Class new_class = objc_allocateClassPair (objc_getClass ("MyRootClass"), "MyNewSubClass", 0); /* A new root class would obviously need at least an 'isa' - instance variable. We don't add it so we never actually - instantiate an instance of the class, which wouldn't work. */ + instance variable. */ + class_addIvar (new_root_class, "isa", sizeof (Class), log_2_of (__alignof__ (Class)), + @encode (Class)); objc_registerClassPair (new_root_class); objc_registerClassPair (new_class); @@ -114,7 +132,7 @@ int main(int argc, void **args) /* Add a bit of everything to the class to exercise undoing all these changes. */ /* Instance variable. */ - class_addIvar (new_class, "my_variable", sizeof (float), __alignof__ (float), @encode (float)); + class_addIvar (new_class, "my_variable", sizeof (float), log_2_of (__alignof__ (float)), @encode (float)); /* Instance method. */ class_addMethod (new_class, @selector (setVariable:), method_getImplementation (method), -- 2.30.2