blob: 15616a525a9e9d407a95594ca44bb334daff23b0 [file] [log] [blame]
SKIP: FAILED
../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: BST = struct @align(4) {
data:i32 @offset(0)
leftIndex:i32 @offset(4)
rightIndex:i32 @offset(8)
}
buf0 = struct @align(8) {
injectionSwitch:vec2<f32> @offset(0)
}
Obj = struct @align(4) {
odd_numbers:array<f32, 10> @offset(0)
even_numbers:array<f32, 10> @offset(40)
}
main_out = struct @align(16) {
x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}
$B1: { # root
%tree_1:ptr<private, array<BST, 10>, read_write> = var
%x_27:ptr<uniform, buf0, read> = var @binding_point(0, 0)
%gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
%x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}
%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
$B2: {
%8:i32 = load %data
%x_74:i32 = let %8
%10:ptr<function, i32, read_write> = access %tree, 0u
store %10, %x_74
%11:ptr<function, i32, read_write> = access %tree, 1u
store %11, -1i
%12:ptr<function, i32, read_write> = access %tree, 2u
store %12, -1i
ret
}
}
%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void {
$B3: {
%baseIndex:ptr<function, i32, read_write> = var
%param:ptr<function, BST, read_write> = var
%param_1:ptr<function, i32, read_write> = var
%param_2:ptr<function, BST, read_write> = var
%param_3:ptr<function, i32, read_write> = var
%GLF_live8i:ptr<function, i32, read_write> = var
%GLF_live8A:ptr<function, array<f32, 50>, read_write> = var
store %baseIndex, 0i
loop [b: $B4, c: $B5] { # loop_1
$B4: { # body
%23:i32 = load %baseIndex
%x_75:i32 = let %23
%25:i32 = load %treeIndex
%x_76:i32 = let %25
%27:bool = lte %x_75, %x_76
if %27 [t: $B6, f: $B7] { # if_1
$B6: { # true
exit_if # if_1
}
$B7: { # false
exit_loop # loop_1
}
}
%28:i32 = load %data_1
%x_77:i32 = let %28
%30:i32 = load %baseIndex
%x_78:i32 = let %30
%32:ptr<private, i32, read_write> = access %tree_1, %x_78, 0u
%33:i32 = load %32
%x_79:i32 = let %33
%35:bool = lte %x_77, %x_79
if %35 [t: $B8, f: $B9] { # if_2
$B8: { # true
%36:i32 = load %baseIndex
%x_80:i32 = let %36
%38:ptr<private, i32, read_write> = access %tree_1, %x_80, 1u
%39:i32 = load %38
%x_81:i32 = let %39
%41:bool = eq %x_81, -1i
if %41 [t: $B10, f: $B11] { # if_3
$B10: { # true
%42:i32 = load %baseIndex
%x_82:i32 = let %42
%44:i32 = load %treeIndex
%x_83:i32 = let %44
%46:ptr<private, i32, read_write> = access %tree_1, %x_82, 1u
store %46, %x_83
%47:i32 = load %treeIndex
%x_84:i32 = let %47
%49:ptr<private, BST, read_write> = access %tree_1, %x_84
%50:BST = load %49
%x_350:BST = let %50
store %param, %x_350
%52:i32 = load %data_1
%x_85:i32 = let %52
store %param_1, %x_85
%54:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
%55:BST = load %param
%x_352:BST = let %55
%57:ptr<private, BST, read_write> = access %tree_1, %x_84
store %57, %x_352
ret
}
$B11: { # false
%58:i32 = load %baseIndex
%x_86:i32 = let %58
%60:ptr<private, i32, read_write> = access %tree_1, %x_86, 1u
%61:i32 = load %60
%x_87:i32 = let %61
store %baseIndex, %x_87
continue # -> $B5
}
}
exit_if # if_2
}
$B9: { # false
%63:i32 = load %baseIndex
%x_88:i32 = let %63
%65:ptr<private, i32, read_write> = access %tree_1, %x_88, 2u
%66:i32 = load %65
%x_89:i32 = let %66
%68:bool = eq %x_89, -1i
if %68 [t: $B12, f: $B13] { # if_4
$B12: { # true
%69:i32 = load %baseIndex
%x_90:i32 = let %69
%71:i32 = load %treeIndex
%x_91:i32 = let %71
%73:ptr<private, i32, read_write> = access %tree_1, %x_90, 2u
store %73, %x_91
%74:i32 = load %treeIndex
%x_92:i32 = let %74
%76:ptr<private, BST, read_write> = access %tree_1, %x_92
%77:BST = load %76
%x_362:BST = let %77
store %param_2, %x_362
%79:i32 = load %data_1
%x_93:i32 = let %79
store %param_3, %x_93
%81:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
%82:BST = load %param_2
%x_364:BST = let %82
%84:ptr<private, BST, read_write> = access %tree_1, %x_92
store %84, %x_364
ret
}
$B13: { # false
store %GLF_live8i, 1i
%85:i32 = load %GLF_live8i
%x_94:i32 = let %85
%87:i32 = load %GLF_live8i
%x_95:i32 = let %87
%89:i32 = load %GLF_live8i
%x_96:i32 = let %89
%91:bool = gte %x_94, 0i
%92:bool = lt %x_95, 50i
%93:bool = and %91, %92
%94:i32 = select 0i, %x_96, %93
%x_369:i32 = let %94
%96:ptr<function, f32, read_write> = access %GLF_live8A, 0i
%97:f32 = load %96
%x_371:f32 = let %97
%99:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
%100:f32 = load %99
%x_373:f32 = let %100
%102:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
%103:f32 = add %x_373, %x_371
store %102, %103
loop [b: $B14, c: $B15] { # loop_2
$B14: { # body
%104:i32 = load %baseIndex
%x_97:i32 = let %104
%106:ptr<private, i32, read_write> = access %tree_1, %x_97, 2u
%107:i32 = load %106
%x_98:i32 = let %107
store %baseIndex, %x_98
continue # -> $B15
}
$B15: { # continuing
%109:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
%110:f32 = load_vector_element %109, 0u
%x_382:f32 = let %110
%112:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
%113:f32 = load_vector_element %112, 1u
%x_384:f32 = let %113
%115:bool = gt %x_382, %x_384
%116:bool = eq %115, false
break_if %116 # -> [t: exit_loop loop_2, f: $B14]
}
}
continue # -> $B5
}
}
exit_if # if_2
}
}
unreachable
}
$B5: { # continuing
next_iteration # -> $B4
}
}
ret
}
}
%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
$B16: {
%index:ptr<function, i32, read_write> = var
%currentNode:ptr<function, BST, read_write> = var
%x_387:ptr<function, i32, read_write> = var
store %index, 0i
loop [b: $B17, c: $B18] { # loop_3
$B17: { # body
%122:i32 = load %index
%x_99:i32 = let %122
%124:bool = neq %x_99, -1i
if %124 [t: $B19, f: $B20] { # if_5
$B19: { # true
exit_if # if_5
}
$B20: { # false
exit_loop # loop_3
}
}
%125:i32 = load %index
%x_100:i32 = let %125
%127:ptr<private, BST, read_write> = access %tree_1, %x_100
%128:BST = load %127
%x_395:BST = let %128
store %currentNode, %x_395
%130:ptr<function, i32, read_write> = access %currentNode, 0u
%131:i32 = load %130
%x_101:i32 = let %131
%133:i32 = load %t
%x_102:i32 = let %133
%135:bool = eq %x_101, %x_102
if %135 [t: $B21] { # if_6
$B21: { # true
%136:i32 = load %t
%x_103:i32 = let %136
ret %x_103
}
}
%138:i32 = load %t
%x_104:i32 = let %138
%140:ptr<function, i32, read_write> = access %currentNode, 0u
%141:i32 = load %140
%x_105:i32 = let %141
%143:bool = gt %x_104, %x_105
if %143 [t: $B22, f: $B23] { # if_7
$B22: { # true
%144:ptr<function, i32, read_write> = access %currentNode, 2u
%145:i32 = load %144
%x_106:i32 = let %145
store %x_387, %x_106
exit_if # if_7
}
$B23: { # false
%147:ptr<function, i32, read_write> = access %currentNode, 1u
%148:i32 = load %147
%x_107:i32 = let %148
store %x_387, %x_107
exit_if # if_7
}
}
%150:i32 = load %x_387
%x_108:i32 = let %150
store %index, %x_108
continue # -> $B18
}
$B18: { # continuing
next_iteration # -> $B17
}
}
ret -1i
}
}
%makeFrame_f1_ = func(%v:ptr<function, f32, read_write>):f32 {
$B24: {
%param_5:ptr<function, i32, read_write> = var
%param_6:ptr<function, i32, read_write> = var
%param_7:ptr<function, i32, read_write> = var
%157:f32 = load %v
%x_418:f32 = let %157
%159:f32 = mul %x_418, 6.5f
store %v, %159
%160:f32 = load %v
%x_420:f32 = let %160
%162:bool = lt %x_420, 1.5f
if %162 [t: $B25] { # if_8
$B25: { # true
store %param_5, 100i
%163:i32 = call %search_i1_, %param_5
%x_110:i32 = let %163
%165:f32 = convert %x_110
ret %165
}
}
%166:f32 = load %v
%x_425:f32 = let %166
%168:bool = lt %x_425, 4.0f
if %168 [t: $B26] { # if_9
$B26: { # true
ret 0.0f
}
}
%169:f32 = load %v
%x_429:f32 = let %169
store %param_6, 6i
%171:i32 = call %search_i1_, %param_6
%x_111:i32 = let %171
%173:f32 = convert %x_111
%174:bool = lt %x_429, %173
if %174 [t: $B27] { # if_10
$B27: { # true
ret 1.0f
}
}
store %param_7, 30i
%175:i32 = call %search_i1_, %param_7
%x_112:i32 = let %175
%177:f32 = convert %x_112
%178:f32 = add 10.0f, %177
ret %178
}
}
%hueColor_f1_ = func(%angle:ptr<function, f32, read_write>):vec3<f32> {
$B28: {
%nodeData:ptr<function, f32, read_write> = var
%param_4:ptr<function, i32, read_write> = var
store %param_4, 15i
%183:i32 = call %search_i1_, %param_4
%x_109:i32 = let %183
%185:f32 = convert %x_109
store %nodeData, %185
%186:f32 = load %angle
%x_409:f32 = let %186
%188:f32 = load %nodeData
%x_410:f32 = let %188
%190:vec3<f32> = construct 1.0f, 5.0f, %x_410
%191:vec3<f32> = mul %190, %x_409
%192:vec3<f32> = add vec3<f32>(30.0f), %191
%193:vec3<f32> = div %192, vec3<f32>(50.0f)
ret %193
}
}
%main_1 = func():void {
$B29: {
%treeIndex_1:ptr<function, i32, read_write> = var
%param_8:ptr<function, BST, read_write> = var
%param_9:ptr<function, i32, read_write> = var
%param_10:ptr<function, i32, read_write> = var
%param_11:ptr<function, i32, read_write> = var
%GLF_live1_looplimiter2:ptr<function, i32, read_write> = var
%GLF_live1i:ptr<function, i32, read_write> = var
%param_12:ptr<function, i32, read_write> = var
%param_13:ptr<function, i32, read_write> = var
%param_14:ptr<function, i32, read_write> = var
%param_15:ptr<function, i32, read_write> = var
%param_16:ptr<function, i32, read_write> = var
%param_17:ptr<function, i32, read_write> = var
%param_18:ptr<function, i32, read_write> = var
%param_19:ptr<function, i32, read_write> = var
%param_20:ptr<function, i32, read_write> = var
%param_21:ptr<function, i32, read_write> = var
%param_22:ptr<function, i32, read_write> = var
%param_23:ptr<function, i32, read_write> = var
%GLF_live4_looplimiter3:ptr<function, i32, read_write> = var
%GLF_live4i:ptr<function, i32, read_write> = var
%GLF_live4index:ptr<function, i32, read_write> = var
%GLF_live4obj:ptr<function, Obj, read_write> = var
%param_24:ptr<function, i32, read_write> = var
%param_25:ptr<function, i32, read_write> = var
%param_26:ptr<function, i32, read_write> = var
%param_27:ptr<function, i32, read_write> = var
%z:ptr<function, vec2<f32>, read_write> = var
%x:ptr<function, f32, read_write> = var
%param_28:ptr<function, f32, read_write> = var
%y:ptr<function, f32, read_write> = var
%param_29:ptr<function, f32, read_write> = var
%sum:ptr<function, i32, read_write> = var
%t_1:ptr<function, i32, read_write> = var
%result:ptr<function, i32, read_write> = var
%param_30:ptr<function, i32, read_write> = var
%a:ptr<function, f32, read_write> = var
%x_235:ptr<function, vec3<f32>, read_write> = var
%param_31:ptr<function, f32, read_write> = var
store %treeIndex_1, 0i
%234:ptr<private, BST, read_write> = access %tree_1, 0i
%235:BST = load %234
%x_237:BST = let %235
store %param_8, %x_237
store %param_9, 9i
%237:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_8, %param_9
%238:BST = load %param_8
%x_239:BST = let %238
%240:ptr<private, BST, read_write> = access %tree_1, 0i
store %240, %x_239
%241:i32 = load %treeIndex_1
%x_113:i32 = let %241
%243:i32 = add %x_113, 1i
store %treeIndex_1, %243
%244:i32 = load %treeIndex_1
%x_115:i32 = let %244
store %param_10, %x_115
store %param_11, 5i
%246:void = call %insert_i1_i1_, %param_10, %param_11
%247:i32 = load %treeIndex_1
%x_116:i32 = let %247
%249:i32 = add %x_116, 1i
store %treeIndex_1, %249
store %GLF_live1_looplimiter2, 0i
store %GLF_live1i, 0i
loop [b: $B30, c: $B31] { # loop_4
$B30: { # body
if true [t: $B32, f: $B33] { # if_11
$B32: { # true
exit_if # if_11
}
$B33: { # false
exit_loop # loop_4
}
}
%250:i32 = load %GLF_live1_looplimiter2
%x_118:i32 = let %250
%252:bool = gte %x_118, 7i
if %252 [t: $B34] { # if_12
$B34: { # true
exit_loop # loop_4
}
}
%253:i32 = load %GLF_live1_looplimiter2
%x_119:i32 = let %253
%255:i32 = add %x_119, 1i
store %GLF_live1_looplimiter2, %255
continue # -> $B31
}
$B31: { # continuing
%256:i32 = load %GLF_live1i
%x_121:i32 = let %256
%258:i32 = add %x_121, 1i
store %GLF_live1i, %258
next_iteration # -> $B30
}
}
%259:i32 = load %treeIndex_1
%x_123:i32 = let %259
store %param_12, %x_123
store %param_13, 12i
%261:void = call %insert_i1_i1_, %param_12, %param_13
%262:i32 = load %treeIndex_1
%x_124:i32 = let %262
%264:i32 = add %x_124, 1i
store %treeIndex_1, %264
%265:i32 = load %treeIndex_1
%x_126:i32 = let %265
store %param_14, %x_126
store %param_15, 15i
%267:void = call %insert_i1_i1_, %param_14, %param_15
%268:i32 = load %treeIndex_1
%x_127:i32 = let %268
%270:i32 = add %x_127, 1i
store %treeIndex_1, %270
%271:i32 = load %treeIndex_1
%x_129:i32 = let %271
store %param_16, %x_129
store %param_17, 7i
%273:void = call %insert_i1_i1_, %param_16, %param_17
%274:i32 = load %treeIndex_1
%x_130:i32 = let %274
%276:i32 = add %x_130, 1i
store %treeIndex_1, %276
%277:i32 = load %treeIndex_1
%x_132:i32 = let %277
store %param_18, %x_132
store %param_19, 8i
%279:void = call %insert_i1_i1_, %param_18, %param_19
%280:i32 = load %treeIndex_1
%x_133:i32 = let %280
%282:i32 = add %x_133, 1i
store %treeIndex_1, %282
%283:i32 = load %treeIndex_1
%x_135:i32 = let %283
store %param_20, %x_135
store %param_21, 2i
%285:void = call %insert_i1_i1_, %param_20, %param_21
%286:i32 = load %treeIndex_1
%x_136:i32 = let %286
%288:i32 = add %x_136, 1i
store %treeIndex_1, %288
%289:i32 = load %treeIndex_1
%x_138:i32 = let %289
store %param_22, %x_138
store %param_23, 6i
%291:void = call %insert_i1_i1_, %param_22, %param_23
%292:i32 = load %treeIndex_1
%x_139:i32 = let %292
%294:i32 = add %x_139, 1i
store %treeIndex_1, %294
store %GLF_live4_looplimiter3, 0i
store %GLF_live4i, 0i
loop [b: $B35, c: $B36] { # loop_5
$B35: { # body
if true [t: $B37, f: $B38] { # if_13
$B37: { # true
exit_if # if_13
}
$B38: { # false
exit_loop # loop_5
}
}
%295:i32 = load %GLF_live4_looplimiter3
%x_141:i32 = let %295
%297:bool = gte %x_141, 3i
if %297 [t: $B39] { # if_14
$B39: { # true
exit_loop # loop_5
}
}
%298:i32 = load %GLF_live4_looplimiter3
%x_142:i32 = let %298
%300:i32 = add %x_142, 1i
store %GLF_live4_looplimiter3, %300
store %GLF_live4index, 1i
%301:i32 = load %GLF_live4index
%x_144:i32 = let %301
%303:i32 = load %GLF_live4index
%x_145:i32 = let %303
%305:i32 = load %GLF_live4index
%x_146:i32 = let %305
%307:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, 1i
%308:f32 = load %307
%x_269:f32 = let %308
%310:bool = gte %x_144, 0i
%311:bool = lt %x_145, 10i
%312:bool = and %310, %311
%313:i32 = select 0i, %x_146, %312
%314:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %313
store %314, %x_269
%315:i32 = load %GLF_live4i
%x_147:i32 = let %315
%317:i32 = load %GLF_live4i
%x_148:i32 = let %317
%319:i32 = load %GLF_live4i
%x_149:i32 = let %319
%321:bool = gte %x_147, 0i
%322:bool = lt %x_148, 10i
%323:bool = and %321, %322
%324:i32 = select 0i, %x_149, %323
%325:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %324
store %325, 1.0f
continue # -> $B36
}
$B36: { # continuing
%326:i32 = load %GLF_live4i
%x_150:i32 = let %326
%328:i32 = add %x_150, 1i
store %GLF_live4i, %328
next_iteration # -> $B35
}
}
%329:i32 = load %treeIndex_1
%x_152:i32 = let %329
store %param_24, %x_152
store %param_25, 17i
%331:void = call %insert_i1_i1_, %param_24, %param_25
%332:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
%333:f32 = load_vector_element %332, 0u
%x_278:f32 = let %333
%335:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
%336:f32 = load_vector_element %335, 1u
%x_280:f32 = let %336
%338:bool = gt %x_278, %x_280
if %338 [t: $B40] { # if_15
$B40: { # true
ret
}
}
%339:i32 = load %treeIndex_1
%x_153:i32 = let %339
%341:i32 = add %x_153, 1i
store %treeIndex_1, %341
%342:i32 = load %treeIndex_1
%x_155:i32 = let %342
store %param_26, %x_155
store %param_27, 13i
%344:void = call %insert_i1_i1_, %param_26, %param_27
%345:vec4<f32> = load %gl_FragCoord
%x_285:vec4<f32> = let %345
%347:f32 = access %x_285, 1u
%348:f32 = access %x_285, 0u
%349:vec2<f32> = construct %347, %348
%350:vec2<f32> = div %349, vec2<f32>(256.0f)
store %z, %350
%351:f32 = load_vector_element %z, 0u
%x_289:f32 = let %351
store %param_28, %x_289
%353:f32 = call %makeFrame_f1_, %param_28
%x_290:f32 = let %353
store %x, %x_290
%355:f32 = load_vector_element %z, 1u
%x_292:f32 = let %355
store %param_29, %x_292
%357:f32 = call %makeFrame_f1_, %param_29
%x_293:f32 = let %357
store %y, %x_293
store %sum, -100i
store %t_1, 0i
loop [b: $B41, c: $B42] { # loop_6
$B41: { # body
%359:i32 = load %t_1
%x_156:i32 = let %359
%361:bool = lt %x_156, 20i
if %361 [t: $B43, f: $B44] { # if_16
$B43: { # true
exit_if # if_16
}
$B44: { # false
exit_loop # loop_6
}
}
%362:i32 = load %t_1
%x_157:i32 = let %362
store %param_30, %x_157
%364:i32 = call %search_i1_, %param_30
%x_158:i32 = let %364
store %result, %x_158
%366:i32 = load %result
%x_159:i32 = let %366
%368:bool = gt %x_159, 0i
if %368 [t: $B45, f: $B46] { # if_17
$B45: { # true
exit_if # if_17
}
$B46: { # false
%369:i32 = load %result
%x_160:i32 = let %369
switch %x_160 [c: (0i, $B47), c: (-1i, $B48), c: (default, $B49)] { # switch_1
$B47: { # case
ret
}
$B48: { # case
%371:i32 = load %sum
%x_161:i32 = let %371
%373:i32 = add %x_161, 1i
store %sum, %373
exit_switch # switch_1
}
$B49: { # case
exit_switch # switch_1
}
}
exit_if # if_17
}
}
continue # -> $B42
}
$B42: { # continuing
%374:i32 = load %t_1
%x_163:i32 = let %374
%376:i32 = add %x_163, 1i
store %t_1, %376
next_iteration # -> $B41
}
}
%377:f32 = load %x
%x_307:f32 = let %377
%379:f32 = load %y
%x_308:f32 = let %379
%381:i32 = load %sum
%x_165:i32 = let %381
%383:f32 = convert %x_165
%384:f32 = mul %x_308, %383
%385:f32 = add %x_307, %384
store %a, %385
%386:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
%387:f32 = load_vector_element %386, 0u
%x_313:f32 = let %387
%389:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
%390:f32 = load_vector_element %389, 1u
%x_315:f32 = let %390
%392:bool = lt %x_313, %x_315
if %392 [t: $B50, f: $B51] { # if_18
$B50: { # true
store %x_235, vec3<f32>(1.0f, 0.0f, 0.0f)
exit_if # if_18
}
$B51: { # false
%393:f32 = load %a
%x_320:f32 = let %393
store %param_31, %x_320
%395:vec3<f32> = call %hueColor_f1_, %param_31
%x_321:vec3<f32> = let %395
store %x_235, %x_321
exit_if # if_18
}
}
%397:vec3<f32> = load %x_235
%x_322:vec3<f32> = let %397
%399:f32 = access %x_322, 0u
%400:f32 = access %x_322, 1u
%401:f32 = access %x_322, 2u
%402:vec4<f32> = construct %399, %400, %401, 1.0f
store %x_GLF_color, %402
ret
}
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
$B52: {
store %gl_FragCoord, %gl_FragCoord_param
%405:void = call %main_1
%406:vec4<f32> = load %x_GLF_color
%407:main_out = construct %406
ret %407
}
}
unhandled variable address space
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
* Please help us fix this issue by submitting a bug report at *
* crbug.com/tint with the source program that triggered the bug. *
********************************************************************