// { dg-do compile }
// { dg-options "-g0" }
// Verify that inline variables and static data members that aren't odr-used
// aren't emitted into assembly even at -O0.
// { dg-final { scan-assembler-not "inlvarvariable" } }

inline int inlvarvariable1 = 1;				// { dg-warning "1:inline variables are only available with" "" { target c++14_down } }
const inline int inlvarvariable2 = 2;			// { dg-warning "7:inline variables are only available with" "" { target c++14_down } }
namespace N
{
  int inline inlvarvariable3;				// { dg-warning "7:inline variables are only available with" "" { target c++14_down } }
  const int inline inlvarvariable4 = 4;			// { dg-warning "13:inline variables are only available with" "" { target c++14_down } }
}
struct S
{
  static inline double inlvarvariable5 = 5.0;		// { dg-warning "10:inline variables are only available with" "" { target c++14_down } }
#if __cplusplus >= 201103L
  static constexpr int inlvarvariable6 = 6;
  static inline constexpr int inlvarvariable7 = 7;	// { dg-warning "10:inline variables are only available with" "" { target { c++11 && c++14_down } } }
#endif
};
template <int N>					// { dg-warning "variable templates only available with" "" { target c++11_down } .+1 }
inline int inlvarvariable8;				// { dg-warning "1:inline variables are only available with" "" { target c++14_down } }
template <int N>					// { dg-warning "variable templates only available with" "" { target c++11_down } .+1 }
const int inline inlvarvariable9 = 9;			// { dg-warning "11:inline variables are only available with" "" { target c++14_down } }
namespace N
{
  template <int N>					// { dg-warning "variable templates only available with" "" { target c++11_down } .+1 }
  int inline inlvarvariable10 = 10;			// { dg-warning "7:inline variables are only available with" "" { target c++14_down } }
  template <int N>					// { dg-warning "variable templates only available with" "" { target c++11_down } .+1 }
  const inline double inlvarvariable11 = 11.0;		// { dg-warning "9:inline variables are only available with" "" { target c++14_down } }
}
template <int N>
struct T
{
  static inline int inlvarvariable12 = 12;		// { dg-warning "10:inline variables are only available with" "" { target c++14_down } }
#if __cplusplus >= 201103L
  static constexpr int inlvarvariable13 = 13;
  static inline constexpr double inlvarvariable14 = 14.0; // { dg-warning "10:inline variables are only available with" "" { target { c++11 && c++14_down } } }
#endif
};
#if __cplusplus < 201103L
#define decltype(x) int
#endif
decltype (inlvarvariable1) v1 = inlvarvariable2 + sizeof (inlvarvariable1);
decltype (N::inlvarvariable3) v2 = N::inlvarvariable4 + sizeof (N::inlvarvariable3);
#if __cplusplus >= 201103L
decltype (S::inlvarvariable6) v3 = sizeof (S::inlvarvariable5) + S::inlvarvariable6 + S::inlvarvariable7;
#else
int v3 = sizeof (S::inlvarvariable5);
#endif
decltype (inlvarvariable8<2>) v4 = inlvarvariable9<2> + sizeof (inlvarvariable8<2>);
decltype (N::inlvarvariable10<0>) v5 = sizeof (N::inlvarvariable10<0>) + sizeof (N::inlvarvariable11<0>);
#if __cplusplus >= 201103L
decltype (T<-1>::inlvarvariable12) v6 = sizeof (T<-1>::inlvarvariable14) + sizeof (T<-1>::inlvarvariable12) + T<-1>::inlvarvariable13;
#else
int v6 = sizeof (T<-1>::inlvarvariable12);
#endif
