OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [obj-c++.dg/] [bitfield-1.mm] - Diff between revs 308 and 338

Only display areas with differences | Details | Blame | View Log

Rev 308 Rev 338
/* Check if ObjC class layout follows the ABI (informally)
/* Check if ObjC class layout follows the ABI (informally)
   set in the past.  ObjC structs must be laid out as if
   set in the past.  ObjC structs must be laid out as if
   all ivars, including those inherited from superclasses,
   all ivars, including those inherited from superclasses,
   were defined at once (i.e., any padding introduced for
   were defined at once (i.e., any padding introduced for
   superclasses should be removed).  */
   superclasses should be removed).  */
/* Contributed by Ziemowit Laski .  */
/* Contributed by Ziemowit Laski .  */
/* { dg-do run } */
/* { dg-do run } */
/* { dg-options "-Wpadded -Wabi" } */
/* { dg-options "-Wpadded -Wabi" } */
/* Leave blank lines here to keep warnings on the same lines.  */
/* Leave blank lines here to keep warnings on the same lines.  */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/Object1.h"
#include 
#include 
#include 
#include 
#define CHECK_IF(expr) if(!(expr)) abort()
#define CHECK_IF(expr) if(!(expr)) abort()
enum Enum { zero, one, two, three, four };
enum Enum { zero, one, two, three, four };
@interface Base: Object {
@interface Base: Object {
@public
@public
  unsigned a: 2;
  unsigned a: 2;
  int b: 3;
  int b: 3;
  enum Enum c: 4;
  enum Enum c: 4;
  unsigned d: 5;
  unsigned d: 5;
} /* { dg-warning "padding struct size to alignment boundary" } */
} /* { dg-warning "padding struct size to alignment boundary" } */
@end
@end
struct Base_0 { /* { dg-warning "padding struct size to alignment boundary" } */
struct Base_0 { /* { dg-warning "padding struct size to alignment boundary" } */
  Class isa;
  Class isa;
  unsigned a: 2;
  unsigned a: 2;
  int b: 3;
  int b: 3;
  enum Enum c: 4;
  enum Enum c: 4;
  unsigned d: 5;
  unsigned d: 5;
};
};
@interface Derived: Base {
@interface Derived: Base {
@public
@public
  signed e: 5;
  signed e: 5;
  unsigned f: 4;
  unsigned f: 4;
  enum Enum g: 3;
  enum Enum g: 3;
}
}
@end
@end
struct Derived_0 {
struct Derived_0 {
  Class isa;
  Class isa;
  unsigned a: 2;
  unsigned a: 2;
  int b: 3;
  int b: 3;
  enum Enum c: 4;
  enum Enum c: 4;
  unsigned d: 5;
  unsigned d: 5;
  signed e: 5;
  signed e: 5;
  int f: 4;
  int f: 4;
  enum Enum g: 3;
  enum Enum g: 3;
};
};
@interface Leaf: Derived {
@interface Leaf: Derived {
@public
@public
  signed h: 2;
  signed h: 2;
}
}
@end
@end
struct Leaf_0 {
struct Leaf_0 {
  Class isa;
  Class isa;
  unsigned a: 2;
  unsigned a: 2;
  int b: 3;
  int b: 3;
  enum Enum c: 4;
  enum Enum c: 4;
  unsigned d: 5;
  unsigned d: 5;
  signed e: 5;
  signed e: 5;
  unsigned f: 4;
  unsigned f: 4;
  enum Enum g: 3;
  enum Enum g: 3;
  signed h: 2;
  signed h: 2;
};
};
/* Note that the semicolon after @defs(...) is optional.  */
/* Note that the semicolon after @defs(...) is optional.  */
typedef struct { @defs(Base) } Base_t; /* { dg-warning "padding struct size to alignment boundary" } */
typedef struct { @defs(Base) } Base_t; /* { dg-warning "padding struct size to alignment boundary" } */
typedef struct { @defs(Derived); } Derived_t;
typedef struct { @defs(Derived); } Derived_t;
typedef struct { @defs(Leaf); } Leaf_t;
typedef struct { @defs(Leaf); } Leaf_t;
int main(void)
int main(void)
{
{
  struct Leaf_0 l_0;
  struct Leaf_0 l_0;
  Leaf *l = (Leaf *)&l_0;
  Leaf *l = (Leaf *)&l_0;
  Leaf_t *l_t = (Leaf_t *)&l_0;
  Leaf_t *l_t = (Leaf_t *)&l_0;
  CHECK_IF(sizeof(Base_t) == sizeof(Base));
  CHECK_IF(sizeof(Base_t) == sizeof(Base));
  CHECK_IF(sizeof(Derived_t) == sizeof(Derived));
  CHECK_IF(sizeof(Derived_t) == sizeof(Derived));
  CHECK_IF(sizeof(Leaf_t) == sizeof(Leaf));
  CHECK_IF(sizeof(Leaf_t) == sizeof(Leaf));
  CHECK_IF(sizeof(struct Base_0) == sizeof(Base));
  CHECK_IF(sizeof(struct Base_0) == sizeof(Base));
  CHECK_IF(sizeof(struct Derived_0) == sizeof(Derived));
  CHECK_IF(sizeof(struct Derived_0) == sizeof(Derived));
  CHECK_IF(sizeof(struct Leaf_0) == sizeof(Leaf));
  CHECK_IF(sizeof(struct Leaf_0) == sizeof(Leaf));
  l_0.isa = (Class)0;
  l_0.isa = (Class)0;
  l_0.a = 3;
  l_0.a = 3;
  l_0.b = 0;
  l_0.b = 0;
  l_0.c = three;
  l_0.c = three;
  l_0.d = 31;
  l_0.d = 31;
  l_0.e = 0;
  l_0.e = 0;
  l_0.f = 15;
  l_0.f = 15;
  l_0.g = zero;
  l_0.g = zero;
  l_0.h = -2;
  l_0.h = -2;
  CHECK_IF(!l_t->isa);
  CHECK_IF(!l_t->isa);
  CHECK_IF(l->a == 3 && l_t->a == 3);
  CHECK_IF(l->a == 3 && l_t->a == 3);
  CHECK_IF(!l->b && !l_t->b);
  CHECK_IF(!l->b && !l_t->b);
  CHECK_IF(l->c == three && l_t->c == three);
  CHECK_IF(l->c == three && l_t->c == three);
  CHECK_IF(l->d == 31 && l_t->d == 31);
  CHECK_IF(l->d == 31 && l_t->d == 31);
  CHECK_IF(!l->e && !l_t->e);
  CHECK_IF(!l->e && !l_t->e);
  CHECK_IF(l->f == 15 && l_t->f == 15);
  CHECK_IF(l->f == 15 && l_t->f == 15);
  CHECK_IF(l->g == zero && l_t->g == zero);
  CHECK_IF(l->g == zero && l_t->g == zero);
  CHECK_IF(l->h == -2 && l_t->h == -2);
  CHECK_IF(l->h == -2 && l_t->h == -2);
  return 0;
  return 0;
}
}
/* { dg-prune-output "In file included from" }  Ignore this message.  */
/* { dg-prune-output "In file included from" }  Ignore this message.  */
/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */
/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 42 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 42 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 45 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 45 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 59 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 59 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 62 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 62 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 77 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 77 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 78 } */
/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 78 } */
 
 

powered by: WebSVN 2.1.0

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