Subject: Re: A qsort template

From: Justin Pryzby <[email-masked]>
Date: Sat, 2 Apr 2022 15:20:27 -0500

On Sat, Apr 02, 2022 at 06:41:30PM +0700, John Naylor wrote:
> On Sat, Apr 2, 2022 at 5:27 PM Thomas Munro <[email-masked]> wrote:
> > Reproduced locally, using the same few lines from the cluster.sql
> > test.  I'll try to dig more tomorrow...
> 
> Thanks! Unfortunately I can't reproduce locally with clang 13/gcc 11,
> with -Og or -O2 with CFLAGS="-fsanitize=undefined,alignment" ...

Like Thomas just said, I had to use:
CFLAGS="-Og -fsanitize=undefined,alignment -fno-sanitize-recover=all

I'm a couple few steps out of my league here, but it may be an issue with:

commit 4ea51cdfe85ceef8afabceb03c446574daa0ac23
Author: Robert Haas <[email-masked]>
Date:   Mon Jan 19 15:20:31 2015 -0500

    Use abbreviated keys for faster sorting of text datums.

This is enough to avoid the crash, which might be a useful hint..

@@ -4126,22 +4126,23 @@ copytup_cluster(Tuplesortstate *state, SortTuple *stup, void *tup)
        /*
         * set up first-column key value, and potentially abbreviate, if it's a
         * simple column
         */
+       stup->isnull1 = false;
        if (state->indexInfo->ii_IndexAttrNumbers[0] == 0)
                return;
 
        original = heap_getattr(tuple,
                                                        state->indexInfo->ii_IndexAttrNumbers[0],
                                                        state->tupDesc,
                                                        &stup->isnull1);

---

From: Thomas Munro <[email-masked]>
Date: Sun, 3 Apr 2022 08:37:40 +1200

> +       stup->isnull1 = false;

Looks like I might have failed to grok the scheme for encoding null
into SortTuple objects.  It's clearly uninitialised in some paths,
with a special 0 value in datum1.  Will need to look more closely with
more coffee...