This is the mail archive of the
mailing list for the GCC project.
Re: C++ interop issue due to non-null pointers
- From: Florian Weimer <fweimer at redhat dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Trevor Saunders <tsaunders at mozilla dot com>, Jonathan Wakely <jwakely dot gcc at gmail dot com>, GCC <gcc at gcc dot gnu dot org>
- Date: Tue, 17 Jun 2014 16:52:29 +0200
- Subject: Re: C++ interop issue due to non-null pointers
- Authentication-results: sourceware.org; auth=none
- References: <53997584 dot 8080706 at redhat dot com> <CAH6eHdRua1KTs1QXf2Pu39orxCx6agdzwdzVvcPkcNVEEkRErA at mail dot gmail dot com> <53A03782 dot 9020208 at redhat dot com> <20140617142403 dot GA25179 at tsaunders-iceball dot corp dot tor1 dot mozilla dot com> <53A051E8 dot 5000105 at redhat dot com> <20140617143939 dot GC31640 at tucnak dot redhat dot com>
On 06/17/2014 04:39 PM, Jakub Jelinek wrote:
On Tue, Jun 17, 2014 at 04:34:16PM +0200, Florian Weimer wrote:
I'm not that familiar with the exact requirements of std::vector, could
we use the same trick as
that is instead of pointing at null point at a global header used for
all empty vectors?
For std::vector, we could use reinterpret_cast<T*>(alignof(T)) or
reinterpret_cast<T*>(sizeof(T)) if those are sufficiently well-defined as
far as GCC is concerned. The smaller constant is easier to load, and no
relocation is required.
If there is no object at those addresses, that is still undefined behavior.
GCC is the implementation, so it could be made defined there.
GCC will likely not optimize it away at this point, but having code with
undefined behavior is just asking for future trouble. Just use "" instead?
It's always const and may lack sufficient alignment. The former isn't a
problem in C++ (I think), but the alignment is an issue.
Florian Weimer / Red Hat Product Security Team