diff options
| author | Jordan Rose <jordan_rose@apple.com> | 2013-05-22 18:09:44 +0000 |
|---|---|---|
| committer | Jordan Rose <jordan_rose@apple.com> | 2013-05-22 18:09:44 +0000 |
| commit | 1bfe9c787f3eea44b7430bfe62d0cb1286b34e47 (patch) | |
| tree | 6d2d1ec8a44588d3b37fd795e0a21c2354eb03eb /clang/test | |
| parent | 142736fc64e669175a99516d93d81730f8b21481 (diff) | |
| download | bcm5719-llvm-1bfe9c787f3eea44b7430bfe62d0cb1286b34e47.tar.gz bcm5719-llvm-1bfe9c787f3eea44b7430bfe62d0cb1286b34e47.zip | |
[analyzer] Don't crash if a block doesn't have a type signature.
Currently, blocks instantiated in templates lose their "signature as
written"; it's not clear if this is intentional. Change the analyzer's
use of BlockDecl::getSignatureAsWritten to check whether or not the
signature is actually there.
<rdar://problem/13954714>
llvm-svn: 182497
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Analysis/templates.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/test/Analysis/templates.cpp b/clang/test/Analysis/templates.cpp index faa5c1a7620..131794a7c93 100644 --- a/clang/test/Analysis/templates.cpp +++ b/clang/test/Analysis/templates.cpp @@ -48,3 +48,25 @@ void testNonTypeTemplateInstantiation() { #endif } +namespace rdar13954714 { + template <bool VALUE> + bool blockInTemplate() { + return (^() { + return VALUE; + })(); + } + + // force instantiation + template bool blockInTemplate<true>(); + + template <bool VALUE> + void blockWithStatic() { + (void)^() { + static int x; + return ++x; + }; + } + + // force instantiation + template void blockWithStatic<true>(); +} |

