[PATCH] D139261: [Clang] Modify sanity check assert in AggExprEmitter::VisitInitListExpr to cover anonymous struct in a union GNU extension
Shafik Yaghmour via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 21 10:19:37 PST 2022
shafik updated this revision to Diff 484613.
shafik added a comment.
- Add Release note
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139261/new/
https://reviews.llvm.org/D139261
Files:
clang/docs/ReleaseNotes.rst
clang/lib/CodeGen/CGExprAgg.cpp
clang/test/SemaCXX/anonymous-struct.cpp
Index: clang/test/SemaCXX/anonymous-struct.cpp
===================================================================
--- clang/test/SemaCXX/anonymous-struct.cpp
+++ clang/test/SemaCXX/anonymous-struct.cpp
@@ -189,3 +189,20 @@
}
} A; // expected-note {{given name 'A' for linkage purposes by this typedef}}
}
+
+#if __cplusplus > 201103L
+namespace GH58800 {
+struct A {
+ union {
+ struct {
+ float red = 0.0f;
+ };
+ };
+};
+
+A GetA() {
+ A result{};
+ return result;
+}
+}
+#endif
Index: clang/lib/CodeGen/CGExprAgg.cpp
===================================================================
--- clang/lib/CodeGen/CGExprAgg.cpp
+++ clang/lib/CodeGen/CGExprAgg.cpp
@@ -1724,7 +1724,7 @@
// Make sure that it's really an empty and not a failure of
// semantic analysis.
for (const auto *Field : record->fields())
- assert(Field->isUnnamedBitfield() && "Only unnamed bitfields allowed");
+ assert((Field->isUnnamedBitfield() || Field->isAnonymousStructOrUnion()) && "Only unnamed bitfields or ananymous class allowed");
#endif
return;
}
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -326,6 +326,9 @@
- Fix bug where constant evaluation treated a pointer to member that points to
a weak member as never being null. Such comparisons are now treated as
non-constant.
+- Fix sanity check when value initializing an empty union so that it takes into
+ account anonymous structs which is a GNU extension. This fixes
+ `Issue 58800 <https://github.com/llvm/llvm-project/issues/58800>`_
Improvements to Clang's diagnostics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139261.484613.patch
Type: text/x-patch
Size: 1750 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221221/e1c10888/attachment.bin>
More information about the cfe-commits
mailing list