Re: BUG #15121: Multiple UBSAN errors

From: Martin Liška <marxin(dot)liska(at)gmail(dot)com>
To: Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #15121: Multiple UBSAN errors
Date: 2018-03-19 21:41:11
Message-ID: CAObPJ3M-nGmX8AT8kHk29=CFU899=NhoTLcmw=+9OT4qsCTxaQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 19 March 2018 at 22:24, Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> wrote:
>
>
> On 03/19/2018 07:20 PM, Tom Lane wrote:
>> Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> writes:
>>> On 03/19/2018 03:28 PM, Martin Liška wrote:
>>>>>> Note that building postgresql with -03, I see some array tests failing.
>>
>>> I'm getting failures in errors, union and alter_table, but none of those
>>> are related to arrays. So, which tests are failing for you and how do
>>> the failures look like?
>>
>> I tried -O3 with gcc 7.3.1 (Fedora 26), and that passes check-world
>> just fine. Then I tried -O3 with gcc 8.0.1 (prerelease Fedora 28),
>> and indeed that's got some problems. It looks like array_out fails
>> for multidimensional arrays, because all the diffs look about
>> like this one:
>>
>> *** 106,116 ****
>> SET c[2:2] = '{"new_word"}'
>> WHERE array_dims(c) is not null;
>> SELECT a,b,c FROM arrtest;
>> ! a | b | c
>> ! ---------------+-----------------------+-------------------
>> ! {16,25,3,4,5} | {{{113,142},{1,147}}} | {}
>> ! {} | {3,4} | {foo,new_word}
>> ! {16,25,23} | {{3,4},{4,5}} | {foobar,new_word}
>> (3 rows)
>>
>> SELECT a[1:3],
>> --- 106,116 ----
>> SET c[2:2] = '{"new_word"}'
>> WHERE array_dims(c) is not null;
>> SELECT a,b,c FROM arrtest;
>> ! a | b | c
>> ! ---------------+---------------+-------------------
>> ! {16,25,3,4,5} | {{ | {}
>> ! {} | {3,4} | {foo,new_word}
>> ! {16,25,23} | {{3,4},{4,5}} | {foobar,new_word}
>> (3 rows)
>>
>> SELECT a[1:3],
>>
>> Note that 1-D and 2-D arrays print fine, it's only 3-D or deeper
>> that print wrong. Very odd. Maybe it's bad code on our part,
>> but I think the odds are at least as good that it's a new gcc bug.
>>
>
> Interesting. If I run the tests with "-03" I get the same failures in
> arrays. If I run them with "-O3 -fsanitize=undefined" I don't get any
> failures in arrays, but I get failures in errors, union and alter_table.
>
> I wouldn't expect -fsanitize=undefined to affect the results like this,

No, it's logical as the assembly is instrumented to process e.g.
boundary checking
each time an array is accessed. It explain why compiler can't optimize
as there are
new boundary which can't be crossed.

To be honest, sanitizers should report equal errors for all optimization errors.

Martin

> but if it really is a compiler bug then all bets are off.
>
> regards
>
> --
> Tomas Vondra http://www.2ndQuadrant.com
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message PG Bug reporting form 2018-03-20 09:31:03 BUG #15122: can't import data if table has a constraint with a function calling another function
Previous Message Tomas Vondra 2018-03-19 21:24:53 Re: BUG #15121: Multiple UBSAN errors