summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2013-05-22 18:09:44 +0000
committerJordan Rose <jordan_rose@apple.com>2013-05-22 18:09:44 +0000
commit1bfe9c787f3eea44b7430bfe62d0cb1286b34e47 (patch)
tree6d2d1ec8a44588d3b37fd795e0a21c2354eb03eb /clang/test
parent142736fc64e669175a99516d93d81730f8b21481 (diff)
downloadbcm5719-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.cpp22
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>();
+}
OpenPOWER on IntegriCloud