/* Copyright (C) 2015-2021 Free Software Foundation, Inc.

   Contributed by Intel Corp. <walfred.tedeschi@intel.com>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#define OUR_SIZE    5

int gx[OUR_SIZE];
int ga[OUR_SIZE];
int gb[OUR_SIZE];
int gc[OUR_SIZE];
int gd[OUR_SIZE];

int
bp1 (int value)
{
  return 1;
}

int
bp2 (int value)
{
  return 1;
}

void
upper (int * p, int * a, int * b, int * c, int * d, int len)
{
  int value;
  value = *(p + len);
  value = *(a + len);
  value = *(b + len);
  value = *(c + len);
  value = *(d + len);
}

void
lower (int * p, int * a, int * b, int * c, int * d, int len)
{
  int value;
  value = *(p - len);
  value = *(a - len);
  value = *(b - len);
  value = *(c - len);
  bp2 (value);
  value = *(d - len);
}

int
main (void)
{
  int sx[OUR_SIZE];
  int sa[OUR_SIZE];
  int sb[OUR_SIZE];
  int sc[OUR_SIZE];
  int sd[OUR_SIZE];
  int *x, *a, *b, *c, *d;

  x = calloc (OUR_SIZE, sizeof (int));
  a = calloc (OUR_SIZE, sizeof (int));
  b = calloc (OUR_SIZE, sizeof (int));
  c = calloc (OUR_SIZE, sizeof (int));
  d = calloc (OUR_SIZE, sizeof (int));

  upper (x, a, b, c, d, OUR_SIZE + 2);
  upper (sx, sa, sb, sc, sd, OUR_SIZE + 2);
  upper (gx, ga, gb, gc, gd, OUR_SIZE + 2);
  lower (x, a, b, c, d, 1);
  lower (sx, sa, sb, sc, sd, 1);
  bp1 (*x);
  lower (gx, ga, gb, gc, gd, 1);

  free (x);
  free (a);
  free (b);
  free (c);
  free (d);

  return 0;
}
