/* { dg-do run } */

#include "check.h"

#ifndef ALIGNMENT
#define ALIGNMENT       64
#endif

typedef int t_align __attribute__((aligned(ALIGNMENT)));


int global, global2;
void bar()
{
	volatile t_align a = 1;
        int i,j,k;
        i=j=k=0;
  	for (i=0; i < global; i++)
	  for (j=0; j < i; j++)
	    {
	      global2 = k;
	      throw 0;
	    }
	if (check_int ((int *) &a,  __alignof__(a)) != a)
	  abort ();
}

int main()
{
	int ll = 1;
        int i = 0,j = 1,k = 2,l = 3,m = 4,n = 5;
	try {
  	  for (; i < global; i++)
	  for (; j < i; j++)
	  for (; k < j; k++)
	  for (; l < k; l++)
	  for (; m < l; m++)
	  for (; n < m; n++)
     		global2 = k;
	  bar ();
	}
	catch (...)
	{
	}
	ll = i+j+k+l+m+n;
	if (ll != 15)
	{
#ifdef DEBUG
		printf("FAIL: sum %d != 15\n", ll);
#endif
		abort();
	}
	return 0;
}
