From b63566a4045e9cc27f739c89f863dbfb9dbe7860 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 5 Nov 2019 18:53:53 -0500 Subject: Fix conversions for built-in operator overloading candidates. While working on C++20 operator<=>, I noticed that build_new_op_1 was doing too much conversion when a built-in candidate was selected; the standard says it should only perform user-defined conversions, and then leave the normal operator semantics to handle any standard conversions. This is important for operator<=> because a comparison of two different unscoped enums is ill-formed; if we promote the enums to int here, cp_build_binary_op never gets to see the original operand types, so we can't give the error. I'm also disabling -Wmaybe-uninitialized for expmed.c to avoid the bootstrap failure from the last time I applied this patch. * call.c (build_new_op_1): Don't apply any standard conversions to the operands of a built-in operator. Don't suppress conversions in cp_build_unary_op. * typeck.c (cp_build_unary_op): Do integral promotions for enums. PR tree-optimization/91825 * expmed.c: Reduce -Wmaybe-uninitialized to warning. From-SVN: r277864 --- gcc/expmed.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gcc/expmed.c') diff --git a/gcc/expmed.c b/gcc/expmed.c index f1975fe..ff8554b 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -18,6 +18,8 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +/* Work around tree-optimization/91825. */ +#pragma GCC diagnostic warning "-Wmaybe-uninitialized" #include "config.h" #include "system.h" -- cgit v1.1