serge-sans-paille created this revision.
serge-sans-paille added a reviewer: jyknight.
Herald added a project: All.
serge-sans-paille requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
This is a follow up to https://reviews.llvm.org/D126864, addressing some
remaining
comments. No functional change intended.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D132944
Files:
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/CGExpr.cpp
clang/lib/Sema/SemaChecking.cpp
clang/test/CodeGen/object-size-flex-array.c
Index: clang/test/CodeGen/object-size-flex-array.c
===================================================================
--- clang/test/CodeGen/object-size-flex-array.c
+++ clang/test/CodeGen/object-size-flex-array.c
@@ -24,7 +24,7 @@
double c[2];
} foo2_t;
-// CHECK-LABEL: @bar
+// CHECK-LABEL: @bar(
unsigned bar(foo_t *f) {
// CHECK-STRICT-0: ret i32 %
// CHECK-STRICT-1: ret i32 %
@@ -32,7 +32,7 @@
return OBJECT_SIZE_BUILTIN(f->c, 1);
}
-// CHECK-LABEL: @bar0
+// CHECK-LABEL: @bar0(
unsigned bar0(foo0_t *f) {
// CHECK-STRICT-0: ret i32 %
// CHECK-STRICT-1: ret i32 %
@@ -40,7 +40,7 @@
return OBJECT_SIZE_BUILTIN(f->c, 1);
}
-// CHECK-LABEL: @bar1
+// CHECK-LABEL: @bar1(
unsigned bar1(foo1_t *f) {
// CHECK-STRICT-0: ret i32 %
// CHECK-STRICT-1: ret i32 %
@@ -48,7 +48,7 @@
return OBJECT_SIZE_BUILTIN(f->c, 1);
}
-// CHECK-LABEL: @bar2
+// CHECK-LABEL: @bar2(
unsigned bar2(foo2_t *f) {
// CHECK-STRICT-0: ret i32 %
// CHECK-STRICT-1: ret i32 16
@@ -73,7 +73,7 @@
float f;
} foofoo2_t;
-// CHECK-LABEL: @babar0
+// CHECK-LABEL: @babar0(
unsigned babar0(foofoo0_t *f) {
// CHECK-STRICT-0: ret i32 0
// CHECK-STRICT-1: ret i32 0
@@ -81,7 +81,7 @@
return OBJECT_SIZE_BUILTIN(f->c, 1);
}
-// CHECK-LABEL: @babar1
+// CHECK-LABEL: @babar1(
unsigned babar1(foofoo1_t *f) {
// CHECK-STRICT-0: ret i32 8
// CHECK-STRICT-1: ret i32 8
@@ -89,7 +89,7 @@
return OBJECT_SIZE_BUILTIN(f->c, 1);
}
-// CHECK-LABEL: @babar2
+// CHECK-LABEL: @babar2(
unsigned babar2(foofoo2_t *f) {
// CHECK-STRICT-0: ret i32 16
// CHECK-STRICT-1: ret i32 16
Index: clang/lib/Sema/SemaChecking.cpp
===================================================================
--- clang/lib/Sema/SemaChecking.cpp
+++ clang/lib/Sema/SemaChecking.cpp
@@ -15849,16 +15849,10 @@
if (!ND)
return false;
- if (StrictFlexArraysLevel >= 2 && Size != 0)
- return false;
-
- if (StrictFlexArraysLevel == 1 && Size.uge(2))
- return false;
-
// FIXME: While the default -fstrict-flex-arrays=0 permits Size>1 trailing
// arrays to be treated as flexible-array-members, we still emit diagnostics
// as if they are not. Pending further discussion...
- if (StrictFlexArraysLevel == 0 && Size != 1)
+ if (StrictFlexArraysLevel >= 2 || Size.uge(2))
return false;
const FieldDecl *FD = dyn_cast<FieldDecl>(ND);
@@ -16026,8 +16020,8 @@
if (BaseType->isIncompleteType())
return;
- // FIXME: this check should belong to the IsTailPaddedMemberArray call
- // below.
+ // FIXME: this check should be used to set IsUnboundedArray from the
+ // beginning.
llvm::APInt size = ArrayTy->getSize();
if (!size.isStrictlyPositive())
return;
Index: clang/lib/CodeGen/CGExpr.cpp
===================================================================
--- clang/lib/CodeGen/CGExpr.cpp
+++ clang/lib/CodeGen/CGExpr.cpp
@@ -906,10 +906,8 @@
if (const auto *FD = dyn_cast<FieldDecl>(ME->getMemberDecl())) {
// FIXME: Sema doesn't treat a T[1] union member as a flexible array
// member, only a T[0] or T[] member gets that treatment.
- // Under StrictFlexArraysLevel, obey c99+ that disallows FAM in union, see
- // C11 6.7.2.1 §18
if (FD->getParent()->isUnion())
- return StrictFlexArraysLevel < 2;
+ return true;
RecordDecl::field_iterator FI(
DeclContext::decl_iterator(const_cast<FieldDecl *>(FD)));
return ++FI == FD->getParent()->field_end();
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -1147,7 +1147,7 @@
def fapple_kext : Flag<["-"], "fapple-kext">, Group<f_Group>, Flags<[CC1Option]>,
HelpText<"Use Apple's kernel extensions ABI">,
MarshallingInfoFlag<LangOpts<"AppleKext">>;
-def fstrict_flex_arrays_EQ : Joined<["-"], "fstrict-flex-arrays=">,Group<f_Group>,
+def fstrict_flex_arrays_EQ : Joined<["-"], "fstrict-flex-arrays=">, Group<f_Group>,
MetaVarName<"<n>">, Values<"0,1,2">,
LangOpts<"StrictFlexArrays">,
Flags<[CC1Option]>,
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits