From: David Majnemer Date: Sun, 4 Jan 2015 00:44:32 +0000 (+0000) Subject: AST: Remove overzealous assertion from IsModifiable X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1bb85b211dd0946393663c7d6a1d4ddecf739aa2;p=clang AST: Remove overzealous assertion from IsModifiable It's reasonable to ask if an l-value with class type is modifiable. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225121 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ExprClassification.cpp b/lib/AST/ExprClassification.cpp index 915ca161c9..933ea97fa2 100644 --- a/lib/AST/ExprClassification.cpp +++ b/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/test/SemaCXX/statements.cpp b/test/SemaCXX/statements.cpp index efca37dcba..15b0b50ddc 100644 --- a/test/SemaCXX/statements.cpp +++ b/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)); }