]> granicus.if.org Git - clang/commitdiff
-Wchar-subscripts should not warn for explicit signed char subscripts either. Another...
authorSam Weinig <sam.weinig@gmail.com>
Mon, 14 Sep 2009 20:14:57 +0000 (20:14 +0000)
committerSam Weinig <sam.weinig@gmail.com>
Mon, 14 Sep 2009 20:14:57 +0000 (20:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81780 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/Sema/warn-char-subscripts.c

index 4967599da33125eb5dff8c75a2ab3419b2d41505..1c5d19748f8466811ece26c2bd4833d3944b432e 100644 (file)
@@ -1809,9 +1809,9 @@ Sema::ActOnArraySubscriptExpr(Scope *S, ExprArg Base, SourceLocation LLoc,
     return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer)
                      << IndexExpr->getSourceRange());
 
-  QualType IndexTy = Context.getCanonicalType(IndexExpr->getType());
-  if ((IndexTy == Context.CharTy || IndexTy == Context.SignedCharTy)
-      && !IndexExpr->isTypeDependent())
+  if ((IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_S) || 
+       IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_U))
+         && !IndexExpr->isTypeDependent())
     Diag(LLoc, diag::warn_subscript_is_char) << IndexExpr->getSourceRange();
 
   // C99 6.5.2.1p1: "shall have type "pointer to *object* type". Similarly,
index 972393cd6c01457fab6047224155635caf7f0b12..c6fd78cc1f74531f569bf3c29085f1e08efcca86 100644 (file)
@@ -33,7 +33,7 @@ void t5() {
 void t6() {
   int array[1] = { 0 };
   signed char subscript = 0;
-  int val = array[subscript]; // expected-warning{{array subscript is of type 'char'}}
+  int val = array[subscript]; // no warning for explicit signed char
 }
 
 void t7() {
@@ -53,7 +53,7 @@ typedef signed char SignedCharTy;
 void t9() {
   int array[1] = { 0 };
   SignedCharTy subscript = 0;
-  int val = array[subscript]; // expected-warning{{array subscript is of type 'char'}}
+  int val = array[subscript]; // no warning for explicit signed char
 }
 
 typedef unsigned char UnsignedCharTy;