diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-04-26 18:29:13 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-04-26 18:29:13 +0000 |
commit | ea75aad379921d3725c298b051b9909ece9ebcb1 (patch) | |
tree | 3b7c3bc9d981afe1929088c64029230b8659a148 /clang/test | |
parent | 9c34526c172b0c4ff5b864d1796b7d88af40c414 (diff) | |
download | bcm5719-llvm-ea75aad379921d3725c298b051b9909ece9ebcb1.tar.gz bcm5719-llvm-ea75aad379921d3725c298b051b9909ece9ebcb1.zip |
[Sema] Adjust Sema::getCurBlock()/getCurLambda() to take into account that we may have
switch CurContext due to class template instantiation.
Fixes crash of the included test case.
rdar://16527205
llvm-svn: 207325
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/decltype.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/decltype.cpp b/clang/test/SemaCXX/decltype.cpp index 8de5a9c3bae..f1900b2b830 100644 --- a/clang/test/SemaCXX/decltype.cpp +++ b/clang/test/SemaCXX/decltype.cpp @@ -16,6 +16,27 @@ void test_f2() { float &fr = f2(AC().a); } +template <class T> +struct Future { + explicit Future(T v); + + template <class F> + auto call(F&& fn) -> decltype(fn(T())) { + return fn(T()); + } + + template <class B, class F> + auto then(F&& fn) -> decltype(call(fn)) + { + return fn(T()); + } +}; + +void rdar16527205() { + Future<int> f1(42); + f1.call([](int){ return Future<float>(0); }); +} + namespace pr10154 { class A{ A(decltype(nullptr) param); |