diff options
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 3 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 1 | ||||
| -rw-r--r-- | clang/test/SemaCXX/rval-references.cpp | 4 |
3 files changed, 5 insertions, 3 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 39127947372..84b2a88d582 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -767,7 +767,8 @@ def err_init_conversion_failed : Error< "base class|a vector element}0 of type %1 with an %select{rvalue|lvalue}2 of " "type %3">; -def err_lvalue_to_rvalue_ref : Error<"rvalue reference cannot bind to lvalue">; +def err_lvalue_to_rvalue_ref : Error<"rvalue reference to type %0 cannot bind " + "to lvalue of type %1">; def err_invalid_initialization : Error< "invalid initialization of reference of type %0 from expression of type %1">; def err_lvalue_to_rvalue_ambig_ref : Error<"rvalue reference cannot bind to lvalue " diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 59a39361316..3ed336dbb83 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -4140,6 +4140,7 @@ bool InitializationSequence::Diagnose(Sema &S, case FK_RValueReferenceBindingToLValue: S.Diag(Kind.getLocation(), diag::err_lvalue_to_rvalue_ref) + << DestType.getNonReferenceType() << Args[0]->getType() << Args[0]->getSourceRange(); break; diff --git a/clang/test/SemaCXX/rval-references.cpp b/clang/test/SemaCXX/rval-references.cpp index ee659ecbd2a..df6e4004285 100644 --- a/clang/test/SemaCXX/rval-references.cpp +++ b/clang/test/SemaCXX/rval-references.cpp @@ -28,9 +28,9 @@ fun_type &&make_fun(); void f() { int &&virr1; // expected-error {{declaration of reference variable 'virr1' requires an initializer}} int &&virr2 = 0; - int &&virr3 = virr2; // expected-error {{rvalue reference cannot bind to lvalue}} + int &&virr3 = virr2; // expected-error {{rvalue reference to type 'int' cannot bind to lvalue of type 'int'}} int i1 = 0; - int &&virr4 = i1; // expected-error {{rvalue reference cannot bind to lvalue}} + int &&virr4 = i1; // expected-error {{rvalue reference to type 'int' cannot bind to lvalue of type 'int'}} int &&virr5 = ret_irr(); int &&virr6 = static_cast<int&&>(i1); (void)static_cast<not_int&&>(i1); // expected-error {{types are not compatible}} |

