diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-09-25 04:46:05 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-09-25 04:46:05 +0000 |
commit | e49ff3ef3459e97fa76502bd9eae4ed9170fd048 (patch) | |
tree | 4a404becefcdea1230ee2a171be4f4e6f31b4f95 /test | |
parent | 511e3ae61bc2ff3803195587fe9774cb815726fc (diff) |
Fix crash when a decltype expression in a trailing return type refers to the
function being instantiated. An error recovery codepath was recursively
performing name lookup (and triggering an unbounded stack of template
instantiations which blew out the stack before hitting the depth limit).
Patch by Wei Pan!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164586 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/SemaCXX/trailing-return-0x.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/SemaCXX/trailing-return-0x.cpp b/test/SemaCXX/trailing-return-0x.cpp index c219b77d9e..462b4fa3da 100644 --- a/test/SemaCXX/trailing-return-0x.cpp +++ b/test/SemaCXX/trailing-return-0x.cpp @@ -69,3 +69,19 @@ X<int> xx; only<int> p2 = xx.f(0L); only<double> p3 = xx.g(0L, 1.0); only<double> p4 = xx.get_nested<double>().h(0L, 1.0, 3.14f); + +namespace PR12053 { + template <typename T> + auto f1(T t) -> decltype(f1(t)) {} // expected-note{{candidate template ignored}} + + void test_f1() { + f1(0); // expected-error{{no matching function for call to 'f1'}} + } + + template <typename T> + auto f2(T t) -> decltype(f2(&t)) {} // expected-note{{candidate template ignored}} + + void test_f2() { + f2(0); // expected-error{{no matching function for call to 'f2'}} + } +} |