]> granicus.if.org Git - clang/commitdiff
Sema::CheckAdditionOperands(): Use Type::getPointeeType() and remove PTy and OPT...
authorSteve Naroff <snaroff@apple.com>
Mon, 13 Jul 2009 21:20:41 +0000 (21:20 +0000)
committerSteve Naroff <snaroff@apple.com>
Mon, 13 Jul 2009 21:20:41 +0000 (21:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@75505 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp

index bb162e42c875740c9e2ef13afcadd40f8557651f..ee80ccacc2b2745668b28a5a954d298b5fd7cf13 100644 (file)
@@ -3831,15 +3831,8 @@ inline QualType Sema::CheckAdditionOperands( // C99 6.5.6
       PExp->getType()->isObjCObjectPointerType()) {
     
     if (IExp->getType()->isIntegerType()) {
-      QualType PointeeTy;
-      const PointerType *PTy = NULL;
-      const ObjCObjectPointerType *OPT = NULL;
+      QualType PointeeTy = PExp->getType()->getPointeeType();
       
-      if ((PTy = PExp->getType()->getAsPointerType()))
-        PointeeTy = PTy->getPointeeType();
-      else if ((OPT = PExp->getType()->getAsObjCObjectPointerType()))
-        PointeeTy = OPT->getPointeeType();
-                 
       // Check for arithmetic on pointers to incomplete types.
       if (PointeeTy->isVoidType()) {
         if (getLangOptions().CPlusPlus) {
@@ -3861,13 +3854,17 @@ inline QualType Sema::CheckAdditionOperands( // C99 6.5.6
         // GNU extension: arithmetic on pointer to function
         Diag(Loc, diag::ext_gnu_ptr_func_arith)
           << lex->getType() << lex->getSourceRange();
-      } else if (((PTy && !PTy->isDependentType()) || OPT) &&
-                 RequireCompleteType(Loc, PointeeTy,
-                                diag::err_typecheck_arithmetic_incomplete_type,
-                                     PExp->getSourceRange(), SourceRange(),
-                                     PExp->getType()))
-        return QualType();
-
+      } else { 
+        // Check if we require a complete type.
+        if (((PExp->getType()->isPointerType() && 
+              !PExp->getType()->getAsPointerType()->isDependentType()) ||
+              PExp->getType()->isObjCObjectPointerType()) &&
+             RequireCompleteType(Loc, PointeeTy,
+                                 diag::err_typecheck_arithmetic_incomplete_type,
+                                 PExp->getSourceRange(), SourceRange(),
+                                 PExp->getType()))
+          return QualType();
+      }
       // Diagnose bad cases where we step over interface counts.
       if (PointeeTy->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
         Diag(Loc, diag::err_arithmetic_nonfragile_interface)