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

            Bug ID: 101210
           Summary: [7/8/9/10/11/12 regression] spurious "reference
                    binding to misaligned address" ubsan error for integer
                    comparison
           Product: gcc
           Version: 11.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jlegg at feralinteractive dot com
  Target Milestone: ---

With -fsanitize=undefined, this C++ code:
int main()
{
        int x;
        int & y {x};
        return reinterpret_cast<long int>(&y) == 1;
}

Produces this error at runtime:
test.cc:5:40: runtime error: reference binding to misaligned address
0x000000000001 for type 'int', which requires 4 byte alignment
0x000000000001: note: pointer points here
<memory cannot be printed>

However, address 1 is never bound to a reference to an int. It is an integer
which is compared to another integer (which happens to be pointer sized and
derived from an address taken from a reference).

Checking various versions with compiler explorer, GCC 6 did not have this
issue, but later releases did.

Reply via email to