This is included in [PR13565](http://llvm.org/bugs/show_bug.cgi?id=13565), so 
you can track your progress there.


================
Comment at: lib/Analysis/FormatString.cpp:240
@@ +239,3 @@
+          I += 3;
+          lmKind = LengthModifier::AsInt64;
+          break;
----------------
Typo: AsInt32.

================
Comment at: lib/Analysis/ScanfFormatString.cpp:368
@@ -362,1 +367,3 @@
+        case LengthModifier::AsInt3264:
+        case LengthModifier::AsInt64:
           return ArgType::Invalid();
----------------
>From what I read at 
>http://msdn.microsoft.com/en-us/library/kwwtf9ch(v=vs.71).aspx, `%I64n` is 
>technically valid.

================
Comment at: lib/Analysis/PrintfFormatString.cpp:367-369
@@ -353,2 +366,5 @@
       case LengthModifier::AsMAllocate:
+      case LengthModifier::AsInt32:
+      case LengthModifier::AsInt3264:
+      case LengthModifier::AsInt64:
         return ArgType::Invalid();
----------------
It seems like all of these are valid, just not enabled by default.

================
Comment at: lib/Analysis/PrintfFormatString.cpp:325-328
@@ -315,2 +324,6 @@
         return ArgType(Ctx.getSizeType(), "size_t");
+      case LengthModifier::AsInt3264:
+        return Ctx.getTargetInfo().getTriple().isArch64Bit()
+                   ? Ctx.UnsignedLongLongTy
+                   : Ctx.UnsignedIntTy;
       case LengthModifier::AsPtrDiff:
----------------
I think just matching AsSizeT here is probably fine, per 
http://msdn.microsoft.com/en-us/library/tcxf1dw6(v=vs.90).aspx

================
Comment at: lib/Analysis/PrintfFormatString.cpp:313
@@ -306,1 +312,3 @@
+      case LengthModifier::AsInt32:
+        return Ctx.UnsignedIntTy;
       case LengthModifier::AsChar: return Ctx.UnsignedCharTy;
----------------
I don't know if Windows has any ILP64 configurations, but this might need to 
actually look for "unsigned __int32". At the very least it should use it in the 
name like "uintmax_t".

(I'm doing my comments backwards, so all of this applies to the signed integers 
as well.)

================
Comment at: lib/Analysis/PrintfFormatString.cpp:319
@@ -310,2 +318,3 @@
       case LengthModifier::AsQuad:
+      case LengthModifier::AsInt64:
         return Ctx.UnsignedLongLongTy;
----------------
Ditto -- this should be "unsigned __int64".

================
Comment at: lib/Analysis/FormatString.cpp:544-546
@@ -516,5 +543,5 @@
 
-  // MacOS X unicode extensions.
+  // POSIX unicode extensions.
   case CArg: return "C";
   case SArg: return "S";
 
----------------
Huh, I didn't realize these were present elsewhere. They don't quite behave the 
same on Windows, right? See http://llvm.org/bugs/show_bug.cgi?id=13565

================
Comment at: include/clang/Analysis/Analyses/FormatString.h:77
@@ +76,3 @@
+    AsInt32,      // 'I32' (MSVCRT, like __int32)
+    AsInt3264,    // 'I'   (MSVCRT, like size_t/ptrdiff_t)
+    AsInt64,      // 'I64' (MSVCRT, like __int64)
----------------
I don't like this name. How about AsIntWord or something? (As I understand it 
"word" is an overloaded term in MSVC, though.)


http://llvm-reviews.chandlerc.com/D1456
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to