rsmith added a comment. This still looks like it will have has lots of false positives for cases like:
struct __attribute__((packed)) A { char c; int n; } a; void *p = &a.n; It also looks like it will now have false negatives for cases like: memcpy(x, y, *&a.n); I think whitelisting specific functions is not a reasonable approach here; instead, how about deferring the check until you see how the misaligned pointer is used? A couple of approaches seem feasible: - you could extend the conversion-checking code in SemaChecking to look for such misaligned operations that are not immediately converted to a pointer type with suitable (lower) alignment requirements - you could build a list in Sema of the cases that are pending a diagnostic, produce diagnostics at the end of the full-expression, and remove items from the list when you see a suitable conversion applied to them In any case, this diagnostic should apply to reference binding as well as pointers. GCC appears to check this as a separate step, at least after it applies its fold; for example: struct __attribute__((packed, aligned(4))) S { char c[4]; int n; } s; int k; int &r = true ? s.n : k; // gcc rejects, "cannot bind paced field 's.S::n' to 'int&' int &s = false ? s.n : k; // gcc accepts http://reviews.llvm.org/D20561 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits