[PATCH] D40895: Ignore pointers to incomplete types when diagnosing misaligned addresses
Roger Ferrer Ibanez via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 6 06:08:56 PST 2017
rogfer01 created this revision.
This is a fix for PR35509 in which we crash because we attempt to compute the alignment of an incomplete type.
https://reviews.llvm.org/D40895
Files:
lib/Sema/SemaChecking.cpp
test/SemaCXX/address-packed.cpp
Index: test/SemaCXX/address-packed.cpp
===================================================================
--- test/SemaCXX/address-packed.cpp
+++ test/SemaCXX/address-packed.cpp
@@ -112,3 +112,12 @@
S<float> s3;
s3.get(); // expected-note {{in instantiation of member function 'S<float>::get'}}
}
+
+// PR35509
+typedef long L1;
+struct Incomplete;
+struct S2 {
+ L1 d;
+ Incomplete *e() const;
+} __attribute__((packed));
+Incomplete *S2::e() const { return (Incomplete *)&d; } // no-warning
Index: lib/Sema/SemaChecking.cpp
===================================================================
--- lib/Sema/SemaChecking.cpp
+++ lib/Sema/SemaChecking.cpp
@@ -12453,8 +12453,9 @@
MisalignedMember(Op));
if (MA != MisalignedMembers.end() &&
(T->isIntegerType() ||
- (T->isPointerType() &&
- Context.getTypeAlignInChars(T->getPointeeType()) <= MA->Alignment)))
+ (T->isPointerType() && (T->getPointeeType()->isIncompleteType() ||
+ Context.getTypeAlignInChars(
+ T->getPointeeType()) <= MA->Alignment))))
MisalignedMembers.erase(MA);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D40895.125718.patch
Type: text/x-patch
Size: 1209 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171206/9b7f5478/attachment-0001.bin>
More information about the cfe-commits
mailing list