API for message dispatch of methods returning floats
to match gcc's closely.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70493 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index af06f34..1dfa9cd 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -5002,11 +5002,18 @@
       Name += "objc_msgSend_stret_fixup";
     }
   }
-  else if (ResultType->isFloatingType() &&
-           // Selection of frret API only happens in 32bit nonfragile ABI.
-           CGM.getTargetData().getTypePaddedSize(ObjCTypes.LongTy) == 4) {
-    Fn = ObjCTypes.getMessageSendFpretFixupFn();
-    Name += "objc_msgSend_fpret_fixup";
+  else if (!IsSuper && ResultType->isFloatingType()) {
+    if (const BuiltinType *BT = ResultType->getAsBuiltinType()) {
+      BuiltinType::Kind k = BT->getKind();
+      if (k == BuiltinType::LongDouble) {
+        Fn = ObjCTypes.getMessageSendFpretFixupFn();
+        Name += "objc_msgSend_fpret_fixup";
+      } 
+      else {
+        Fn = ObjCTypes.getMessageSendFixupFn();
+        Name += "objc_msgSend_fixup";
+      }
+    }
   }
   else {
 #if 0