blob: 2f68ec0f8928602641afa751d168a689f5ddf09b [file] [log] [blame]
// { 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> ();
}