[swift-dev] "For" loop iterator and "enum"

Sam Ding samding at ca.ibm.com
Tue Oct 24 10:32:51 CDT 2017


Hi,

It is found that "for" loop iterate and "enum" does not work on s390x.
Here is a sample code:

      enum IntKey : Int {
          case a = 3
          case b = 4 // Implicitly 4
          case c = 1
      }
      for ( a1, a2) in [(IntKey.a, 1)] {
         print ("+++++  test \n")
      }

The for loop  inifinitly iterates on s390x. Note that it works fine if
replacing the enum with normal tuple in the above code.
When debugging this code, after one iteration, the logic gets a "nil" in "
IndexingIterator.next()" as follows:

      ....
       frame #0: 0x000003fffd5b4088 libswiftCore.so`IndexingIterator.next
   (self=0x000003fffffff460) at Collection.swift:411
      408    @inline(__always)
      409    public mutating func next() -> Elements.Element? {
      410      if _position == _elements.endIndex {
   -> 411          return nil
      412      }
      413      let element = _elements[_position]
   ..
Then comes "Enum.cpp:211" (swift::swift_storeEnumTagSinglePayload) and no
difference  on both s390x and x86_64.
However, It continues goes into the loop body on s390x, and  terminates  on
x86_64, respectively.

Have anyones know well this implementation and give us a hint for the
problems?

Thanks,


Sam Ding,
Linux on z Systems  Open Source Ecosystem
IBM Toronto Lab,
email: samding at ca.ibm.com
phone: (905)413-2947
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20171024/7ea04d89/attachment.html>


More information about the swift-dev mailing list