================
@@ -15534,17 +15534,28 @@ void Sema::AddPotentialMisalignedMembers(Expr *E, 
RecordDecl *RD, ValueDecl *MD,
   MisalignedMembers.emplace_back(E, RD, MD, Alignment);
 }
 
-void Sema::DiagnoseMisalignedMembers() {
-  for (MisalignedMember &m : MisalignedMembers) {
-    const NamedDecl *ND = m.RD;
+void Sema::DiagnoseMisalignedMembers(const Expr *E) {
+  // Only emit diagnostics related to the current expression.
+  const auto *EmitFrom = MisalignedMembers.begin();
+  if (E->getSourceRange().isValid()) {
----------------
vvuksanovic wrote:

The idea was to only emit diagnostics for candidates that are contained within 
the expression that is currently being processed. The candidates that are 
skipped here will get processed when the appropriate expr is completed, when 
false positives related to that expr have been discarded.

I agree, we shouldn't rely on source locations for this. I'm working on a fix 
that makes `MisalignedMembers` a stack similar to `ExprEvalContext` which will 
be more reliable.

https://github.com/llvm/llvm-project/pull/150025
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to