OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [testsuite/] [objc/] [execute/] [bycopy-3.m] - Rev 826

Compare with Previous | Blame | View Log

/*
 * Contributed by Nicola Pero <nicola@brainstorm.co.uk>
 * Wed Feb 28 12:27:03 CET 2001
 */
 
/*
 * This test contains some no-op code which is needed to keep it
 * compile on broken gcc 3.x.  Anyway, the no-op code does not
 * interfere with what we are testing, which is that the `bycopy'
 * keyword generates the _F_BYCOPY qualifier for the return type.  */
 
#include "../../objc-obj-c++-shared/next-mapping.h"
#include "../../objc-obj-c++-shared/Protocol1.h"
 
#ifndef __NEXT_RUNTIME__
#include <objc/encoding.h>
#endif
 
@protocol MyProtocol
+ (bycopy id<MyProtocol>) bycopyMethod;
@end
 
/* This no-op class to keep it compile under broken gcc 3.x */
@interface MyObject : Object <MyProtocol> 
@end
 
@implementation MyObject
+ (bycopy id<MyProtocol>) bycopyMethod
{
  return [MyObject alloc];
}
@end
 
int main (void)
{
  struct objc_method_description *method;
  const char *method_types;
  unsigned qualifiers;
  Protocol *protocol;
  /* This no-op command is needed to keep the test compile on broken
     gcc 3.x */
  MyObject *object = [MyObject bycopyMethod];
 
  /* Get the protocol object */
  protocol = @protocol (MyProtocol);
 
  /* Ask to the protocol for the description of the method bycopyMethod */
  method = [protocol descriptionForClassMethod: @selector (bycopyMethod)];
  if (method == NULL)
    {
      printf ("Could not find method bycopyMethod in protocol!\n");
      exit (1);
    }
 
  /* Get the method types for the method - which encode return type,
     arguments etc. */
  method_types = method->types;
 
  /* Get the qualifiers for the return type */
  qualifiers = objc_get_type_qualifiers (method_types);
 
  /* If _F_BYCOPY is not there, the compiler is broken */
  if (! (qualifiers & _F_BYCOPY))
    {
      printf ("Failed - selector does not contain _F_BYCOPY qualifier!\n");
      exit (1);
    }
 
  /* Else, happy end */
  return 0;
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.