From 1edc58b6ac3ef85928f4a073626036e9a75532ab Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 5 Oct 2010 09:43:58 +0200 Subject: Don't use non-portable zero-sized array member --- libxsde/xsde/cxx/stack.hxx | 2 +- libxsde/xsde/cxx/stack.ixx | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libxsde/xsde/cxx/stack.hxx b/libxsde/xsde/cxx/stack.hxx index a8f26f2..5a947df 100644 --- a/libxsde/xsde/cxx/stack.hxx +++ b/libxsde/xsde/cxx/stack.hxx @@ -82,7 +82,7 @@ namespace xsde { block* prev; block* next; - char data[0]; // Sufficiently padded (2 * sizeof(void*)). + //char data[0]; Sufficiently padded (2 * sizeof(void*)). }; size_t el_size_; // Element size in bytes. diff --git a/libxsde/xsde/cxx/stack.ixx b/libxsde/xsde/cxx/stack.ixx index 1f947df..d0544db 100644 --- a/libxsde/xsde/cxx/stack.ixx +++ b/libxsde/xsde/cxx/stack.ixx @@ -70,9 +70,13 @@ namespace xsde inline void* stack:: top () { - return cap_ == 1 - ? static_cast (cur_) - : static_cast (cur_->data + (num_ - 1) * el_size_); + if (cap_ == 1) + return cur_; + else + { + char* data = reinterpret_cast (cur_) + sizeof (block); + return data + (num_ - 1) * el_size_; + } } inline void stack:: -- cgit v1.1