forked from OSchip/llvm-project
[analyzer] Make BlockDataRegions typed, so that they have DynamicTypeInfo.
Fixes <rdar://problem/12119814> llvm-svn: 162123
This commit is contained in:
parent
34764fe2e4
commit
9844ab8992
|
@ -99,11 +99,11 @@ public:
|
|||
// Untyped regions.
|
||||
SymbolicRegionKind,
|
||||
AllocaRegionKind,
|
||||
BlockDataRegionKind,
|
||||
// Typed regions.
|
||||
BEG_TYPED_REGIONS,
|
||||
FunctionTextRegionKind = BEG_TYPED_REGIONS,
|
||||
BlockTextRegionKind,
|
||||
BlockDataRegionKind,
|
||||
BEG_TYPED_VALUE_REGIONS,
|
||||
CompoundLiteralRegionKind = BEG_TYPED_VALUE_REGIONS,
|
||||
CXXThisRegionKind,
|
||||
|
@ -603,7 +603,7 @@ public:
|
|||
/// which correspond to "code+data". The distinction is important, because
|
||||
/// like a closure a block captures the values of externally referenced
|
||||
/// variables.
|
||||
class BlockDataRegion : public SubRegion {
|
||||
class BlockDataRegion : public TypedRegion {
|
||||
friend class MemRegionManager;
|
||||
const BlockTextRegion *BC;
|
||||
const LocationContext *LC; // Can be null */
|
||||
|
@ -612,13 +612,15 @@ class BlockDataRegion : public SubRegion {
|
|||
|
||||
BlockDataRegion(const BlockTextRegion *bc, const LocationContext *lc,
|
||||
const MemRegion *sreg)
|
||||
: SubRegion(sreg, BlockDataRegionKind), BC(bc), LC(lc),
|
||||
: TypedRegion(sreg, BlockDataRegionKind), BC(bc), LC(lc),
|
||||
ReferencedVars(0), OriginalVars(0) {}
|
||||
|
||||
public:
|
||||
const BlockTextRegion *getCodeRegion() const { return BC; }
|
||||
|
||||
const BlockDecl *getDecl() const { return BC->getDecl(); }
|
||||
|
||||
QualType getLocationType() const { return BC->getLocationType(); }
|
||||
|
||||
class referenced_vars_iterator {
|
||||
const MemRegion * const *R;
|
||||
|
|
|
@ -26,10 +26,12 @@ typedef struct _NSZone NSZone;
|
|||
@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; @end
|
||||
@interface NSObject <NSObject> {}
|
||||
+ (id)alloc;
|
||||
- (id)copy;
|
||||
@end
|
||||
extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);
|
||||
@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding> - (NSUInteger)length;
|
||||
- ( const char *)UTF8String;
|
||||
@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>
|
||||
- (NSUInteger)length;
|
||||
- (const char *)UTF8String;
|
||||
- (id)initWithFormat:(NSString *)format arguments:(va_list)argList __attribute__((format(__NSString__, 1, 0)));
|
||||
@end
|
||||
@class NSString, NSData;
|
||||
|
@ -85,4 +87,10 @@ void test2_b() {
|
|||
void test2_c() {
|
||||
typedef void (^myblock)(void);
|
||||
myblock f = ^() { f(); }; // expected-warning{{Variable 'f' is uninitialized when captured by block}}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void testMessaging() {
|
||||
// <rdar://problem/12119814>
|
||||
[[^(){} copy] release];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue