mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-18 14:30:42 +08:00
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:
parent
586e6d03db
commit
b74b757924
@ -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
|
||||
|
@ -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),
|
||||
|
@ -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),
|
||||
|
Loading…
x
Reference in New Issue
Block a user