https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70457

            Bug ID: 70457
           Summary: ICE (segfault) in gimple_expand_builtin_pow on
                    powerpc64le-linux-gnu
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: doko at gcc dot gnu.org
  Target Milestone: ---

fails in 4.8 up to 6, works with -O2

$ gcc -c -O3 math.i 
math.i: In function 'P_Pow':
math.i:26:8: internal compiler error: Segmentation fault
 Object P_Pow (Object x, Object y) { return General_Function (x, y, pow); }
        ^
0x102bde83 crash_signal
        ../../src/gcc/toplev.c:383
0x1031d914 gimple_expand_builtin_pow
        ../../src/gcc/tree-ssa-math-opts.c:1169
0x10a42827 execute
        ../../src/gcc/tree-ssa-math-opts.c:1517
Please submit a full bug report,
with preprocessed source if appropriate.

$ cat math.i 
extern double pow (double __x, double __y) __attribute__ ((__nothrow__ ,
__leaf__)); extern double __pow (double __x, double __y) __attribute__
((__nothrow__ , __leaf__));

typedef int int64_t __attribute__ ((__mode__ (__DI__)));

typedef struct {
    int64_t data;
    int tag;
} Object;

extern Object Make_Flonum (double);
extern Object P_Pow (Object, Object);

Object General_Function (Object x, Object y, double (*fun)()) {
    double d, ret;

    d = 1.0;

    if (y.tag >> 1)
        ret = (*fun) (d);
    else
        ret = (*fun) (d, 0.0);

    return Make_Flonum (ret);
}

Object P_Pow (Object x, Object y) { return General_Function (x, y, pow); }

Reply via email to