diff options
| author | Vedant Kumar <vsk@apple.com> | 2016-10-04 20:36:04 +0000 |
|---|---|---|
| committer | Vedant Kumar <vsk@apple.com> | 2016-10-04 20:36:04 +0000 |
| commit | e356f1a50c0ef4311ab708dad4efc266cb1bc77c (patch) | |
| tree | 3223d024084dca991949cce7ef65797a7c14a387 /clang/test/CodeGenObjC/ubsan-array-bounds.m | |
| parent | fedb9b67ca82babec0ed9aa68935d4474561f36b (diff) | |
| download | bcm5719-llvm-e356f1a50c0ef4311ab708dad4efc266cb1bc77c.tar.gz bcm5719-llvm-e356f1a50c0ef4311ab708dad4efc266cb1bc77c.zip | |
[ubsan] Disable bounds-check for flexible array ivars
This eliminates a class of false positives for -fsanitize=array-bounds
on instrumented ObjC projects.
Differential Revision: https://reviews.llvm.org/D22227
llvm-svn: 283249
Diffstat (limited to 'clang/test/CodeGenObjC/ubsan-array-bounds.m')
| -rw-r--r-- | clang/test/CodeGenObjC/ubsan-array-bounds.m | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/ubsan-array-bounds.m b/clang/test/CodeGenObjC/ubsan-array-bounds.m new file mode 100644 index 00000000000..38d1eb310d2 --- /dev/null +++ b/clang/test/CodeGenObjC/ubsan-array-bounds.m @@ -0,0 +1,59 @@ +// RUN: %clang_cc1 -x objective-c -emit-llvm -triple x86_64-apple-macosx10.10.0 -Wno-objc-root-class -fsanitize=array-bounds %s -o - | FileCheck %s + +@interface FlexibleArray1 { +@public + char chars[0]; +} +@end +@implementation FlexibleArray1 +@end + +// CHECK-LABEL: test_FlexibleArray1 +char test_FlexibleArray1(FlexibleArray1 *FA1) { + // CHECK-NOT: !nosanitize + return FA1->chars[1]; + // CHECK: } +} + +@interface FlexibleArray2 { +@public + char chars[0]; +} +@end +@implementation FlexibleArray2 { +@public + char chars2[0]; +} +@end + +// CHECK-LABEL: test_FlexibleArray2_1 +char test_FlexibleArray2_1(FlexibleArray2 *FA2) { + // CHECK: !nosanitize + return FA2->chars[1]; + // CHECK: } +} + +// CHECK-LABEL: test_FlexibleArray2_2 +char test_FlexibleArray2_2(FlexibleArray2 *FA2) { + // CHECK-NOT: !nosanitize + return FA2->chars2[1]; + // CHECK: } +} + +@interface FlexibleArray3 { +@public + char chars[0]; +} +@end +@implementation FlexibleArray3 { +@public + int i; +} +@end + +// CHECK-LABEL: test_FlexibleArray3 +char test_FlexibleArray3(FlexibleArray3 *FA3) { + // CHECK: !nosanitize + return FA3->chars[1]; + // CHECK: } +} |

