C++ PATCH for c++/81589, error with is_trivially_constructible

Message ID CADzB+2k8Hf+B2iCM0z7nsiYYbQAOD31ahF+iUAegSP4HKPBdZQ@mail.gmail.com
State New
Headers show
Series
  • C++ PATCH for c++/81589, error with is_trivially_constructible
Related show

Commit Message

Jason Merrill Feb. 26, 2018, 6:20 a.m.
Applying this one line from Ville's patch for 80654 fixes the Chromium testcase.

Tested x86_64-pc-linux-gnu, applying to 7 branch.
commit 57b9683f0ce55a410c567fcb2dc365a2cc848d6a
Author: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Mon Feb 26 06:09:07 2018 +0000

            PR c++/81589 - error with is_trivially_constructible.
    
            * method.c (constructible_expr): Set cp_unevaluated.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257981 138bc75d-0d04-0410-961f-82ee72b054a4

Patch

diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 59ad43f73fe..a2d4c071efa 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1165,6 +1165,7 @@  constructible_expr (tree to, tree from)
     {
       tree ctype = to;
       vec<tree, va_gc> *args = NULL;
+      cp_unevaluated cp_uneval_guard;
       if (TREE_CODE (to) != REFERENCE_TYPE)
 	to = cp_build_reference_type (to, /*rval*/false);
       tree ob = build_stub_object (to);
diff --git a/gcc/testsuite/g++.dg/ext/is_trivially_constructible6.C b/gcc/testsuite/g++.dg/ext/is_trivially_constructible6.C
new file mode 100644
index 00000000000..10a8dfbb8f0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/is_trivially_constructible6.C
@@ -0,0 +1,10 @@ 
+// PR c++/81589
+
+template <typename k>
+struct z {
+  z() {
+    k::error;
+  }
+};
+
+int x = __is_trivially_constructible(z<int>);