From 99b98f07d4b076a6aae4966ccb8b1d613ede0898 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sun, 4 Jan 2015 00:44:32 +0000 Subject: [PATCH] AST: Remove overzealous assertion from IsModifiable It's reasonable to ask if an l-value with class type is modifiable. llvm-svn: 225121 --- clang/lib/AST/ExprClassification.cpp | 7 +------ clang/test/SemaCXX/statements.cpp | 3 +++ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/clang/lib/AST/ExprClassification.cpp b/clang/lib/AST/ExprClassification.cpp index 915ca16..933ea97 100644 --- a/clang/lib/AST/ExprClassification.cpp +++ b/clang/lib/AST/ExprClassification.cpp @@ -615,14 +615,9 @@ static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E, return Cl::CM_IncompleteType; // Records with any const fields (recursively) are not modifiable. - if (const RecordType *R = CT->getAs()) { - assert((E->getObjectKind() == OK_ObjCProperty || - !Ctx.getLangOpts().CPlusPlus) && - "C++ struct assignment should be resolved by the " - "copy assignment operator."); + if (const RecordType *R = CT->getAs()) if (R->hasConstFields()) return Cl::CM_ConstQualified; - } return Cl::CM_Modifiable; } diff --git a/clang/test/SemaCXX/statements.cpp b/clang/test/SemaCXX/statements.cpp index efca37dc..15b0b50 100644 --- a/clang/test/SemaCXX/statements.cpp +++ b/clang/test/SemaCXX/statements.cpp @@ -34,3 +34,6 @@ void test5() { char buf[1]; __asm__ ("":"+r" (buf)); } + +struct MMX_t {}; +void test6() { __asm__("" : "=m"(*(MMX_t *)0)); } -- 2.7.4