http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50982

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org

--- Comment #33 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-11-05 
15:39:09 UTC ---
Jason, is the compiler right to reject the NSDMI below, and can you suggest any
workaround except using fixincludes to add the missing braces around the
PTHREAD_ONCE_INIT macro for AIX?


The problematic code can be reduced to:

  typedef struct
  {
        int __on_word[28];
  }
  pthread_once_t;

  #define PTHREAD_ONCE_INIT { 0, 0, 0, 0, 0, 0, 0, 2, 0 }

  pthread_once_t once = PTHREAD_ONCE_INIT;

  struct once_flag
  {
  private:
    pthread_once_t _M_once = PTHREAD_ONCE_INIT;

  public:

    constexpr once_flag() noexcept = default;
  };

  once_flag o;

The declaration of "once" at namespace scope only gives warning:

at.cc:9:25: warning: missing braces around initializer for ‘int [28]’
[-Wmissing-braces]

but the same construct used as a NSDMI in once_flag gives an error:

at.cc:14:30: error: array must be initialized with a brace-enclosed initializer
at.cc:14:30: error: too many initializers for ‘pthread_once_t’

Reply via email to