[cfe-commits] r145724 - in /cfe/trunk: include/clang/Analysis/Analyses/FormatString.h lib/Analysis/FormatString.cpp lib/Analysis/PrintfFormatString.cpp lib/Sema/SemaChecking.cpp test/Sema/format-strings-int-typedefs.c

Nick Lewycky nicholas at mxc.ca
Fri Dec 2 15:21:43 PST 2011


Author: nicholas
Date: Fri Dec  2 17:21:43 2011
New Revision: 145724

URL: http://llvm.org/viewvc/llvm-project?rev=145724&view=rev
Log:
Revert r145697 and dependent patch r145702. It added a dependency from
lib/Analysis to lib/Sema which is cyclical.

Removed:
    cfe/trunk/test/Sema/format-strings-int-typedefs.c
Modified:
    cfe/trunk/include/clang/Analysis/Analyses/FormatString.h
    cfe/trunk/lib/Analysis/FormatString.cpp
    cfe/trunk/lib/Analysis/PrintfFormatString.cpp
    cfe/trunk/lib/Sema/SemaChecking.cpp

Modified: cfe/trunk/include/clang/Analysis/Analyses/FormatString.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Analyses/FormatString.h?rev=145724&r1=145723&r2=145724&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/Analyses/FormatString.h (original)
+++ cfe/trunk/include/clang/Analysis/Analyses/FormatString.h Fri Dec  2 17:21:43 2011
@@ -23,8 +23,6 @@
 
 namespace clang {
 
-class Sema;
-
 //===----------------------------------------------------------------------===//
 /// Common components of both fprintf and fscanf format strings.
 namespace analyze_format_string {
@@ -450,7 +448,7 @@
   /// will return null if the format specifier does not have
   /// a matching data argument or the matching argument matches
   /// more than one type.
-  ArgTypeResult getArgType(Sema &S) const;
+  ArgTypeResult getArgType(ASTContext &Ctx) const;
 
   const OptionalFlag &hasThousandsGrouping() const {
       return HasThousandsGrouping;

Modified: cfe/trunk/lib/Analysis/FormatString.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/FormatString.cpp?rev=145724&r1=145723&r2=145724&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/FormatString.cpp (original)
+++ cfe/trunk/lib/Analysis/FormatString.cpp Fri Dec  2 17:21:43 2011
@@ -230,8 +230,7 @@
       
     case SpecificTy: {
       argTy = C.getCanonicalType(argTy).getUnqualifiedType();
-      QualType U = C.getCanonicalType(T);
-      if (U == argTy)
+      if (T == argTy)
         return true;
       // Check for "compatible types".
       if (const BuiltinType *BT = argTy->getAs<BuiltinType>())
@@ -240,26 +239,26 @@
             break;
           case BuiltinType::Char_S:
           case BuiltinType::SChar:
-            return U == C.UnsignedCharTy;
+            return T == C.UnsignedCharTy;
           case BuiltinType::Char_U:
           case BuiltinType::UChar:                    
-            return U == C.SignedCharTy;
+            return T == C.SignedCharTy;
           case BuiltinType::Short:
-            return U == C.UnsignedShortTy;
+            return T == C.UnsignedShortTy;
           case BuiltinType::UShort:
-            return U == C.ShortTy;
+            return T == C.ShortTy;
           case BuiltinType::Int:
-            return U == C.UnsignedIntTy;
+            return T == C.UnsignedIntTy;
           case BuiltinType::UInt:
-            return U == C.IntTy;
+            return T == C.IntTy;
           case BuiltinType::Long:
-            return U == C.UnsignedLongTy;
+            return T == C.UnsignedLongTy;
           case BuiltinType::ULong:
-            return U == C.LongTy;
+            return T == C.LongTy;
           case BuiltinType::LongLong:
-            return U == C.UnsignedLongLongTy;
+            return T == C.UnsignedLongLongTy;
           case BuiltinType::ULongLong:
-            return U == C.LongLongTy;
+            return T == C.LongLongTy;
         }
       return false;
     }
@@ -486,3 +485,5 @@
   }
   return false;
 }
+
+

Modified: cfe/trunk/lib/Analysis/PrintfFormatString.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/PrintfFormatString.cpp?rev=145724&r1=145723&r2=145724&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/PrintfFormatString.cpp (original)
+++ cfe/trunk/lib/Analysis/PrintfFormatString.cpp Fri Dec  2 17:21:43 2011
@@ -13,7 +13,6 @@
 //===----------------------------------------------------------------------===//
 
 #include "clang/Analysis/Analyses/FormatString.h"
-#include "clang/Sema/Sema.h"
 #include "FormatStringParsing.h"
 
 using clang::analyze_format_string::ArgTypeResult;
@@ -279,27 +278,8 @@
 // Methods on PrintfSpecifier.
 //===----------------------------------------------------------------------===//
 
-/// \brief Try to find and return a typedef type named Name whose actual type
-/// is Underlying. Return Underlying if such a typedef cannot be found.
-static QualType FindTypedef(Sema &S, const char *Name, QualType Underlying) {
-  ASTContext &Ctx = S.getASTContext();
-  IdentifierInfo &II = Ctx.Idents.get(Name);
-
-  NamedDecl *D = S.LookupSingleName(S.getCurScope(), DeclarationName(&II),
-                                    SourceLocation(), Sema::LookupOrdinaryName);
-
-  if (TypedefDecl *TD = dyn_cast_or_null<TypedefDecl>(D)) {
-    QualType TypedefType = Ctx.getTypedefType(TD, QualType());
-    if (Ctx.getCanonicalType(TypedefType) == Underlying)
-      return TypedefType;
-  }
-
-  return Underlying;
-}
-
-ArgTypeResult PrintfSpecifier::getArgType(Sema &S) const {
+ArgTypeResult PrintfSpecifier::getArgType(ASTContext &Ctx) const {
   const PrintfConversionSpecifier &CS = getConversionSpecifier();
-  ASTContext &Ctx = S.getASTContext();
 
   if (!CS.consumesDataArgument())
     return ArgTypeResult::Invalid();
@@ -321,13 +301,11 @@
       case LengthModifier::AsShort: return Ctx.ShortTy;
       case LengthModifier::AsLong: return Ctx.LongTy;
       case LengthModifier::AsLongLong: return Ctx.LongLongTy;
-      case LengthModifier::AsIntMax:
-        return FindTypedef(S, "intmax_t", Ctx.getIntMaxType());
+      case LengthModifier::AsIntMax: return Ctx.getIntMaxType();
       case LengthModifier::AsSizeT:
         // FIXME: How to get the corresponding signed version of size_t?
         return ArgTypeResult();
-      case LengthModifier::AsPtrDiff:
-        return FindTypedef(S, "ptrdiff_t", Ctx.getPointerDiffType());
+      case LengthModifier::AsPtrDiff: return Ctx.getPointerDiffType();
     }
 
   if (CS.isUIntArg())
@@ -339,10 +317,9 @@
       case LengthModifier::AsShort: return Ctx.UnsignedShortTy;
       case LengthModifier::AsLong: return Ctx.UnsignedLongTy;
       case LengthModifier::AsLongLong: return Ctx.UnsignedLongLongTy;
-      case LengthModifier::AsIntMax:
-        return FindTypedef(S, "uintmax_t", Ctx.getUIntMaxType());
+      case LengthModifier::AsIntMax: return Ctx.getUIntMaxType();
       case LengthModifier::AsSizeT:
-        return FindTypedef(S, "size_t", Ctx.getSizeType());
+        return Ctx.getSizeType();
       case LengthModifier::AsPtrDiff:
         // FIXME: How to get the corresponding unsigned
         // version of ptrdiff_t?

Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=145724&r1=145723&r2=145724&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Fri Dec  2 17:21:43 2011
@@ -2206,7 +2206,7 @@
   // Now type check the data expression that matches the
   // format specifier.
   const Expr *Ex = getDataArg(argIndex);
-  const analyze_printf::ArgTypeResult &ATR = FS.getArgType(S);
+  const analyze_printf::ArgTypeResult &ATR = FS.getArgType(S.Context);
   if (ATR.isValid() && !ATR.matchesType(S.Context, Ex->getType())) {
     // Check if we didn't match because of an implicit cast from a 'char'
     // or 'short' to an 'int'.  This is done because printf is a varargs

Removed: cfe/trunk/test/Sema/format-strings-int-typedefs.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/format-strings-int-typedefs.c?rev=145723&view=auto
==============================================================================
--- cfe/trunk/test/Sema/format-strings-int-typedefs.c (original)
+++ cfe/trunk/test/Sema/format-strings-int-typedefs.c (removed)
@@ -1,30 +0,0 @@
-// RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify %s
-
-int printf(char const *, ...);
-
-void test(void) {
-  // size_t, et al. have not been declared yet,
-  // so the warning should refer to the builtin types.
-  printf("%jd", 42.0); // expected-warning {{conversion specifies type 'long long'}}
-  printf("%ju", 42.0); // expected-warning {{conversion specifies type 'unsigned long long'}}
-  printf("%zu", 42.0); // expected-warning {{conversion specifies type 'unsigned long'}}
-  printf("%td", 42.0); // expected-warning {{conversion specifies type 'int'}}
-
-  typedef __typeof(sizeof(int)) size_t;
-  typedef __INTMAX_TYPE__ intmax_t;
-  typedef __UINTMAX_TYPE__ uintmax_t;
-  typedef __PTRDIFF_TYPE__ ptrdiff_t;
-
-  printf("%jd", 42.0); // expected-warning {{conversion specifies type 'intmax_t' (aka 'long long')}}
-  printf("%ju", 42.0); // expected-warning {{conversion specifies type 'uintmax_t' (aka 'unsigned long long')}}
-  printf("%zu", 42.0); // expected-warning {{conversion specifies type 'size_t' (aka 'unsigned long')}}
-  printf("%td", 42.0); // expected-warning {{conversion specifies type 'ptrdiff_t' (aka 'int')}}
-}
-
-void test2(void) {
-  typedef void *size_t;
-
-  // The typedef for size_t does not match the builtin type,
-  // so the warning should not refer to it.
-  printf("%zu", 42.0); // expected-warning {{conversion specifies type 'unsigned long'}}
-}





More information about the cfe-commits mailing list