https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114217

--- Comment #13 from Akihiko Odaki <akihiko.odaki at daynix dot com> ---
(In reply to Jakub Jelinek from comment #12)
> (In reply to Akihiko Odaki from comment #11)
> > So there are two constructs invoking UBs but ignored by UBSan: 1)
> 
> That is an understatement. UBSan is a best effort which diagnoses some forms
> of undefined behavior.  There are tons of undefined behavior UBSan doesn't
> catch,
> most importantly e.g. aliasing violations, but far from limited to just that.
> If a program is diagnostic free with -fsanitize=undefined,address , it
> doesn't mean it is UB free, but the goal is that if there is diagnostic,
> there is a real UB in the program.

Right. I just listed the two relevant constructs and don't intend to say they
are the only case that UBSan doesn't catch.

> 
> You are basically asking for the PR80797 fix to be reverted just because you
> aren't willing to fix UB in your code.  That is not going to happen, we've
> been diagnosing this for almost 7 years now, I think clang even for 11
> years, it is a real UB and other projects have been able to cope with it. 
> By reverting the change new UB in other programs couldn't be discovered.

I'm not asking for reverting PR80797. See f() and f2() I wrote earlier:
u64 f(struct dir_entry *entry)
{
    return get_unaligned(&entry->offset);
}

u64 f2(u64 *offset)
{
    return get_unaligned(offset);
}

Both f(NULL) and f2(NULL) should be caught and there should be no discrepancy
in behavior for these two functions. However, there is a discrepancy when it
comes to -fsanitize=alignment.

I'm not saying ignoring UB in f() is the only sensible option either. Catching
UBs in both f() and f2() is a logical option.

Reply via email to