+2019-12-09 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ * gdbtypes.c (rank_one_type): Return INCOMPATIBLE_TYPE_BADNESS
+ when ranking an lvalue argument for an rvalue parameter.
+
2019-12-08 Wataru Ashihara <wataash@wataash.com>
* darwin-nat.c (darwin_nat_target::create_inferior): Fix
}
else
{
- /* Lvalues should prefer lvalue overloads. */
+ /* It's illegal to pass an lvalue as an rvalue. */
if (TYPE_CODE (parm) == TYPE_CODE_RVALUE_REF)
- {
- rank.subrank = REFERENCE_CONVERSION_RVALUE;
- return sum_ranks (rank, REFERENCE_CONVERSION_BADNESS);
- }
+ return INCOMPATIBLE_TYPE_BADNESS;
}
}
+2019-12-09 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ * gdb.cp/rvalue-ref-overload.cc (g): New function that takes
+ an rvalue parameter.
+ * gdb.cp/rvalue-ref-overload.exp: Test calling it with an lvalue
+ parameter.
+
2019-12-09 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.mi/mi-fortran-modules.exp: Add patterns to skip system
return 3;
}
+static int
+g (int &&x)
+{
+ return x;
+}
+
int
main ()
{
int test_const // = 3
= foo_rr_instance1.overloadConst (arg);
+ /* The statement below is illegal: cannot bind rvalue reference of
+ type 'int&&' to lvalue of type 'int'.
+
+ result = g (i); */
+ result = g (5); // this is OK
+
marker1 (); // marker1-returns-here
return result;
}
setup_kfail "c++/15372" "*-*-*"
gdb_test "print f (3)" "3" "rvalue reference overload"
+
+gdb_test "print g (i)" \
+ "Cannot resolve function g to any overloaded instance" \
+ "passing lvalue arg to rvalue parameter"