This Go frontend patch corrects the condition under which we call
memclrHasPointers. When compiling append(s, make([]typ, ln)...),
where typ has a pointer, and the append fits within the existing
capacity of s, the condition used to clear out the new elements was
reversed. This fixes https://golang.org/issue/47771. Bootstrapped
and ran Go tests on x86_64-pc-linux-gnu. Committed to trunk and to
GCC 10 and 11 branches.
Ian
patch.txt
62749196c08af5619c386d78609def261e93b507
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index c3772694780..ff41af787b1 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-e42c7c0216aec70834e8827174458aa4a50169fa
+21b30eddc59d92a07264c3b21eb032d6c303d16f
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 8d4d168f4e3..ddb1d91f3e5 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -9350,7 +9350,7 @@ Builtin_call_expression::flatten_append(Gogo* gogo,
Named_object* function,
ref2 = Expression::make_cast(uint_type, ref2, loc);
cond = Expression::make_binary(OPERATOR_GT, ref, ref2, loc);
zero = Expression::make_integer_ul(0, int_type, loc);
- call = Expression::make_conditional(cond, call, zero, loc);
+ call = Expression::make_conditional(cond, zero, call, loc);
}
}
else