]> gcc.gnu.org Git - gcc.git/commitdiff
Fix PR c++/69283 (auto deduction fails when ADL is required)
authorPatrick Palka <ppalka@gcc.gnu.org>
Mon, 8 Feb 2016 23:02:50 +0000 (23:02 +0000)
committerPatrick Palka <ppalka@gcc.gnu.org>
Mon, 8 Feb 2016 23:02:50 +0000 (23:02 +0000)
gcc/cp/ChangeLog:

PR c++/69283
PR c++/67835
* decl2.c (mark_used): When given a TEMPLATE_DECL, return after
setting its TREE_USED flag.

gcc/testsuite/ChangeLog:

PR c++/69283
PR c++/67835
* g++.dg/cpp1y/auto-fn29.C: New test.
* g++.dg/cpp1y/auto-fn30.C: New test.

From-SVN: r233230

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp1y/auto-fn29.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/auto-fn30.C [new file with mode: 0644]

index 563a1b37c8cca109067b8e917bfc8fe8d6345463..0fc40477714e79427bfc7e95c016fcd9aa8317fe 100644 (file)
@@ -1,3 +1,10 @@
+2016-02-08  Patrick Palka  <ppalka@gcc.gnu.org>
+
+       PR c++/69283
+       PR c++/67835
+       * decl2.c (mark_used): When given a TEMPLATE_DECL, return after
+       setting its TREE_USED flag.
+
 2016-02-08  Jason Merrill  <jason@redhat.com>
 
        PR c++/69657
index 7d68961cd20530b2f8574f3b0d301d09c3b9bfda..15d7617a4f56d94de155ff08e2a3268f4a5b6645 100644 (file)
@@ -5068,6 +5068,10 @@ mark_used (tree decl, tsubst_flags_t complain)
 
   /* Set TREE_USED for the benefit of -Wunused.  */
   TREE_USED (decl) = 1;
+
+  if (TREE_CODE (decl) == TEMPLATE_DECL)
+    return true;
+
   if (DECL_CLONED_FUNCTION_P (decl))
     TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
 
index d958e5d4814afd77e642569f67857fdbd3b38b44..4af81dd126fc837400c64f32a8951f119710b3d0 100644 (file)
@@ -1,3 +1,10 @@
+2016-02-08  Patrick Palka  <ppalka@gcc.gnu.org>
+
+       PR c++/69283
+       PR c++/67835
+       * g++.dg/cpp1y/auto-fn29.C: New test.
+       * g++.dg/cpp1y/auto-fn30.C: New test.
+
 2016-02-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/69209
diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn29.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn29.C
new file mode 100644 (file)
index 0000000..f9260e0
--- /dev/null
@@ -0,0 +1,34 @@
+// PR c++/69283
+// { dg-do compile { target c++14 } }
+
+namespace Ape {
+   struct Type {};
+
+   template <typename T>
+   auto f1(T const& v){
+       return true;
+   }
+
+   template <typename T>
+   auto f2(T const& v){
+       return f2(v); // { dg-error "auto" }
+   }
+}
+
+namespace Baboon {
+   template <typename T>
+   bool f3(T const& v){
+       return f1(v);
+   }
+
+   template <typename T>
+   bool f4(T const& v){
+       f2(v);
+   }
+}
+
+int main(){
+   Ape::Type x;
+   Baboon::f3(x);
+   Baboon::f4(x);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn30.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn30.C
new file mode 100644 (file)
index 0000000..e005e6e
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/67835
+// { dg-do compile { target c++14 } }
+
+template<class Tag, class T>
+auto g(Tag tag, T x) {
+ return f(tag, x);
+}
+
+namespace abc {
+struct tag {};
+
+struct A {};
+
+template<class T>
+auto f(tag, T x) { return x; }
+}
+
+int main() {
+ g(abc::tag(), abc::A());
+ return 0;
+}
This page took 0.0723240000000001 seconds and 5 git commands to generate.