lebedev.ri added a comment.

In https://reviews.llvm.org/D33826#868085, @aaron.ballman wrote:

> In https://reviews.llvm.org/D33826#866170, @lebedev.ri wrote:
>
> > In https://reviews.llvm.org/D33826#866161, @JonasToth wrote:
> >
> > > There is an exception to the general rule (EXP36-C-EX2), stating that the 
> > > result of `malloc` and friends is allowed to be casted to stricter 
> > > alignments, since the pointer is known to be of correct alignment.
> >
> >
> > Quote for the reference:
> >
> > > EXP36-C-EX2: If a pointer is known to be correctly aligned to the target 
> > > type, then a cast to that type is permitted. There are several cases 
> > > where a pointer is known to be correctly aligned to the target type. The 
> > > pointer could point to an object declared with a suitable alignment 
> > > specifier. It could point to an object returned by aligned_alloc(), 
> > > calloc(), malloc(), or realloc(), as per the C standard, section 7.22.3, 
> > > paragraph 1  [ISO/IEC 9899:2011].
> >
> > For plain `calloc(), malloc(), or realloc()`, i would guess it's related to 
> > `max_align_t` / `std::max_align_t` / `__STDCPP_DEFAULT_NEW_ALIGNMENT__`, 
> > which is generally just `16` bytes.
>
>
> It's a requirement from the C standard that malloc, calloc, and realloc 
> return a suitably-aligned pointer for *any* type.


We are probably arguing about the details, or i'm just misguided, but you mean 
any *standard* type, right?

  MALLOC(3)
  ...
  The  malloc()  and calloc() functions return a pointer to the allocated 
memory, which is suitably aligned for any built-in type.

E.g. `__m256` needs to be 32-byte aligned, and  user type, with the help of 
`alignas()`, can have different alignment requirements

>>> Could you add a testcase for this case, i think there would currenlty be a 
>>> false positive.
>>> 
>>> And is there a general way of knowing when the pointer is of correct 
>>> alignment, or is it necessary to keep a list of functions like `malloc` 
>>> that are just known? 
>>>  If yes, i think it would be nice if this list is configurable (maybe like 
>>> in cppcoreguidelines-no-malloc, where that functionality could be 
>>> refactored out).
> 
> Agreed, this should be a configurable list, but is should be pre-populated 
> with the listed functions from the CERT standard.




Repository:
  rL LLVM

https://reviews.llvm.org/D33826



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

Reply via email to