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