view gcc/testsuite/g++.dg/cpp1z/inline-var3.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 84e7813d76e9
children
line wrap: on
line source

// { 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