> On 12 Sep 2016, at 22:49, Jens Alfke <j...@mooseyard.com> wrote:
> 
> 
>> On Sep 12, 2016, at 6:42 AM, Gerriet M. Denkmann <gerr...@mdenkmann.de> 
>> wrote:
>> 
>> So: is the code ok and the compiler broken in Debug mode?
>> Or is the code fundamentally wrong and that it works in Release is just a 
>> fluke?
> 
> 99% of the time it’s the latter. Which means you should try to debug the 
> code. Did you set the breakpoint on malloc_error?
Yes, see below.

> What line of code is triggering it?
bitfield[currIndex] = true      //      this might crash

> Did you examine the values of variables?
Yes. In all cases the value of index was well inside limits.


> Did you run with the Address Sanitizer?

Just did:
bitfield[0 ..< 1776] with 8 threads
=================================================================
==55216==ERROR: AddressSanitizer: heap-use-after-free on address 0x61c0000e68a0 
at pc 0x0001000516f4 bp 0x7fff5fbfe2f0 sp 0x7fff5fbfdab0
READ of size 1776 at 0x61c0000e68a0 thread T0
    #0 0x1000516f3 in wrap_memcpy (libclang_rt.asan_osx_dynamic.dylib+0x406f3)
    #1 0x100f85a88 in __swift_memcpy_array1_1 (libswiftCore.dylib+0x1dea88)
    #2 0x100dd9a3e in _TZFSa11_copyBufferfRGVs12_ArrayBufferx_T_ 
(libswiftCore.dylib+0x32a3e)
    #3 0x100dd7495 in _TFSaap9subscriptFSix (libswiftCore.dylib+0x30495)
    #4 0x100003afb in Base.(markAndTell(Bool, number : Int) -> ()).(closure #1) 
Base + BaseA.swift:40
    #5 0x100003b7e in thunk Base + BaseA.swift
    #6 0x101332dd9 in _dispatch_client_callout2 (libdispatch.dylib+0x16dd9)
    #7 0x101332c81 in _dispatch_apply_invoke (libdispatch.dylib+0x16c81)
    #8 0x101332b01 in dispatch_apply_f (libdispatch.dylib+0x16b01)
    #9 0x100002bad in Base.markAndTell(Bool, number : Int) -> () Base + 
BaseA.swift:44
    #10 0x100001b5f in AppDelegate.(doQuiet in 
_FFF4105428658238176D3EC47C78F853)(NSButton) -> () AppDelegate.swift:46
    #11 0x100001bc9 in @objc AppDelegate.(doQuiet in 
_FFF4105428658238176D3EC47C78F853)(NSButton) -> () AppDelegate.swift
    #12 0x7fff9d10e079 in _os_activity_initiate (libsystem_trace.dylib+0x2079)
    #13 0x7fff8f365dbc in -[NSApplication sendAction:to:from:] (AppKit+0x2b1dbc)
    #14 0x7fff8f377f11 in -[NSControl sendAction:to:] (AppKit+0x2c3f11)
    #15 0x7fff8f377e3b in __26-[NSCell _sendActionFrom:]_block_invoke 
(AppKit+0x2c3e3b)
    #16 0x7fff9d10e079 in _os_activity_initiate (libsystem_trace.dylib+0x2079)
    #17 0x7fff8f377d98 in -[NSCell _sendActionFrom:] (AppKit+0x2c3d98)
    #18 0x7fff9d10e079 in _os_activity_initiate (libsystem_trace.dylib+0x2079)
    #19 0x7fff8f3763bd in -[NSCell trackMouse:inRect:ofView:untilMouseUp:] 
(AppKit+0x2c23bd)
    #20 0x7fff8f3bef03 in -[NSButtonCell 
trackMouse:inRect:ofView:untilMouseUp:] (AppKit+0x30af03)
    #21 0x7fff8f374ae7 in -[NSControl mouseDown:] (AppKit+0x2c0ae7)
    #22 0x7fff8f8c93c8 in -[NSWindow _handleMouseDownEvent:isDelayedEvent:] 
(AppKit+0x8153c8)
    #23 0x7fff8f8ca3ac in -[NSWindow _reallySendEvent:isDelayedEvent:] 
(AppKit+0x8163ac)
    #24 0x7fff8f309538 in -[NSWindow sendEvent:] (AppKit+0x255538)
    #25 0x7fff8f289a37 in -[NSApplication sendEvent:] (AppKit+0x1d5a37)
    #26 0x7fff8f0f0df1 in -[NSApplication run] (AppKit+0x3cdf1)
    #27 0x7fff8f0ba367 in NSApplicationMain (AppKit+0x6367)
    #28 0x100001e63 in main AppDelegate.swift:15
    #29 0x7fff8c6f75ac in start (libdyld.dylib+0x35ac)
    #30 0x2  (IsKindOfTest)+0x2)

0x61c0000e68a0 is located 32 bytes inside of 1808-byte region 
[0x61c0000e6880,0x61c0000e6f90)
freed by thread T0 here:
    #0 0x100059b89 in wrap_free (libclang_rt.asan_osx_dynamic.dylib+0x48b89)
    #1 0x100dd9a05 in _TZFSa11_copyBufferfRGVs12_ArrayBufferx_T_ 
(libswiftCore.dylib+0x32a05)
    #2 0x100dd7495 in _TFSaap9subscriptFSix (libswiftCore.dylib+0x30495)
    #3 0x100003afb in Base.(markAndTell(Bool, number : Int) -> ()).(closure #1) 
Base + BaseA.swift:40
    #4 0x100003b7e in thunk Base + BaseA.swift
    #5 0x101332dd9 in _dispatch_client_callout2 (libdispatch.dylib+0x16dd9)
    #6 0x101332c81 in _dispatch_apply_invoke (libdispatch.dylib+0x16c81)
    #7 0x101332b01 in dispatch_apply_f (libdispatch.dylib+0x16b01)
    #8 0x100002bad in Base.markAndTell(Bool, number : Int) -> () Base + 
BaseA.swift:44
    #9 0x100001b5f in AppDelegate.(doQuiet in 
_FFF4105428658238176D3EC47C78F853)(NSButton) -> () AppDelegate.swift:46
    #10 0x100001bc9 in @objc AppDelegate.(doQuiet in 
_FFF4105428658238176D3EC47C78F853)(NSButton) -> () AppDelegate.swift
    #11 0x7fff9d10e079 in _os_activity_initiate (libsystem_trace.dylib+0x2079)
    #12 0x7fff8f365dbc in -[NSApplication sendAction:to:from:] (AppKit+0x2b1dbc)
    #13 0x7fff8f377f11 in -[NSControl sendAction:to:] (AppKit+0x2c3f11)
    #14 0x7fff8f377e3b in __26-[NSCell _sendActionFrom:]_block_invoke 
(AppKit+0x2c3e3b)
    #15 0x7fff9d10e079 in _os_activity_initiate (libsystem_trace.dylib+0x2079)
    #16 0x7fff8f377d98 in -[NSCell _sendActionFrom:] (AppKit+0x2c3d98)
    #17 0x7fff9d10e079 in _os_activity_initiate (libsystem_trace.dylib+0x2079)
    #18 0x7fff8f3763bd in -[NSCell trackMouse:inRect:ofView:untilMouseUp:] 
(AppKit+0x2c23bd)
    #19 0x7fff8f3bef03 in -[NSButtonCell 
trackMouse:inRect:ofView:untilMouseUp:] (AppKit+0x30af03)
    #20 0x7fff8f374ae7 in -[NSControl mouseDown:] (AppKit+0x2c0ae7)
    #21 0x7fff8f8c93c8 in -[NSWindow _handleMouseDownEvent:isDelayedEvent:] 
(AppKit+0x8153c8)
    #22 0x7fff8f8ca3ac in -[NSWindow _reallySendEvent:isDelayedEvent:] 
(AppKit+0x8163ac)
    #23 0x7fff8f309538 in -[NSWindow sendEvent:] (AppKit+0x255538)
    #24 0x7fff8f289a37 in -[NSApplication sendEvent:] (AppKit+0x1d5a37)
    #25 0x7fff8f0f0df1 in -[NSApplication run] (AppKit+0x3cdf1)
    #26 0x7fff8f0ba367 in NSApplicationMain (AppKit+0x6367)
    #27 0x100001e63 in main AppDelegate.swift:15
    #28 0x7fff8c6f75ac in start (libdyld.dylib+0x35ac)
    #29 0x2  (IsKindOfTest)+0x2)

previously allocated by thread T4 here:
    #0 0x1000599c0 in wrap_malloc (libclang_rt.asan_osx_dynamic.dylib+0x489c0)
    #1 0x100fbfe28 in swift_slowAlloc (libswiftCore.dylib+0x218e28)
    #2 0x100fbfe73 in _swift_allocObject_(swift::HeapMetadata const*, unsigned 
long, unsigned long) (libswiftCore.dylib+0x218e73)
    #3 0x100dbc936 in 
_TFVs22_ContiguousArrayBufferCfT5countSi15minimumCapacitySi_GS_x_ 
(libswiftCore.dylib+0x15936)
    #4 0x100dd9969 in _TZFSa11_copyBufferfRGVs12_ArrayBufferx_T_ 
(libswiftCore.dylib+0x32969)
    #5 0x100dd7495 in _TFSaap9subscriptFSix (libswiftCore.dylib+0x30495)
    #6 0x100003afb in Base.(markAndTell(Bool, number : Int) -> ()).(closure #1) 
Base + BaseA.swift:40
    #7 0x100003b7e in thunk Base + BaseA.swift
    #8 0x101332dd9 in _dispatch_client_callout2 (libdispatch.dylib+0x16dd9)
    #9 0x101332c81 in _dispatch_apply_invoke (libdispatch.dylib+0x16c81)
    #10 0x10131dcc4 in _dispatch_client_callout (libdispatch.dylib+0x1cc4)
    #11 0x101322456 in _dispatch_root_queue_drain (libdispatch.dylib+0x6456)
    #12 0x1013218a4 in _dispatch_worker_thread3 (libdispatch.dylib+0x58a4)
    #13 0x101380335 in _pthread_wqthread (libsystem_pthread.dylib+0x3335)
    #14 0x10137df90 in start_wqthread (libsystem_pthread.dylib+0xf90)

Thread T4 created by unknown thread
SUMMARY: AddressSanitizer: heap-use-after-free 
(libclang_rt.asan_osx_dynamic.dylib+0x406f3) in wrap_memcpy
Shadow bytes around the buggy address:
  0x1c380001ccc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001ccd0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001cce0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001ccf0: fd fd fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c380001cd00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x1c380001cd10: fd fd fd fd[fd]fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001cd20: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001cd30: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001cd40: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001cd50: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x1c380001cd60: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==55216==ABORTING
AddressSanitizer report breakpoint hit. Use 'thread info -s' to get extended 
information about the report.
(lldb) 


The following were tests were done before switching on AddressSanitizer:

1. did run it, got EXC_BAD_ACCESS.

(lldb) bt
* thread #4: tid = 0x2f1a1c, 0x00007fff9c2ad803 
libsystem_malloc.dylib`tiny_malloc_from_free_list + 327, queue = 
'com.apple.root.user-initiated-qos', stop reason = EXC_BAD_ACCESS (code=1, 
address=0x20)
    frame #0: 0x00007fff9c2ad803 
libsystem_malloc.dylib`tiny_malloc_from_free_list + 327
    frame #1: 0x00007fff9c2ac705 
libsystem_malloc.dylib`szone_malloc_should_clear + 292
    frame #2: 0x00007fff9c2ac5a1 libsystem_malloc.dylib`malloc_zone_malloc + 71
    frame #3: 0x00007fff9c2ab0cc libsystem_malloc.dylib`malloc + 42
    frame #4: 0x000000010025de29 libswiftCore.dylib`swift_slowAlloc + 9
    frame #5: 0x000000010025de74 
libswiftCore.dylib`_swift_allocObject_(swift::HeapMetadata const*, unsigned 
long, unsigned long) + 20
    frame #6: 0x000000010005a937 
libswiftCore.dylib`Swift._ContiguousArrayBuffer.init (count : Swift.Int, 
minimumCapacity : Swift.Int) -> Swift._ContiguousArrayBuffer<A> + 71
    frame #7: 0x000000010007796a libswiftCore.dylib`static 
Swift.Array._copyBuffer (inout Swift._ArrayBuffer<A>) -> () + 106
    frame #8: 0x0000000100075496 
libswiftCore.dylib`Swift.Array.subscript.nativePinningMutableAddressor : 
(Swift.Int) -> A + 182
  * frame #9: 0x0000000100003afc IsKindOfTest`Base.(idx=5, itemsPerThread=66, 
bitLimit=528, talk=false, bitfield=0x0000600000022cb0, step=2) -> ()).(closure 
#1) + 860 at Base + BaseA.swift:40
    frame #10: 0x0000000100003b7f IsKindOfTest`thunk + 47 at Base + 
BaseA.swift:0
    frame #11: 0x00000001005d0dda libdispatch.dylib`_dispatch_client_callout2 + 
8
    frame #12: 0x00000001005d0c82 libdispatch.dylib`_dispatch_apply_invoke + 114
    frame #13: 0x00000001005bbcc5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #14: 0x00000001005c0457 libdispatch.dylib`_dispatch_root_queue_drain 
+ 2934
    frame #15: 0x00000001005bf8a5 libdispatch.dylib`_dispatch_worker_thread3 + 
106
    frame #16: 0x000000010061e336 libsystem_pthread.dylib`_pthread_wqthread + 
1129
    frame #17: 0x000000010061bf91 libsystem_pthread.dylib`start_wqthread + 13

run again, got:

bitfield[0 ..< 533328] with 8 threads
fatal error: UnsafeMutablePointer.initializeFrom non-following overlapping range
(lldb) bt
* thread #1: tid = 0x2f25e4, 0x00000001001ad678 libswiftCore.dylib`function 
signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, 
Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, 
Swift.StaticString, Swift.StaticString, Swift.UInt) -> () + 40, queue = 
'com.apple.root.user-initiated-qos', stop reason = EXC_BAD_INSTRUCTION 
(code=EXC_I386_INVOP, subcode=0x0)
    frame #0: 0x00000001001ad678 libswiftCore.dylib`function signature 
specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = 
Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, 
Swift.StaticString, Swift.UInt) -> () + 40
    frame #1: 0x0000000100093d00 
libswiftCore.dylib`Swift.UnsafeMutablePointer.initializeFrom 
(Swift.UnsafeMutablePointer<A>, count : Swift.Int) -> () + 208
    frame #2: 0x00000001000501bf 
libswiftCore.dylib`Swift._ArrayBuffer._uninitializedCopy 
(Swift.Range<Swift.Int>, target : Swift.UnsafeMutablePointer<A>) -> 
Swift.UnsafeMutablePointer<A> + 223
    frame #3: 0x0000000100077a3f libswiftCore.dylib`static 
Swift.Array._copyBuffer (inout Swift._ArrayBuffer<A>) -> () + 319
    frame #4: 0x0000000100075496 
libswiftCore.dylib`Swift.Array.subscript.nativePinningMutableAddressor : 
(Swift.Int) -> A + 182
  * frame #5: 0x0000000100003afc IsKindOfTest`Base.(idx=1, 
itemsPerThread=66666, bitLimit=533328, talk=false, bitfield=0x0000608000029f50, 
step=2) -> ()).(closure #1) + 860 at Base + BaseA.swift:40
    frame #6: 0x0000000100003b7f IsKindOfTest`thunk + 47 at Base + BaseA.swift:0
    frame #7: 0x00000001005d0dda libdispatch.dylib`_dispatch_client_callout2 + 8
    frame #8: 0x00000001005d0c82 libdispatch.dylib`_dispatch_apply_invoke + 114
    frame #9: 0x00000001005d0b02 libdispatch.dylib`dispatch_apply_f + 1052
    frame #10: 0x0000000100002bae IsKindOfTest`Base.markAndTell(talk=false, 
number=33333, self=0x0000608000000a90) -> () + 1022 at Base + BaseA.swift:44
    frame #11: 0x0000000100001b60 
IsKindOfTest`AppDelegate.(sender=0x0000608000140210, 
self=0x00006080000237c0)(NSButton) -> () + 288 at AppDelegate.swift:46
    frame #12: 0x0000000100001bca IsKindOfTest`@objc AppDelegate.(doQuiet in 
_FFF4105428658238176D3EC47C78F853)(NSButton) -> () + 58 at AppDelegate.swift:0
    frame #13: 0x00007fff9d10e07a libsystem_trace.dylib`_os_activity_initiate + 
75
    frame #14: 0x00007fff8f365dbd AppKit`-[NSApplication sendAction:to:from:] + 
460
    frame #15: 0x00007fff8f377f12 AppKit`-[NSControl sendAction:to:] + 86
    frame #16: 0x00007fff8f377e3c AppKit`__26-[NSCell 
_sendActionFrom:]_block_invoke + 131
    frame #17: 0x00007fff9d10e07a libsystem_trace.dylib`_os_activity_initiate + 
75
    frame #18: 0x00007fff8f377d99 AppKit`-[NSCell _sendActionFrom:] + 144
    frame #19: 0x00007fff9d10e07a libsystem_trace.dylib`_os_activity_initiate + 
75
    frame #20: 0x00007fff8f3763be AppKit`-[NSCell 
trackMouse:inRect:ofView:untilMouseUp:] + 2693
    frame #21: 0x00007fff8f3bef04 AppKit`-[NSButtonCell 
trackMouse:inRect:ofView:untilMouseUp:] + 744
 … back to start

run again, got:

bitfield[0 ..< 5328] with 8 threads
IsKindOfTest(55012,0x700000081000) malloc: *** error for object 0x103073e08: 
incorrect checksum for freed object - object was probably modified after being 
freed.
*** set a breakpoint in malloc_error_break to debug
(lldb) bt
* thread #2: tid = 0x2f2b6d, 0x00007fff9c2bcf2e 
libsystem_malloc.dylib`malloc_error_break, queue = 
'com.apple.root.user-initiated-qos', stop reason = breakpoint 1.1
  * frame #0: 0x00007fff9c2bcf2e libsystem_malloc.dylib`malloc_error_break
    frame #1: 0x00007fff9c2ba2ba libsystem_malloc.dylib`szone_error + 406
    frame #2: 0x00007fff9c2afda6 
libsystem_malloc.dylib`small_malloc_from_free_list + 258
    frame #3: 0x00007fff9c2acb64 
libsystem_malloc.dylib`szone_malloc_should_clear + 1411
    frame #4: 0x00007fff9c2ac5a1 libsystem_malloc.dylib`malloc_zone_malloc + 71
    frame #5: 0x00007fff9c2ab0cc libsystem_malloc.dylib`malloc + 42
    frame #6: 0x000000010025de29 libswiftCore.dylib`swift_slowAlloc + 9
    frame #7: 0x000000010025de74 
libswiftCore.dylib`_swift_allocObject_(swift::HeapMetadata const*, unsigned 
long, unsigned long) + 20
    frame #8: 0x000000010005a937 
libswiftCore.dylib`Swift._ContiguousArrayBuffer.init (count : Swift.Int, 
minimumCapacity : Swift.Int) -> Swift._ContiguousArrayBuffer<A> + 71
    frame #9: 0x000000010007796a libswiftCore.dylib`static 
Swift.Array._copyBuffer (inout Swift._ArrayBuffer<A>) -> () + 106
    frame #10: 0x0000000100075496 
libswiftCore.dylib`Swift.Array.subscript.nativePinningMutableAddressor : 
(Swift.Int) -> A + 182
    frame #11: 0x0000000100003afc IsKindOfTest`Base.(idx=2, itemsPerThread=666, 
bitLimit=5328, talk=false, bitfield=0x0000600000020750, step=2) -> ()).(closure 
#1) + 860 at Base + BaseA.swift:40
    frame #12: 0x0000000100003b7f IsKindOfTest`thunk + 47 at Base + 
BaseA.swift:0
    frame #13: 0x00000001005d0dda libdispatch.dylib`_dispatch_client_callout2 + 
8
    frame #14: 0x00000001005d0c82 libdispatch.dylib`_dispatch_apply_invoke + 114
    frame #15: 0x00000001005bbcc5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #16: 0x00000001005c0457 libdispatch.dylib`_dispatch_root_queue_drain 
+ 2934
    frame #17: 0x00000001005bf8a5 libdispatch.dylib`_dispatch_worker_thread3 + 
106
    frame #18: 0x000000010061e336 libsystem_pthread.dylib`_pthread_wqthread + 
1129
    frame #19: 0x000000010061bf91 libsystem_pthread.dylib`start_wqthread + 13
(lldb) 


> (But on the other other hand, if Swift is smart enough [like C++] to 
> specialize [Bool] as a true bit-array, 

When I use a [Bool] of size 1,000,000,000, the memory footprint goes up by more 
than 1 GB. Looks like Swift uses only one bit per byte.

Kind regards,

Gerriet.


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to