view gcc/testsuite/g++.dg/cpp2a/consteval11.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

// { dg-do compile }
// { dg-options "-std=c++2a" }

consteval int bar (int i) { if (i != 1) throw 1; return 0; }	// { dg-error "is not a constant expression" }

constexpr int a = bar (1);
constexpr int b = bar (2);		// { dg-message "in 'constexpr' expansion of" }
constexpr int c = 0 ? bar (3) : 1;	// { dg-message "in 'constexpr' expansion of" }
const int d = bar (4);			// { dg-message "in 'constexpr' expansion of" }
const int e = 0 ? bar (5) : 1;		// { dg-message "in 'constexpr' expansion of" }
int f = bar (1);
int g = bar (6);			// { dg-message "in 'constexpr' expansion of" }
int h = 0 ? bar (7) : 1;		// { dg-message "in 'constexpr' expansion of" }

void
foo ()
{
  constexpr int a = bar (1);
  constexpr int b = bar (2);		// { dg-message "in 'constexpr' expansion of" }
  constexpr int c = 0 ? bar (3) : 1;	// { dg-message "in 'constexpr' expansion of" }
  const int d = bar (4);		// { dg-message "in 'constexpr' expansion of" }
  const int e = 0 ? bar (5) : 1;	// { dg-message "in 'constexpr' expansion of" }
  int f = bar (1);
  int g = bar (6);			// { dg-message "in 'constexpr' expansion of" }
  int h = 0 ? bar (7) : 1;		// { dg-message "in 'constexpr' expansion of" }
  h += 0 ? bar (8) : 1;			// { dg-message "in 'constexpr' expansion of" }
  if (0)
    bar (9);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (10);				// { dg-message "in 'constexpr' expansion of" }
  if (1)
    bar (11);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (12);				// { dg-message "in 'constexpr' expansion of" }
  if constexpr (0)
    bar (13);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (14);				// { dg-message "in 'constexpr' expansion of" }
  if constexpr (1)
    bar (15);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (16);				// { dg-message "in 'constexpr' expansion of" }
}

consteval int
baz ()
{
  constexpr int a = bar (1);
  constexpr int b = bar (2);		// { dg-message "in 'constexpr' expansion of" }
  constexpr int c = 0 ? bar (3) : 1;
  const int d = bar (4);
  const int e = 0 ? bar (5) : 1;
  int f = bar (1);
  int g = bar (6);
  int h = 0 ? bar (7) : 1;
  h += 0 ? bar (8) : 1;
  if (0)
    bar (9);
  else
    bar (10);
  if (1)
    bar (11);
  else
    bar (12);
  if constexpr (0)
    bar (13);
  else
    bar (14);
  if constexpr (1)
    bar (15);
  else
    bar (16);
  return 0;
}

template <typename T>
void
qux ()
{
  if (0)
    bar (2);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (3);				// { dg-message "in 'constexpr' expansion of" }
  if (1)
    bar (4);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (5);				// { dg-message "in 'constexpr' expansion of" }
  if constexpr (0)
    bar (6);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (7);				// { dg-message "in 'constexpr' expansion of" }
  if constexpr (1)
    bar (8);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar (9);				// { dg-message "in 'constexpr' expansion of" }
  if (0)
    bar ((T) 2);
  else
    bar ((T) 3);
  if (1)
    bar ((T) 4);
  else
    bar ((T) 5);
  if constexpr (0)
    bar ((T) 6);
  else
    bar ((T) 7);
  if constexpr (1)
    bar ((T) 8);
  else
    bar ((T) 9);
}

template <typename T>
void
quux ()
{
  if (0)
    bar ((T) 2);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar ((T) 3);				// { dg-message "in 'constexpr' expansion of" }
  if (1)
    bar ((T) 4);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar ((T) 5);				// { dg-message "in 'constexpr' expansion of" }
  if constexpr (0)
    bar ((T) 6);
  else
    bar ((T) 7);				// { dg-message "in 'constexpr' expansion of" }
  if constexpr (1)
    bar ((T) 8);				// { dg-message "in 'constexpr' expansion of" }
  else
    bar ((T) 9);
}

void
corge ()
{
  quux <int> ();
}