diff options
author | ppalka <ppalka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-08 23:02:50 +0000 |
---|---|---|
committer | ppalka <ppalka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-08 23:02:50 +0000 |
commit | 83d5062b8f1a9c373f783c0929b52069e927000b (patch) | |
tree | ab9fb3d0524e6932af991e411f086515c0ddfd64 | |
parent | 58fd2d6f7e4704bb1212aa934839749727eb5ede (diff) |
Fix PR c++/69283 (auto deduction fails when ADL is required)
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233230 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/auto-fn29.C | 34 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/auto-fn30.C | 21 |
5 files changed, 73 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 563a1b37c8c..0fc40477714 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 7d68961cd20..15d7617a4f5 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d958e5d4814..4af81dd126f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 00000000000..f9260e0ec30 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn29.C @@ -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 index 00000000000..e005e6ec692 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn30.C @@ -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; +} |