]> granicus.if.org Git - clang/commitdiff
Add '@' conversion specifier.
authorTed Kremenek <kremenek@apple.com>
Thu, 28 Jan 2010 00:55:28 +0000 (00:55 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 28 Jan 2010 00:55:28 +0000 (00:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94713 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/Analyses/PrintfFormatString.h
lib/Analysis/PrintfFormatString.cpp

index 978486d271aeaa82ce73d3da4ef5920d3e0ed4d9..c5bac8c72662997a8120d5093604a5d8b647f8d8 100644 (file)
@@ -24,6 +24,7 @@ class ConversionSpecifier {
 public:
   enum Kind {
    InvalidSpecifier = 0,
+    // C99 conversion specifiers.
    dArg, // 'd'
    iArg, // 'i',
    oArg, // 'o',
@@ -43,12 +44,19 @@ public:
    VoidPtrArg,    // 'p'
    OutIntPtrArg,  // 'n'
    PercentArg,    // '%'
+    // Objective-C specific specifiers.
+   ObjCObjArg,    // '@'
+    // Specifier ranges.
    IntArgBeg = dArg,
    IntArgEnd = iArg,
    UIntArgBeg = oArg,
    UIntArgEnd = XArg,
    DoubleArgBeg = fArg,
-   DoubleArgEnd = AArg
+   DoubleArgEnd = AArg,
+   C99Beg = IntArgBeg,
+   C99End = DoubleArgEnd,
+   ObjCBeg = ObjCObjArg,
+   ObjCEnd = ObjCObjArg
   };
 
   ConversionSpecifier(Kind k) : kind(k) {}
index d7b9a21a3dc84258b88699649a7e950db988235a..9907dc9d42b4c40fedd4b3b5dbfc516826d6dc88 100644 (file)
@@ -193,9 +193,8 @@ static FormatSpecifierResult ParseFormatSpecifier(printf::FormatStringHandler &H
   switch (*I) {
     default:
       H.HandleInvalidConversionSpecifier(I);
-      return true;
-      
-    // Handle the cases we know about.
+      return true;      
+    // C99: 7.19.6.1 (section 8).
     case 'd': cs = ConversionSpecifier::dArg; break;
     case 'i': cs = ConversionSpecifier::iArg; break;
     case 'o': cs = ConversionSpecifier::oArg; break;
@@ -214,7 +213,9 @@ static FormatSpecifierResult ParseFormatSpecifier(printf::FormatStringHandler &H
     case 's': cs = ConversionSpecifier::CStrArg;      break;
     case 'p': cs = ConversionSpecifier::VoidPtrArg;   break;
     case 'n': cs = ConversionSpecifier::OutIntPtrArg; break;
-    case '%': cs = ConversionSpecifier::PercentArg;   break;
+    case '%': cs = ConversionSpecifier::PercentArg;   break;      
+    // Objective-C.
+    case '@': cs = ConversionSpecifier::ObjCObjArg; break;      
   }
   FS.setConversionSpecifier(cs);
   return FormatSpecifierResult(Start, FS);