// { dg-do run { target c++17 } }
// { dg-options "-Wno-deprecated" }
// { dg-require-weak "" }
// { dg-additional-sources "inline-var1a.C" }

#include "inline-var1.h"

static inline int var19 = bar (0);
static int inline var20 = bar (1);
extern inline int var23;
inline int var21 = foo (6);
inline int var22 = foo (7);
extern inline int var23, var22;
inline int var23 = foo (8);

static int v, w = 64 + 2;

int
foo (int x)
{
  if (x != v++)
    __builtin_abort ();
  return 36 + x;
}

int
bar (int x)
{
  if (v < 6)
    __builtin_abort ();
  if ((x >> 4) != (w >> 4))
    {
      if ((x & 15) != 0 || (w & 15) != 2)
	__builtin_abort ();
      w = x + 1;
    }
  else if (x != w++)
    __builtin_abort ();
  return 46 + x;
}

int &ref1 = var1;
int &ref2 = N::var2;
const int &ref3 = S::var3;
int &ref4 = S::var4;
const int &ref5 = S::var5;
const int &ref6 = N::var6;
int &ref7 = var7;
double &ref8 = N::var8;
double &ref9 = S::var9;
const int &ref11 = S::var11;
int &ref12 = var12;
int &ref13 = var13;
int &ref14 = U::var14;
T &ref15 = U::var15;
T &ref16 = U::var16;
int &ref17 = U::var17;
const double &ref18 = U::var18;
int &ref19 = var19;
int &ref20 = var20;
int &ref21 = var21;
int &ref22 = var22;
int &ref23 = var23;
const int &ref24 = Y<int>::var24;
int &ref25 = Y<int>::var25;
int &ref26 = Y<int>::var26;
int &ref27 = var27<int>;
const int &ref28 = Y<int>::var28;
const char &ref24a = Y<char>::var24;
char &ref25a = Y<char>::var25;
int &ref26a = Y<char>::var26;
char &ref27a = var27<char>;
const char &ref28a = Y<char>::var28;
extern int &alt1;
extern int &alt2;
extern const int &alt3;
extern int &alt4;
extern const int &alt5;
extern const int &alt6;
extern int &alt7;
extern double &alt8;
extern double &alt9;
extern const int &alt11;
extern int &alt12;
extern int &alt13;
extern int &alt14;
extern T &alt15;
extern T &alt16;
extern int &alt17;
extern const double &alt18;
extern int &alt19;
extern int &alt20;
extern int &alt21;
extern int &alt22;
extern int &alt23;
extern const int &alt24;
extern int &alt25;
extern int &alt26;
extern int &alt27;
extern const int &alt28;
extern const char &alt24a;
extern char &alt25a;
extern int &alt26a;
extern char &alt27a;
extern const char &alt28a;

int
main ()
{
  if (v != 9)
    __builtin_abort ();
  if (var1 != 4
      || N::var2 != 0
      || S::var3 != 5
      || S::var4 != 6
      || S::var5 != 7
      || N::var6 != 8
      || var7 != 9
      || N::var8 != 2.0
      || S::var9 != 3.0
      || sizeof (N::var10) != 1
      || S::var11 != 11
      || var12 != 36
      || var13 != 37
      || U::var14 != 38
      || U::var15.t != 39
      || U::var16.t != 40
      || U::var17 != 41
      || U::var18 != 4.0
      || var19 != 46
      || var20 != 47
      || var21 != 42
      || var22 != 43
      || var23 != 44
      || Y<int>::var24 != 6
      || Y<int>::var25 != 7
      || Y<int>::var26 != 8
      || var27<int> != 9
      || Y<int>::var28 != 10
      || Y<char>::var24 != 6
      || Y<char>::var25 != 7
      || Y<char>::var26 != 8
      || var27<char> != 9
      || Y<char>::var28 != 10)
    __builtin_abort ();
  if (ref1 != 4
      || ref2 != 0
      || ref3 != 5
      || ref4 != 6
      || ref5 != 7
      || ref6 != 8
      || ref7 != 9
      || alt7 != 9
      || ref8 != 2.0
      || alt8 != 2.0
      || ref9 != 3.0
      || ref11 != 11
      || ref12 != 36
      || ref13 != 37
      || ref14 != 38
      || ref15.t != 39
      || ref16.t != 40
      || ref17 != 41
      || ref18 != 4.0
      || ref19 != 46
      || alt19 != 62
      || ref20 != 47
      || alt20 != 63
      || ref21 != 42
      || ref22 != 43
      || ref23 != 44
      || ref24 != 6
      || ref25 != 7
      || ref26 != 8
      || ref27 != 9
      || ref28 != 10
      || ref24a != 6
      || ref25a != 7
      || ref26a != 8
      || ref27a != 9
      || ref28a != 10)
    __builtin_abort ();
  if (&ref1 != &alt1
      || &ref2 != &alt2
      || &ref3 != &alt3
      || &ref4 != &alt4
      || &ref5 != &alt5
      || &ref6 != &alt6
      || &ref7 == &alt7
      || &ref8 == &alt8
      || &ref9 != &alt9
      || &ref11 != &alt11
      || &ref12 != &alt12
      || &ref13 != &alt13
      || &ref14 != &alt14
      || &ref15 != &alt15
      || &ref16 != &alt16
      || &ref17 != &alt17
      || &ref18 != &alt18
      || &ref19 == &alt19
      || &ref20 == &alt20
      || &ref21 != &alt21
      || &ref22 != &alt22
      || &ref23 != &alt23
      || &ref24 != &alt24
      || &ref25 != &alt25
      || &ref26 != &alt26
      || &ref27 != &alt27
      || &ref28 != &alt28
      || &ref24a != &alt24a
      || &ref25a != &alt25a
      || &ref26a != &alt26a
      || &ref27a != &alt27a
      || &ref28a != &alt28a)
    __builtin_abort ();
}
