> On Apr 26, 2016, at 1:03 PM, Sangjin Han <[email protected]> wrote:
> The problem can be solved by modifying that code. Thanks you. I thought that 
> code will affect only to the CLong type not Int.

It changes what 'long' gets imported as.  If there's a Windows API defined 
using 'long' (rather than some more meaningful typedef like 'size_t'), it's 
important for it to be imported as Int32 rather than Int, since 'long' is 
always 32 bits under MSVC.

> But I meet another problem to fix it. I couldn't find the conditional method 
> to distinct x86_64-*-windows-msvc with x86_64-*-windows-cygnus in Swift 
> source.
> 
> "#if os(Windows)" can not distinct MSVC from Cygwin.
> 
> Should I add new condition 'env()' for the environment?

That is an excellent question.

My understanding / memory is that, as far as their programming interfaces goes, 
Cygwin and MSVC are very, very different environments.  Maybe it's useful to 
have a condition that's true for both environments — although I'm not sure why 
it would — but I don't think it deserves to be as prominent as os(Windows).  So 
my gut reaction is that, rather than adding a #env, we ought to just reserve 
os(Windows) for MSVC compatibility and make a new os(Cygwin) for Cygwin.

This needs to be raised on swift-evolution, though.  CC'ing that list.

John.

> 
> - Han Sangjin
> 
> 
> 2016-04-26 14:39 GMT+09:00 John McCall <[email protected] 
> <mailto:[email protected]>>:
> > On Apr 25, 2016, at 7:54 PM, Sangjin Han via swift-dev <[email protected] 
> > <mailto:[email protected]>> 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
> > [email protected] <mailto:[email protected]>
> > https://lists.swift.org/mailman/listinfo/swift-dev 
> > <https://lists.swift.org/mailman/listinfo/swift-dev>
> 
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to