diff options
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 3 | ||||
-rw-r--r-- | test/SemaCXX/expressions.cpp | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 36b88672b3..52ab62be02 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -6156,7 +6156,8 @@ QualType Sema::CheckAssignmentOperands(Expr *LHS, Expr *&RHS, // is converted to the type of the assignment expression (above). // C++ 5.17p1: the type of the assignment expression is that of its left // operand. - return LHSType.getUnqualifiedType(); + return (getLangOptions().CPlusPlus + ? LHSType : LHSType.getUnqualifiedType()); } // C99 6.5.17 diff --git a/test/SemaCXX/expressions.cpp b/test/SemaCXX/expressions.cpp index b51194acd9..6bf59d1167 100644 --- a/test/SemaCXX/expressions.cpp +++ b/test/SemaCXX/expressions.cpp @@ -14,3 +14,10 @@ void f0() { register int x; f0_1(&x); } + +template <class T> void bar(T &x) { T::fail(); } +template <class T> void bar(volatile T &x) {} +void f1() { + volatile int x; + bar(x = 5); +} |