diff options
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 24 |
1 files changed, 0 insertions, 24 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index f617db91510..8f0f6017b31 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -10521,30 +10521,6 @@ QualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) { return QualType(); } - // Taking the address of a data member/field of a packed - // struct may be a problem if the pointer value is dereferenced. - Expr *rhs = OrigOp.get(); - const auto *ME = dyn_cast<MemberExpr>(rhs); - while (ME && isa<FieldDecl>(ME->getMemberDecl())) { - QualType BaseType = ME->getBase()->getType(); - if (ME->isArrow()) - BaseType = BaseType->getPointeeType(); - RecordDecl *RD = BaseType->getAs<RecordType>()->getDecl(); - - ValueDecl *MD = ME->getMemberDecl(); - bool ByteAligned = Context.getTypeAlignInChars(MD->getType()).isOne(); - if (ByteAligned) // Attribute packed does not have any effect. - break; - - if (!ByteAligned && - (RD->hasAttr<PackedAttr>() || (MD->hasAttr<PackedAttr>()))) { - Diag(OpLoc, diag::warn_taking_address_of_packed_member) - << MD << RD << rhs->getSourceRange(); - break; - } - ME = dyn_cast<MemberExpr>(ME->getBase()); - } - return Context.getPointerType(op->getType()); } |

