pgsql: llvmjit: Also copy parameter / return value attributes from temp

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: llvmjit: Also copy parameter / return value attributes from temp
Date: 2020-10-15 22:22:35
Message-ID: E1kTBdr-0004UK-Kr@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

llvmjit: Also copy parameter / return value attributes from template functions.

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

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/f3dee5b9aba6bd8cf3d5a13296495df7b273835c

Modified Files
--------------
src/backend/jit/llvm/llvmjit.c | 44 +++++++++++++++++++++++++++++++-----------
1 file changed, 33 insertions(+), 11 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2020-10-15 23:33:54 pgsql: pg_upgrade: generate check error for left-over new tablespace
Previous Message Andres Freund 2020-10-15 22:22:33 pgsql: llvmjit: Also copy parameter / return value attributes from temp