diff options
author | Manman Ren <manman.ren@gmail.com> | 2016-02-02 22:23:03 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2016-02-02 22:23:03 +0000 |
commit | 2fcd11968f1040e9d89dc32fed1148f667f75890 (patch) | |
tree | 71c50fa7ff3387a900da107ab9182a47bb2404e6 /test/SemaObjCXX | |
parent | 9eac6ef71a2c4f008f9dcf3241cc194a1d5cb6ff (diff) |
ObjCXX: fix a crash during typo correction.
For ObjCXX, we can create a CastExpr with Kind being CK_UserDefinedConversion
and SubExpr being BlockExpr. Specifically one can return BlockExpr from
BuildCXXMemberCallExpr and the result can be used to build a CastExpr.
Fix the assumption in CastExpr::getSubExprAsWritten that SubExpr can only
be CXXMemberCallExpr.
rdar://problem/24364077
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@259591 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaObjCXX')
-rw-r--r-- | test/SemaObjCXX/block-for-lambda-conversion.mm | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/SemaObjCXX/block-for-lambda-conversion.mm b/test/SemaObjCXX/block-for-lambda-conversion.mm new file mode 100644 index 0000000000..671e83dc22 --- /dev/null +++ b/test/SemaObjCXX/block-for-lambda-conversion.mm @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -fsyntax-only -fblocks -verify -std=c++11 %s + +enum NSEventType { + NSEventTypeFlagsChanged = 12 +}; + +enum NSEventMask { + NSEventMaskLeftMouseDown = 1 +}; + +static const NSEventType NSFlagsChanged = NSEventTypeFlagsChanged; + +@interface NSObject +@end +@interface NSEvent : NSObject { +} ++ (nullable id) +addMonitor:(NSEventMask)mask handler:(NSEvent *_Nullable (^)(NSEvent *))block; +@end + +void test(id weakThis) { + id m_flagsChangedEventMonitor = [NSEvent + addMonitor:NSFlagsChangedMask //expected-error {{use of undeclared identifier 'NSFlagsChangedMask'}} + handler:[weakThis](NSEvent *flagsChangedEvent) { + return flagsChangedEvent; + }]; +} |