aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-12-03 16:38:19 -0500
committerJason Merrill <jason@redhat.com>2020-12-03 17:49:17 -0500
commit9a7f5e3906560b7a894047caf146d7c21cb02f2b (patch)
tree7ae63477abb341b3985e3dff80a14743f8dcf71d /gcc
parentdce6c58db87ebf7f4477bd3126228e73e4eeee97 (diff)
downloadgcc-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.h6
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: