align-test-5e.c   [plain text]


/* APPLE LOCAL file radar 4646337 */
/* align-test-5*.c are all the same code but with different options.  */

/* { dg-do run { target *-*-darwin* } } */

/*
 * GCC alignment test for command line options for setting alignment modes.
 * Bill Wendling
 * Apple Computer, Inc.
 * Copyright (C) 2006
 * Last modified 2006-8-10
 */
 
#include <stdio.h>
#include <stddef.h>
#include <string.h>

#if defined(__x86_64__) || defined(__ppc64__)
/* 64-bit platforms say that the structure will be 16 bytes */
#define SIZE 16
#else
/* Others claim 12 bytes */
#define SIZE 12
#endif

static int bad_option = 0;
static int flag_verbose = 0;
static int nbr_failures = 0;

typedef struct S0 {
  unsigned char f1;
  double f2;
} S0;

static void check (const char* rec_name, int actual, int expected,
		   const char* comment)
{
  if (flag_verbose || actual != expected)
    {
      printf ("%-20s = %2d (%2d) ", rec_name, actual, expected);

      if (actual != expected)
	{
	  printf ("*** FAIL");
	  ++nbr_failures;
        }
      else if (flag_verbose)
	printf ("    PASS");

      printf (": %s\n", comment);
    }
}

static void check_option (char* option)
{
  if (*option == '-')
    {
      if (strcmp (option, "-v") == 0)
	flag_verbose = 1;
      else
	{
	  fprintf (stderr, "*** unrecognized option '%s'.\n", option);
	  bad_option = 1;
	}
    }
  else
    {
      fprintf (stderr, "*** unrecognized option '%s'.\n", option);
      bad_option = 1;
    }
}

int main (int argc, char* argv[])
{
  int i;
    
  for (i = 1; i < argc; i++)
    check_option (argv[i]);
    
  if (bad_option)
    return 1;

#define M(x) "sizeof ("#x")", sizeof (x)

  check(M(S0), SIZE, "struct with 1 char, 1 double");

  return nbr_failures;
}