re PR c++/88977 (__builtin_is_constant_evaluated() as function template argument...
authorJakub Jelinek <jakub@redhat.com>
Mon, 11 Feb 2019 20:00:16 +0000 (21:00 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 11 Feb 2019 20:00:16 +0000 (21:00 +0100)
PR c++/88977
* pt.c (convert_nontype_argument): Pass true as manifestly_const_eval
to maybe_constant_value calls.

* g++.dg/cpp2a/is-constant-evaluated7.C: New test.

From-SVN: r268780

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C [new file with mode: 0644]

index 885cd5056534d6cdd715e565b459bb7075a9c4fd..3bfd06fab29971e73da08971595b602cb00fbdae 100644 (file)
@@ -1,3 +1,9 @@
+2019-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/88977
+       * pt.c (convert_nontype_argument): Pass true as manifestly_const_eval
+       to maybe_constant_value calls.
+
 2019-02-11  Marek Polacek  <polacek@redhat.com>
 
        * typeck2.c (digest_init_r): Remove commented code.
index b8fbf4046f0790c0262fec99ddf0c2d2cd411f43..eb1797658c5f081e60ff3b332a9bbfd2dbf7dd1d 100644 (file)
@@ -6821,12 +6821,14 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
            /* Make sure we return NULL_TREE only if we have really issued
               an error, as described above.  */
            return (complain & tf_error) ? NULL_TREE : error_mark_node;
-         expr = maybe_constant_value (expr);
+         expr = maybe_constant_value (expr, NULL_TREE,
+                                      /*manifestly_const_eval=*/true);
          expr = convert_from_reference (expr);
        }
       else if (TYPE_PTR_OR_PTRMEM_P (type))
        {
-         tree folded = maybe_constant_value (expr);
+         tree folded = maybe_constant_value (expr, NULL_TREE,
+                                             /*manifestly_const_eval=*/true);
          if (TYPE_PTR_P (type) ? integer_zerop (folded)
              : null_member_pointer_value_p (folded))
            expr = folded;
index 032d078933d1be5a8cbd2d1830fc5d7bfad616d4..afcf630d6de586f59a621d089c2bafb302f50a8d 100644 (file)
@@ -1,3 +1,8 @@
+2019-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/88977
+       * g++.dg/cpp2a/is-constant-evaluated7.C: New test.
+
 2019-02-12  Wilco Dijkstra  <wdijkstr@arm.com>
 
        PR tree-optimization/86637
diff --git a/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C b/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C
new file mode 100644 (file)
index 0000000..72082f8
--- /dev/null
@@ -0,0 +1,18 @@
+// P0595R2
+// PR c++/88977
+// { dg-do compile { target c++11 } }
+
+namespace std {
+  constexpr inline bool
+  is_constant_evaluated () noexcept
+  {
+    return __builtin_is_constant_evaluated ();
+  }
+}
+
+template<bool B> constexpr bool foo () { return B; }
+
+constexpr bool x = foo<std::is_constant_evaluated ()> ();
+constexpr bool y = foo<__builtin_is_constant_evaluated ()> ();
+static_assert (x, "");
+static_assert (y, "");