8

On linux, using gcc 4.8.4, compiled with -std=c++11 -mcx16:

#include <atomic>

struct node_t;

struct pointer_t {
        node_t* ptr;
        unsigned int count;
        pointer_t() noexcept : ptr{nullptr}, count{0} {}
};

struct empty {};

struct node_t {
        empty value;
        std::atomic<pointer_t> next;
        node_t() : next{pointer_t{}} {}
};

int main() {
        node_t{}.next.load();
        return 0;
}

gives a segfault when load is called. How am I meant to initialize an atomic value?

Shea Levy
  • 5,077
  • 2
  • 28
  • 41

1 Answers1

9

Turns out this is a bug in gcc that has since been fixed in GCC 5.1. Specifying the alignment to be two words fixed it.

Drew Dormann
  • 54,920
  • 13
  • 119
  • 171
Shea Levy
  • 5,077
  • 2
  • 28
  • 41