vlang / v

Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. Supports automatic C => V translation. https://vlang.io
MIT License
35.76k stars 2.16k forks source link

C compilation error (sometimes) incompatible types when assigning to type ‘IError’ from type ‘int’ #22640

Open asyslinux opened 2 hours ago

asyslinux commented 2 hours ago

Describe the bug

I noticed that sometimes my program can't compile, I tried 0.4.7 and 0.4.8 (latest version from master branch too) versions of vlang The bug happens as luck would have it. I do not change my v code between compilations.

Reproduction Steps

Write program that uses IError, like this code. (i not checked this small code, but my program, that uses this code, sometimes i get compilation error only with this IError):

mut eflag := false
mut threads := []thread IError{}

for srv, port in options.srvs {
    threads << go rsync(srv, port)
}

awt := threads.wait()

for e in awt {
    if e.str() != 'none' {
         eflag = true
         eprintln(e.str())
    }
}

if eflag {
     exit(1)
}

Expected Behavior

Success compilation

Current Behavior

rundeck@rundeck:/rundeck/work/gsync$ for i in $(seq 1 50); do v -enable-globals -prod . && echo "Success compilation" ; done
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
================== C compilation error (from cc): ==============
cc:       |                            Array___v_thread_IError_wait
cc: /tmp/v_109/gsync.01JAZ1G1X74R4EFSHRHXWYZMR7.tmp.c:7700:28: error: incompatible types when assigning to type ‘IError’ from type ‘int’
cc: /tmp/v_109/gsync.01JAZ1G1X74R4EFSHRHXWYZMR7.tmp.c: At top level:
cc: /tmp/v_109/gsync.01JAZ1G1X74R4EFSHRHXWYZMR7.tmp.c:7705:8: error: conflicting types for ‘__v_thread_IError_wait’
cc:  7705 | IError __v_thread_IError_wait(__v_thread_IError thread) {
cc:       |        ^~~~~~~~~~~~~~~~~~~~~~
cc: /tmp/v_109/gsync.01JAZ1G1X74R4EFSHRHXWYZMR7.tmp.c:7700:28: note: previous implicit declaration of ‘__v_thread_IError_wait’ was here
cc:  7700 |   ((IError*)res.data)[i] = __v_thread_IError_wait(t);
cc:       |                            ^~~~~~~~~~~~~~~~~~~~~~
... (the original output was 13 lines long, and was truncated to 9 lines)
================================================================
(You can pass `-cg`, or `-show-c-output` as well, to print all the C error messages).
builder error:
==================
C error found. It should never happen, when compiling pure V code.
This is a V compiler bug, please report it using `v bug file.v`,
or goto https://github.com/vlang/v/issues/new/choose .
You can also use #help on Discord: https://discord.gg/vlang .
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation
Success compilation

Possible Solution

No response

Additional Information/Context

No response

V version

V 0.4.7 c9c38d5

Environment details (OS name and version, etc.)

rundeck@rundeck:/rundeck/work/gsync$ v doctor
> error while executing: /usr/local/v/cmd/tools/vdoctor ['doctor']
V panic: No such file or directory; code: 2
v hash: c9c38d5
/tmp/v_0/v2.01J3ZMG9RD13YCR9MYR3HBTQAJ.tmp.c:22035: at _v_panic: Backtrace
/tmp/v_0/v2.01J3ZMG9RD13YCR9MYR3HBTQAJ.tmp.c:47382: by v__util__launch_tool
/tmp/v_0/v2.01J3ZMG9RD13YCR9MYR3HBTQAJ.tmp.c:59518: by main__main
/tmp/v_0/v2.01J3ZMG9RD13YCR9MYR3HBTQAJ.tmp.c:60315: by main

[!NOTE] You can use the 👍 reaction to increase the issue's priority for developers.

Please note that only the 👍 reaction to the issue itself counts as a vote. Other reactions and those to comments will not be taken into account.

Huly®: V_0.6-21089

felipensp commented 2 hours ago
asyslinux commented 1 hour ago

Compiler

rundeck@rundeck:/rundeck/work/gsync$ cc -v
Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 10.2.1-6' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-Km9U7s/gcc-10-10.2.1/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-Km9U7s/gcc-10-10.2.1/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.1 20210110 (Debian 10.2.1-6)

Simplified function:

fn rsync(srv string, port string) IError {
    timeout := '30'

    cmdr := "rsync -a -l --timeout=${timeout} --delete-after --no-owner --no-group -e 'ssh -i /path/to/key.pem -o ConnectTimeout=${timeout} -o StrictHostKeyChecking=no -p ${port}' /srcdir user@${srv}:/dstdir/"

    eres := os.execute(cmdr)
    if eres.exit_code != 0 {
          return error('Error: failed sync to server: error: ${eres.output}')
    }
        return none
}