• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// 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
2
3@interface FlexibleArray1 {
4@public
5  char chars[0];
6}
7@end
8@implementation FlexibleArray1
9@end
10
11// CHECK-LABEL: test_FlexibleArray1
12char test_FlexibleArray1(FlexibleArray1 *FA1) {
13  // CHECK-NOT: !nosanitize
14  return FA1->chars[1];
15  // CHECK: }
16}
17
18@interface FlexibleArray2 {
19@public
20  char chars[0];
21}
22@end
23@implementation FlexibleArray2 {
24@public
25  char chars2[0];
26}
27@end
28
29// CHECK-LABEL: test_FlexibleArray2_1
30char test_FlexibleArray2_1(FlexibleArray2 *FA2) {
31  // CHECK: !nosanitize
32  return FA2->chars[1];
33  // CHECK: }
34}
35
36// CHECK-LABEL: test_FlexibleArray2_2
37char test_FlexibleArray2_2(FlexibleArray2 *FA2) {
38  // CHECK-NOT: !nosanitize
39  return FA2->chars2[1];
40  // CHECK: }
41}
42
43@interface FlexibleArray3 {
44@public
45  char chars[0];
46}
47@end
48@implementation FlexibleArray3 {
49@public
50  int i;
51}
52@end
53
54// CHECK-LABEL: test_FlexibleArray3
55char test_FlexibleArray3(FlexibleArray3 *FA3) {
56  // CHECK: !nosanitize
57  return FA3->chars[1];
58  // CHECK: }
59}
60