# Nonsensical program used to generate an example DWARF4 and DWARF5 file.
# The generated code is the same, but the DWARF representation is different.

# = hello.h =

extern int m;
extern int baz (int x);

static inline int
frob (int a, int b)
{
  int c = a;

  if (a > b)
    c -= b;

  return baz (c);
}

# = hello.c =

#include <stddef.h>
#include "hello.h"

extern int main (int, char **);
int m = 2;

wchar_t foo (wchar_t);
int baz (int x)
{
  int r = x;

  if (x > m)
    r -= m;

  r = foo (r);
  return r;
}

wchar_t
foo (wchar_t f)
{
  if (f < 0)
    return main (f, NULL);

  return f > 0 ? frob (f - 1, m) : 0;
}

# = world.c =

#include "hello.h"
#include <stdlib.h>

int
calc (const char *word)
{
  if (word == 0 || word[0] == '\0')
    return 0;

  return frob (word[0], m + 42);
}

int
main (int argc, const char **argv)
{
  const char *n;
  if (argc > 1)
    n = argv[0];
  else
    n = "world";

  exit (calc (n));
}

$ gcc -gdwarf-4 -gno-as-loc-support -gno-variable-location-views -O2 -c world.c
$ gcc -gdwarf-4 -gno-as-loc-support -gno-variable-location-views -O2 -c hello.c
$ gcc -o testfile-dwarf-4 hello.o world.o

$ gcc -gdwarf-5 -gno-as-loc-support -gno-variable-location-views -O2 -c world.c
$ gcc -gdwarf-5 -gno-as-loc-support -gno-variable-location-views -O2 -c hello.c
$ gcc -o testfile-dwarf-5 hello.o world.o

$ gcc -gdwarf-4 -gsplit-dwarf -gno-as-loc-support -gno-variable-location-views -O2 -o testfile-world4.o -c world.c
$ gcc -gdwarf-4 -gsplit-dwarf -gno-as-loc-support -gno-variable-location-views -O2 -o testfile-hello4.o -c hello.c
$ gcc -o testfile-splitdwarf-4 testfile-hello4.o testfile-world4.o

$ gcc -gdwarf-5 -gsplit-dwarf -gno-as-loc-support -gno-variable-location-views -O2 -o testfile-world5.o -c world.c
$ gcc -gdwarf-5 -gsplit-dwarf -gno-as-loc-support -gno-variable-location-views -O2 -o testfile-hello5.o -c hello.c
$ gcc -o testfile-splitdwarf-5 testfile-hello5.o testfile-world5.o
