/* This test script is part of GDB, the GNU debugger.

   Copyright 2007, 2008 Free Software Foundation, Inc.

   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 2 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, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   */


typedef struct {
   char *_m2_contents;
   int _m2_high;
} unbounded;


static int
foo (unbounded a)
{
  if (a._m2_contents[3] == 'd')
    return 0;
  else
    return 1;
}


main ()
{
  unbounded t;
  char data[6];
  char *input = "abcde";
  int i;

  t._m2_contents = (char *)&data;
  t._m2_high = 4;
  /* include the <nul> in the string, even though high is set to 4.  */
  
  for (i=0; i<6; i++)
    data[i] = input[i];
  return foo (t);
}
