serge-sans-paille added inline comments.

================
Comment at: clang/docs/ClangCommandLineReference.rst:2644
+
+Control which arrays are considered as flexible arrays members. <arg>
+can be 1 (array of size 0, 1 and undefined are considered), 2 (array of size 0
----------------
jyknight wrote:
> Docs should also mention what the default -fno-strict-flex-arrays means -- 
> that ALL sizes of trailing arrays are considered flexible array members. (I'm 
> amazed that's the rule, and I never knew it. I always thought the special 
> casing for FAMs was restricted to sizes 0 and 1!)
> 
> Also, since apparently different parts of the compiler have been (and will 
> now continue to) use different default behaviors, may want to document that 
> as well. I'm sure I don't know what the rules actually are intended to be 
> here. E.g. that a macro-expansion of the size arg disables the 
> special-behavior for [1] is extremely surprising!
it is worse than that: for some checks, any size is valid for FAM, but not for 
alls. For some checks, macro expansion prohibits FAM, but not for all, etc, 
etc. I don't want to document that behavior, because it is too specific to each 
pass. My plan is

1. land -fstrict-flex-array support
2. launch a thread on the ugly situation we put ourselves in, and extract a 
decision for each case
3. support and document an homogeneous behavior across passes.
4. syndicate code across passes


================
Comment at: clang/lib/Sema/SemaChecking.cpp:15804
+
+  // FIXME: we should also allow Size = 0 here per the definition of
+  // StrictFlexArraysLevel, but that's backward incompatible with previous 
clang
----------------
jyknight wrote:
> Presumably the size-zero/unsized cases are already being taken care of 
> elsewhere in the code? I find it hard to believe we are currently emitting 
> diagnostics for size-0 FAM which we don't emit for size-1 FAM?
correct


================
Comment at: clang/lib/Sema/SemaChecking.cpp:15969
     // access which precedes the array bounds.
     if (BaseType->isIncompleteType())
       return;
----------------
And here


================
Comment at: clang/lib/Sema/SemaChecking.cpp:15973
     llvm::APInt size = ArrayTy->getSize();
     if (!size.isStrictlyPositive())
       return;
----------------
Handled here


================
Comment at: clang/test/SemaCXX/array-bounds-strict-flex-arrays.cpp:9
+  } s2;
+  s2.a[2] = 0; // no-warning
+}
----------------
jyknight wrote:
> Except we actually _do_ know the bounds of the full-object and ought to be 
> able to warn on this code anyhow...
> 
> Better to have the test function accept a pointer, so that's not a conflating 
> issue?
Correct


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126864/new/

https://reviews.llvm.org/D126864

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to