#1010: NSPoint/CGpoint =>NaN --------------------------------------+------------------------------------- Reporter: zalavariandris@… | Owner: lsansonetti@… Type: defect | Status: new Priority: trivial | Milestone: Component: MacRuby | Keywords: NSPoint, CGPoint, 32Bit, NaN, NSEVent --------------------------------------+------------------------------------- Comment(by lsansonetti@…): Looks like yet another 32-bit ABI issue. The IR code we emit: {{{ %1 = type { float, float } define i32 @1(i8*, i32, i8*, i32, i32*) { EntryBlock: %5 = bitcast i8* %0 to %1 (i32, i8*)* ; <%1 (i32, i8*)*> [#uses=1] %6 = tail call %1 %5(i32 %1, i8* %2) ; <%1> [#uses=2] %7 = extractvalue %1 %6, 0 ; <float> [#uses=1] %8 = tail call i32 @vm_float_to_rval(float %7) ; <i32> [#uses=1] %9 = extractvalue %1 %6, 1 ; <float> [#uses=1] %10 = tail call i32 @vm_float_to_rval(float %9) ; <i32> [#uses=1] %11 = tail call i32 (i32, i32, ...)* @rb_vm_new_struct(i32 36883328, i32 2, i32 %8, i32 %10) ; <i32> [#uses=1] ret i32 %11 } }}} IR code emitted by llvm-gcc for a similar expression: {{{ %struct._NSPoint = type { float, float } %1 = alloca %struct._NSPoint ; <%struct._NSPoint*> [#uses=3] %6 = call i64 bitcast (%struct.objc_object* (%struct.objc_object*, %struct.objc_selector*, ...)* @objc_msgSend to i64 (%struct.objc_object*, %struct.objc_selector*)*)(%struct.objc_object* %5, %struct.objc_selector* %4) nounwind ; <i64> [#uses=1] %7 = bitcast %struct._NSPoint* %1 to i64* ; <i64*> [#uses=1] store i64 %6, i64* %7, align 4 }}} llvm-gcc seems to return the NSPoint struct into a 64-bit integer. -- Ticket URL: <http://www.macruby.org/trac/ticket/1010#comment:3> MacRuby <http://macruby.org/>