• Andres Freund's avatar
    llvmjit: Also copy parameter / return value attributes from template functions. · 72559438
    Andres Freund authored
    Previously we only copied the function attributes. That caused problems at
    least on s390x: Because we didn't copy the 'zeroext' attribute for
    ExecAggTransReparent()'s *IsNull parameters, expressions invoking it didn't
    ensure that the upper bytes of the registers were zeroed. In the - relatively
    rare - cases where not, ExecAggTransReparent() wrongly ended up in the
    newValueIsNull branch due to the register not being zero. Subsequently causing
    a crash.
    
    It's quite possible that this would cause problems on other platforms, and in
    other places than just ExecAggTransReparent() on s390x.
    
    Thanks to Christoph (and the Debian project) for providing me with access to a
    s390x machine, allowing me to debug this.
    
    Reported-By: Christoph Berg
    Author: Andres Freund
    Discussion: https://postgr.es/m/20201015083246.kie5726xerdt3ael@alap3.anarazel.de
    Backpatch: 11-, where JIT was added
    72559438
llvmjit.c 24.7 KB