github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/test/execution/strings/range.go (about) 1 // RUN: llgo -o %t %s 2 // RUN: %t 2>&1 | FileCheck %s 3 4 // CHECK: 0 46 1 5 // CHECK-NEXT: 0 46 6 // CHECK-NEXT: 0 169 1 7 // CHECK-NEXT: 0 169 8 // CHECK-NEXT: 0 8364 1 9 // CHECK-NEXT: 0 8364 10 // CHECK-NEXT: 0 66560 1 11 // CHECK-NEXT: 0 66560 12 // CHECK-NEXT: 0 83 1 13 // CHECK-NEXT: 1 97 2 14 // CHECK-NEXT: 2 108 3 15 // CHECK-NEXT: 3 101 4 16 // CHECK-NEXT: 4 32 5 17 // CHECK-NEXT: 5 112 6 18 // CHECK-NEXT: 6 114 7 19 // CHECK-NEXT: 7 105 8 20 // CHECK-NEXT: 8 99 9 21 // CHECK-NEXT: 9 101 10 22 // CHECK-NEXT: 10 58 11 23 // CHECK-NEXT: 11 32 12 24 // CHECK-NEXT: 12 8364 13 25 // CHECK-NEXT: 15 48 14 26 // CHECK-NEXT: 16 46 15 27 // CHECK-NEXT: 17 57 16 28 // CHECK-NEXT: 18 57 17 29 // CHECK-NEXT: 0 83 30 // CHECK-NEXT: 1 97 31 // CHECK-NEXT: 2 108 32 // CHECK-NEXT: 3 101 33 // CHECK-NEXT: 4 32 34 // CHECK-NEXT: 5 112 35 // CHECK-NEXT: 6 114 36 // CHECK-NEXT: 7 105 37 // CHECK-NEXT: 8 99 38 // CHECK-NEXT: 9 101 39 // CHECK-NEXT: 10 58 40 // CHECK-NEXT: 11 32 41 // CHECK-NEXT: 12 8364 42 // CHECK-NEXT: 15 48 43 // CHECK-NEXT: 16 46 44 // CHECK-NEXT: 17 57 45 // CHECK-NEXT: 18 57 46 47 package main 48 49 func printchars(s string) { 50 var x int 51 for i, c := range s { 52 // test loop-carried dependence (x++), introducing a Phi node 53 x++ 54 println(i, c, x) 55 } 56 57 // now test with plain old assignment 58 var i int 59 var c rune 60 for i, c = range s { 61 println(i, c) 62 if i == len(s)-1 { 63 // test multiple branches to loop header 64 continue 65 } 66 } 67 } 68 69 func main() { 70 // 1 bytes 71 printchars(".") 72 73 // 2 bytes 74 printchars("©") 75 76 // 3 bytes 77 printchars("€") 78 79 // 4 bytes 80 printchars("𐐀") 81 82 // mixed 83 printchars("Sale price: €0.99") 84 85 // TODO add test cases for invalid sequences 86 }