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

            Bug ID: 77742
           Summary: Warning about placement new for over-aligned type
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
                CC: jason at gcc dot gnu.org
  Target Milestone: ---

#include <new>

struct X
{
  alignas(2*__STDCPP_DEFAULT_NEW_ALIGNMENT__) int i;
};

int main()
{
  alignas(alignof(X)) char buf[sizeof(X)];
  ::new((void*)buf) X{1};
}


al.cc: In function ‘int main()’:
al.cc:11:24: warning: ‘new’ of type ‘X’ with extended alignment 32
[-Waligned-new=]
   ::new((void*)buf) X{1};
                        ^
al.cc:11:24: note: uses ‘void* operator new(std::size_t, void*)’, which does
not have an alignment parameter
al.cc:11:24: note: use ‘-faligned-new’ to enable C++17 over-aligned new support
tmp$ g++17 al.cc -faligned-new
al.cc: In function ‘int main()’:
al.cc:11:24: warning: ‘new’ of type ‘X’ with extended alignment 32
[-Waligned-new=]
   ::new((void*)buf) X{1};
                        ^
al.cc:11:24: note: uses ‘void* operator new(std::size_t, void*)’, which does
not have an alignment parameter
al.cc:11:24: note: use ‘-faligned-new’ to enable C++17 over-aligned new support


Should this warning only be given for the non-placement forms of operator new?
That means trusting the programmer to have obtained suitably-aligned memory,
but that's always the case even for types with a fundamental alignment.

The code won't even compile without either -faligned-new or C++17, so the final
note is not helpful.

Also, if the new-expression occurs in a system header then you still get all
the notes but not the warning (unless you use -Wsystem-headers).

Reply via email to