diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/g++.dg/cpp2a/consteval11.C	Thu Feb 13 11:34:05 2020 +0900
@@ -0,0 +1,140 @@
+// { 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> ();
+}