[swift-dev] [Compiler] Help IR gen in targetting MSVC

John McCall rjmccall at apple.com
Tue Apr 26 00:39:24 CDT 2016


> On Apr 25, 2016, at 7:54 PM, Sangjin Han via swift-dev <swift-dev at swift.org> wrote:
> Hi all,
> 
> I found a bug in my port for MSVC and Cygwin.
> 
> The C function swift_stdlib_readLine_stdin() is mapped to 'Int' type in Swift, but it generates i32 in LLVM if I specify the target as MSVC. If I give the target as Cygwin, it generates i64.
> 
> With the target options, the Cygwin ported swiftc.exe has the same output.
> 
> I know that the one of the differences between MSVC and Cygwin is the size of 'long' type. But I don't know even if it is related to this problem.
> 
> I don't know where to I start with.

The problem is probably the unconditional line
  public typealias CLong = Int
in CTypes.swift.  That is generally true for Unix platforms (LP32 / LP64) but not MSVC (LLP64).

You will need to conditionalize that line.

John.

>  
> BEGIN OF tt.swift ---
> import SwiftShims
> 
>  var linePtr: UnsafeMutablePointer<CChar>? = nil
>  var readBytes = swift_stdlib_readLine_stdin(&linePtr)
>  print(readBytes)
> END OF tt.swift -----
> 
> C:\temp>swiftc -emit-ir tt.swift -target x86_64-pc-windows-msvc  | findstr stdlib
>   %4 = call i32 @swift_stdlib_readLine_stdin(i8** bitcast (%Sq* @_Tv2tt7linePtrGSqGSpVs4Int8__ to i8**))
> declare i32 @swift_stdlib_readLine_stdin(i8**) #0
> 
> C:\temp>swiftc -emit-ir tt.swift -target x86_64-unknown-windows-cygnus | findstr stdlib
>   %4 = call i64 @swift_stdlib_readLine_stdin(i8** bitcast (%Sq* @_Tv2tt7linePtrGSqGSpVs4Int8__ to i8**))
> declare i64 @swift_stdlib_readLine_stdin(i8**) #0
> 
> 
> - Han Sangjin
> 
> _______________________________________________
> swift-dev mailing list
> swift-dev at swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev



More information about the swift-dev mailing list