llvm-project/clang/test/SemaObjC/Inputs/arc-system-header.h

58 lines
495 B
C
Raw Normal View History

static inline void *test0(id x) {
return x;
}
static inline void **test1(__strong id* x) {
return (void**) x;
}
struct Test3 {
id *field;
};
@interface Test4 {
@public
id *field1;
__strong id *field2;
}
@end
struct Test5 {
id field;
};
extern struct Test6 *const kMagicConstant;
@interface Test7
@property id *prop;
@end
static inline void *test8(id ptr) {
return (__bridge_retain void*) ptr;
}
Add TreatUnavailableAsInvalid for the verification-only mode in InitListChecker. Given the following test case: typedef struct { const char *name; id field; } Test9; extern void doSomething(Test9 arg); void test9() { Test9 foo2 = {0, 0}; doSomething(foo2); } With a release compiler, we don't emit any message and silently ignore the variable "foo2". With an assert compiler, we get an assertion failure. The root cause ————————————— Back in r140457 we gave InitListChecker a verification-only mode, and will use CanUseDecl instead of DiagnoseUseOfDecl for verification-only mode. These two functions handle unavailable issues differently: In Sema::CanUseDecl, we say the decl is invalid when the Decl is unavailable and the current context is available. In Sema::DiagnoseUseOfDecl, we say the decl is usable by ignoring the return code of DiagnoseAvailabilityOfDecl So with an assert build, we will hit an assertion in diagnoseListInit assert(DiagnoseInitList.HadError() && "Inconsistent init list check result."); The fix ------------------- If we follow what is implemented in CanUseDecl and treat Decls with unavailable issues as invalid, the variable decl of “foo2” will be marked as invalid. Since unavailable checking is processed in delayed diagnostics (r197627), we will silently ignore the diagnostics when we find out that the variable decl is invalid. We add a flag "TreatUnavailableAsInvalid" for the verification-only mode. For overload resolution, we want to say decls with unavailable issues are invalid; but for everything else, we should say they are valid and emit diagnostics. Depending on the value of the flag, CanUseDecl can return different values for unavailable issues. rdar://23557300 Differential Revision: http://reviews.llvm.org/D15314 llvm-svn: 263149
2016-03-11 02:53:19 +08:00
typedef struct {
const char *name;
id field;
} Test9;