diff options
author | Jason Merrill <jason@redhat.com> | 2020-12-03 16:38:19 -0500 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2020-12-03 17:49:17 -0500 |
commit | 9a7f5e3906560b7a894047caf146d7c21cb02f2b (patch) | |
tree | 7ae63477abb341b3985e3dff80a14743f8dcf71d /gcc | |
parent | dce6c58db87ebf7f4477bd3126228e73e4eeee97 (diff) | |
download | gcc-9a7f5e3906560b7a894047caf146d7c21cb02f2b.zip gcc-9a7f5e3906560b7a894047caf146d7c21cb02f2b.tar.gz gcc-9a7f5e3906560b7a894047caf146d7c21cb02f2b.tar.bz2 |
c++: Fix bootstrap on 32-bit hosts [PR91828]
Using the releasing_vec op[] with an int index was breaking on 32-bit hosts
because of ambiguity with the built-in operator and the conversion
function. Since the built-in operator has a ptrdiff_t, this was fine on
64-bit targets where ptrdiff_t is larger than int, but broke on 32-bit
targets where it's the same as int, making the conversion for that argument
better than the member function. Fixed by changing the member function to
also use ptrdiff_t for the index.
gcc/cp/ChangeLog:
* cp-tree.h (releasing_vec::operator[]): Change parameter type to
ptrdiff_t.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/cp-tree.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 081ede2..f28291e 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -975,8 +975,10 @@ public: operator vec_t *() const { return v; } vec_t ** operator& () { return &v; } - /* Breaks pointer/value consistency for convenience. */ - tree& operator[] (unsigned i) const { return (*v)[i]; } + /* Breaks pointer/value consistency for convenience. This takes ptrdiff_t + rather than unsigned to avoid ambiguity with the built-in operator[] + (bootstrap/91828). */ + tree& operator[] (ptrdiff_t i) const { return (*v)[i]; } ~releasing_vec() { release_tree_vector (v); } private: |