https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86878

            Bug ID: 86878
           Summary: G++ should warn about invalid alignments passed to
                    allocation functions
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: enhancement
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

#include <new>

__attribute__ ((__alloc_align__(2)))
void* alloc(std::size_t, std::size_t);

int main()
{
  (void) alloc(10, 5);
  (void) ::operator new(10, std::align_val_t{5});
}

This compiles without diagnostics, but should produce two warnings because 5 is
not a power of two and so is not a valid alignment.

The attribute means that the call to alloc(10, 5) returns memory aligned to 5,
which seems unlikely. I think the attribute should imply that the argument is a
valid alignment.

It's undefined to call that operator new with a value that is not a valid
alignment, so a warning is definitely warranted there.

Reply via email to