This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: dwarf2out & var-tracking & cond_exec call


I found my problem totally elsewhere (sorry to bother)

I was loosing proper NOTES during a COND_EXEC((..)(CALL(..))) split ...

   Selim

-----Message d'origine-----
De : gcc-owner@gcc.gnu.org [mailto:gcc-owner@gcc.gnu.org] De la part de BELBACHIR Selim
Envoyé : vendredi 29 novembre 2013 14:29
À : gcc@gcc.gnu.org
Objet : dwarf2out & var-tracking & cond_exec call

Hi,

I'm still porting my private backing from gcc 4.5.2 to  gcc 4.7.3.
When compiling the following code with -g option, I encountered "internal compiler error: in dwarf2out_var_location, at dwarf2out.c:20883"

void toto(int* , float);
void foo(int a, float b, int * c) {
  if (b)
    toto(c, b);
}

I don't know well what should contain NOTES but when I look at the gcc_assert at dwarf2out.c:20883 :

      gcc_assert (prev
                  && (CALL_P (prev)
                      || (NONJUMP_INSN_P (prev)
                          && GET_CODE (PATTERN (prev)) == SEQUENCE
                          && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));

I would say that COND_EXEC(CALL(..)) handling is missing. Is It right or something went wrong on previous pass (var-tracking pass for example ...)

Here is my conditional call pattern :

(define_insn "call_cond"
  [(cond_exec (match_operator 3 "comparison_operator"
          [(match_operand 4 "cc_register" "") (const_int 0)])
      (parallel[
           (call (mem:SI (match_operand:SI 0 "call_address_op" " i,r"))
                 (match_operand:SI 1 "immediate_operand"       " X,X"))
           (clobber (match_operand:SI 2 "register_operand"     "=r,r"))]))]

Regards,

   Selim




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]