================
@@ -1496,9 +1615,37 @@ static bool 
IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
     return false;
   }
 
-  if (Field1->isBitField())
-    return IsStructurallyEquivalent(Context, Field1->getBitWidth(),
-                                    Field2->getBitWidth());
+  if ((Field1->isBitField() || Field2->isBitField()) &&
+      !IsStructurallyEquivalent(Context, Field1->getBitWidth(),
+                                Field2->getBitWidth())) {
+    if (Context.Complain) {
+      auto DiagNote = [&](const FieldDecl *FD,
+                          DiagnosticBuilder (
+                              StructuralEquivalenceContext::*Diag)(
+                              SourceLocation, unsigned)) {
+        if (FD->isBitField()) {
+          std::string Str;
+          llvm::raw_string_ostream OS(Str);
+          PrintingPolicy Policy(Context.LangOpts);
+          FD->getBitWidth()->printPretty(OS, nullptr, Policy);
----------------
AaronBallman wrote:

I ended up switching to use `getBitWidthValue()`; I still can't find a way to 
induce an issue with it and it simplifies things.

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

Reply via email to