Skip to content

GR_MUST_SUCCEED - an error in _gr_poly_div_basecase #1652

@Sander80

Description

@Sander80

Greetings.
There is a reproducible error (with some randomness) with the following stack

#0  0x00007ffff6a1cd2b in raise () from /lib64/libc.so.6
#1  0x00007ffff6a1e3e5 in abort () from /lib64/libc.so.6
#2  0x00007ffff6ee4bfb in flint_abort () at src/generic_files/exception.c:49
#3  0x00007ffff6f5b987 in _nmod_poly_div (Q=0x7fff64006550, A=0x7fff64001260, lenA=lenA@entry=3, B=0x7fff64001280, lenB=lenB@entry=2, mod=...) at src/nmod_poly/div.c:36
#4  0x00007ffff75b50c4 in n_poly_mod_div (Q=Q@entry=0x7fff64002600, A=A@entry=0x7fff64002840, B=B@entry=0x7fff640036d0, ctx=...) at src/n_poly/n_poly_mod.c:332
#5  0x00007ffff7202992 in nmod_mpolyn_gcd_brown_smprime_bivar (G=G@entry=0x7fffe4855d50, Abar=Abar@entry=0x7fffe4855d80, Bbar=Bbar@entry=0x7fffe4855db0, A=A@entry=0x7fffe4855de0, 
    B=B@entry=0x7fffe4855e10, ctx=ctx@entry=0x7fffe4855ea0, Sp=0x7fffe4855e40) at src/nmod_mpoly/mpolyn_gcd_brown.c:95
#6  0x00007ffff72042d4 in nmod_mpolyn_gcd_brown_smprime (G=G@entry=0x7fffe4855d50, Abar=Abar@entry=0x7fffe4855d80, Bbar=Bbar@entry=0x7fffe4855db0, A=A@entry=0x7fffe4855de0, B=B@entry=0x7fffe4855e10, 
    var=1, ctx=0x7fffe4855ea0, I=0x7fffe48567a0, Sp=0x7fffe4855e40) at src/nmod_mpoly/mpolyn_gcd_brown.c:364
#7  0x00007ffff7464af1 in fmpz_mpolyl_gcd_brown (G=G@entry=0x7fffe4856210, Abar=Abar@entry=0x7fffe4856240, Bbar=Bbar@entry=0x7fffe4856270, A=A@entry=0x7fffe48561b0, B=B@entry=0x7fffe48561e0, 
    ctx=ctx@entry=0x7fffe48562a0, I=0x7fffe48567a0) at src/fmpz_mpoly_factor/gcd_brown.c:178
#8  0x00007ffff746585d in _try_brown (G=G@entry=0x7fffe4856d90, Abar=Abar@entry=0x0, Bbar=Bbar@entry=0x0, A=A@entry=0x7fff64004cf0, B=B@entry=0x7fffe4856d00, I=I@entry=0x7fffe48567a0, 
    ctx=0x76ade0 <ratfunc_flint::ctx_wrapper>) at src/fmpz_mpoly_factor/gcd_algo.c:1389
#9  0x00007ffff746b47e in _fmpz_mpoly_gcd_algo_small (G=0x7fffe4856d90, Abar=0x0, Bbar=Bbar@entry=0x0, A=<optimized out>, B=<optimized out>, ctx=ctx@entry=0x76ade0 <ratfunc_flint::ctx_wrapper>, algo=31)
    at src/fmpz_mpoly_factor/gcd_algo.c:1700
#10 0x00007ffff74691b3 in _fmpz_mpoly_gcd_algo (G=0x7fffe4856d90, Abar=Abar@entry=0x0, Bbar=Bbar@entry=0x0, A=A@entry=0x7fff64004cf0, B=B@entry=0x7fffe4856d00, 
    ctx=ctx@entry=0x76ade0 <ratfunc_flint::ctx_wrapper>, algo=31) at src/fmpz_mpoly_factor/gcd_algo.c:1906
#11 0x00007ffff72c23cd in fmpz_mpoly_gcd (G=G@entry=0x7fffe4856d90, A=A@entry=0x7fff64004cf0, B=B@entry=0x7fffe4856d00, ctx=ctx@entry=0x76ade0 <ratfunc_flint::ctx_wrapper>) at src/fmpz_mpoly/gcd.c:43

The crash always happens here

#3  0x00007ffff6f5b987 in _nmod_poly_div (Q=0x7fff64006550, A=0x7fff64001260, lenA=lenA@entry=3, B=0x7fff64001280, lenB=lenB@entry=2, mod=...) at src/nmod_poly/div.c:36
36	            GR_MUST_SUCCEED(_gr_poly_div_basecase(Q, A, lenA, B, lenB, ctx));
(gdb) list
31	    {
32	        gr_ctx_t ctx;
33	        _gr_ctx_init_nmod(ctx, &mod);
34	
35	        if (lenB <= 15 || lenA - lenB <= 15)
36	            GR_MUST_SUCCEED(_gr_poly_div_basecase(Q, A, lenA, B, lenB, ctx));
37	        else
38	            GR_MUST_SUCCEED(_gr_poly_div_newton(Q, A, lenA, B, lenB, ctx));
39	    }
40	}

when lenB = 2 and print *b@lenB returns

{9223372036854775836, 1}

also for the crash to happen a special prime is needed, the prime is generated at frame 7, resulting in

mod = {n = 9223372036854775837, ninv = 18446744073709551500, norm = 0}

The prime is the first number in B plus 1.

We can provide instructions how to build the code to reproduce the crash if needed. But looks like some special case is not handled in _gr_poly_div_basecase

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions