jyknight added inline comments.

================
Comment at: clang/lib/CodeGen/CGExpr.cpp:892
+      return false;
     if (CAT->getSize().ugt(1))
       return false;
----------------
Similar to SemaChecking below, could use a comment like:

FIXME: While the default -fstrict-flex-arrays=0 permits Size>1 trailing arrays 
to be treated as flexible-array-members, we still emit ubsan checks as if they 
are not. Pending further discussion...



================
Comment at: clang/lib/CodeGen/CGExpr.cpp:906
       // 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
----------------
I believe this bit is incorrect -- it should just go back to 'return true;'. 
The StrictFlexArraysLevel check above already eliminates the cases we want to 
eliminate (size==1 in strictness-level 2.)


================
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
----------------
serge-sans-paille wrote:
> 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
The FIXME comment isn't correct, since only nonzero sizes ever reach this 
function. The code can be simplified too. Also -- there is another FIXME that 
should be here, regarding the behavior of size>1 FAMs.

I suggest (with rewrapped comment of course):
```
if (!ND) 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 >= 2 || Size != 1) return false;`
```



================
Comment at: clang/lib/Sema/SemaChecking.cpp:15969
     // access which precedes the array bounds.
     if (BaseType->isIncompleteType())
       return;
----------------
serge-sans-paille wrote:
> And here
Looks like actually the `int x[]` case is handled with the large 
"IsUnboundedArray" condition above not here...

And, actually, all of that code to generate warnings for larger-than-addrspace 
offsets OUGHT to be getting used for `int x[0]` and `int x[1]` flexible arrays, 
too. Needs another FIXME for that...


================
Comment at: clang/lib/StaticAnalyzer/Core/MemRegion.cpp:792
 
+      if (getContext().getLangOpts().StrictFlexArrays >= 2)
+        return false;
----------------
Yuk, another place that is weird and doesn't handle StrictFlexArrays as 
expected...


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