1// RUN: %clang_cc1 -Wchar-subscripts -fsyntax-only -verify %s
2
3void t1() {
4  int array[1] = { 0 };
5  char subscript = 0;
6  int val = array[subscript]; // expected-warning{{array subscript is of type 'char'}}
7}
8
9void t2() {
10  int array[1] = { 0 };
11  char subscript = 0;
12  int val = subscript[array]; // expected-warning{{array subscript is of type 'char'}}
13}
14
15void t3() {
16  int *array = 0;
17  char subscript = 0;
18  int val = array[subscript]; // expected-warning{{array subscript is of type 'char'}}
19}
20
21void t4() {
22  int *array = 0;
23  char subscript = 0;
24  int val = subscript[array]; // expected-warning{{array subscript is of type 'char'}}
25}
26
27char returnsChar();
28void t5() {
29  int *array = 0;
30  int val = array[returnsChar()]; // expected-warning{{array subscript is of type 'char'}}
31}
32
33void t6() {
34  int array[1] = { 0 };
35  signed char subscript = 0;
36  int val = array[subscript]; // no warning for explicit signed char
37}
38
39void t7() {
40  int array[1] = { 0 };
41  unsigned char subscript = 0;
42  int val = array[subscript]; // no warning for unsigned char
43}
44
45typedef char CharTy;
46void t8() {
47  int array[1] = { 0 };
48  CharTy subscript = 0;
49  int val = array[subscript]; // expected-warning{{array subscript is of type 'char'}}
50}
51
52typedef signed char SignedCharTy;
53void t9() {
54  int array[1] = { 0 };
55  SignedCharTy subscript = 0;
56  int val = array[subscript]; // no warning for explicit signed char
57}
58
59typedef unsigned char UnsignedCharTy;
60void t10() {
61  int array[1] = { 0 };
62  UnsignedCharTy subscript = 0;
63  int val = array[subscript]; // no warning for unsigned char
64}
65