]> granicus.if.org Git - clang/commitdiff
Use std::sort instead of qsort.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 23 Apr 2009 01:29:05 +0000 (01:29 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 23 Apr 2009 01:29:05 +0000 (01:29 +0000)
 - Notably, there was a memory error here, SkipIvars does not have to
   be the same size as IvarsInfo.

 - Fariborz, please check.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69850 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCMac.cpp

index cf15d2e62c557ac98da34b05321d661297288b80..03f15ee7ed568c38c4ee452780ba4687d27a9955 100644 (file)
@@ -707,6 +707,11 @@ public:
     unsigned int ivar_bytepos;
     unsigned int ivar_size;
     GC_IVAR() : ivar_bytepos(0), ivar_size(0) {}
+
+    // Allow sorting based on byte pos.
+    bool operator<(const GC_IVAR &b) const {
+      return ivar_bytepos < b.ivar_bytepos;
+    }
   };
   
   class SKIP_SCAN {
@@ -3108,19 +3113,6 @@ void CGObjCCommonMac::BuildAggrIvarLayout(const ObjCInterfaceDecl *OI,
   }
 }
 
-static int
-IvarBytePosCompare(const void *a, const void *b)
-{
-  unsigned int sa = ((CGObjCCommonMac::GC_IVAR *)a)->ivar_bytepos;
-  unsigned int sb = ((CGObjCCommonMac::GC_IVAR *)b)->ivar_bytepos;
-  
-  if (sa < sb)
-    return -1;
-  if (sa > sb)
-    return 1;
-  return 0;
-}
-
 /// BuildIvarLayout - Builds ivar layout bitmap for the class
 /// implementation for the __strong or __weak case.
 /// The layout map displays which words in ivar list must be skipped 
@@ -3168,9 +3160,9 @@ llvm::Constant *CGObjCCommonMac::BuildIvarLayout(
   // Sort on byte position in case we encounterred a union nested in
   // the ivar list.
   if (hasUnion && !IvarsInfo.empty())
-      qsort(&IvarsInfo[0], Index+1, sizeof(GC_IVAR), IvarBytePosCompare);
+    std::sort(IvarsInfo.begin(), IvarsInfo.end());
   if (hasUnion && !SkipIvars.empty())
-    qsort(&SkipIvars[0], Index+1, sizeof(GC_IVAR), IvarBytePosCompare);
+    std::sort(SkipIvars.begin(), SkipIvars.end());
       
   // Build the string of skip/scan nibbles
   SkipScan = -1;