In gcc/testsuite/: 2011-06-05 Nicola Pero <nicola.pero@meta-innovation.com>

In gcc/testsuite/:
2011-06-05  Nicola Pero  <nicola.pero@meta-innovation.com>

	* 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
This commit is contained in:
Nicola Pero 2011-06-05 11:10:31 +00:00 committed by Nicola Pero
parent 586e6d03db
commit b74b757924
3 changed files with 49 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2011-06-05 Nicola Pero <nicola.pero@meta-innovation.com>
* 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 <jh@suse.cz>
PR tree-optimization/48893

View File

@ -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),

View File

@ -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),