emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Certain numbers of special forms cause changing behaviour on functio


From: Noam Postavsky
Subject: Re: Certain numbers of special forms cause changing behaviour on function calls in --batch
Date: Sun, 10 Jul 2016 12:23:17 -0400

On Sun, Jul 10, 2016 at 10:53 AM, Eli Zaretskii <address@hidden> wrote:
>> From: Noam Postavsky <address@hidden>
>> Date: Sun, 10 Jul 2016 07:33:47 -0400
>> Cc: Eli Zaretskii <address@hidden>, Michael Heerdegen <address@hidden>, 
>> address@hidden,
>>       Emacs developers <address@hidden>
>>
>> I have gcc 5.3.0 here, and I get 10 (correct) when I compile Emacs
>> 24.5 configured with --enable-checking, but 20 (incorrect) without
>> that flag.
>
> I've just built 24.5 with GCC 5.3.0 and without --enable-checking, and
> I still don't see the problem in the resulting binary.

Hmm, that's annoying.

>> valgrind emacs-24.5/src/temacs -Q --batch -l nasty-move-end-of-line-batch.el
>> [...]
>> ==6167== Conditional jump or move depends on uninitialised value(s)
>> ==6167==    at 0x55E74E: CHECK_NUMBER_OR_FLOAT (lisp.h:2627)
>> ==6167==    by 0x5EC762: Fzerop (data.c:2387)
>
> I don't understand these errors.  Please show the macro-expanded
> source of Fzerop with that compiler and configuration options.

I don't think Fzerop is especially relevant, AFAICT, the error just
means Fzerop received an unitialized value as its first argument. The
Emacs-25 error doesn't include Fzerop (because zerop is optimized to
(= <arg> 0) I think).

Lisp_Object Fzerop (Lisp_Object) ; static struct Lisp_Subr
# 2383 "data.c" 3 4
_Alignas
# 2383 "data.c"
(8) Szerop = { { PVEC_SUBR << PSEUDOVECTOR_AREA_BITS }, { .a1 = Fzerop
}, 1, 1, "zerop", 0, 0}; Lisp_Object Fzerop

  (register Lisp_Object number)
{
  CHECK_NUMBER_OR_FLOAT (number); //// <<<<---- this is line 2387

  if ((((enum Lisp_Type) ((number) & ~(
# 2389 "data.c" 3 4
     1
# 2389 "data.c"
     ? - (1 << 3) : (0x7fffffffffffffffL >> (3 - 1))))) == Lisp_Float))
    {
      if (XFLOAT_DATA (number) == 0.0)
 return Qt;
      return Qnil;
    }

  if (!((number) >> INTTYPEBITS))
    return Qt;
  return Qnil;
}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]