I was trying to understand why my code fails to compile, and eventually reduced 
it enough to find out it is caused by a comment. Is that _normal_?
    
    
    # PART 1 : atomics_test1.nim
    type
      VolatilePtr*[T] = distinct ptr T
    
    proc toVolatilePtr*[T](t: var T): VolatilePtr[T] =
      cast[VolatilePtr[T]](addr t)
    
    when declared(atomicLoadN):
      proc atomicLoadNSeqCST*[T: AtomType](p: VolatilePtr[T]): T {.inline.} =
        atomicLoadN(cast[ptr[T]](p), ATOMIC_SEQ_CST)
        ## REMOVE ME!
    
    
    
    # PART 2 : atomics_test2.nim
    import atomics_test1
    
    var my_vbyte {.volatile.}: byte = 42'u8
    var my_vbyte_ptr: VolatilePtr[byte] = toVolatilePtr[byte](my_vbyte)
    
    assert(atomicLoadNSeqCST(my_vbyte_ptr) == 42'u8)
    

The assert in PART 2 fails to compile, with message:

> atomics_test2.nim(7, 25) template/generic instantiation from here
> 
> atomics_test1.nim(10, 16) Error: expression 'atomicLoadN(cast[ptr [T]](p), 
> ATOMIC_SEQ_CST)' is of type 'byte' and has to be discarded
> 
> The terminal process terminated with exit code: 1

If I remove the comment "## REMOVE ME!" in PART 1, it works again! 

Reply via email to