Am 10.02.2013 06:57, schrieb Sage Weil: > On Thu, 7 Feb 2013, Danny Al-Gaaf wrote: >> Fix "variable length array of non-POD element type" errors caused by >> using librados::ObjectWriteOperation VLAs. (-Wvla) >> >> Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@xxxxxxxxx> >> --- >> src/key_value_store/kv_flat_btree_async.cc | 14 +++++++------- >> 1 file changed, 7 insertions(+), 7 deletions(-) >> >> diff --git a/src/key_value_store/kv_flat_btree_async.cc b/src/key_value_store/kv_flat_btree_async.cc >> index 96c6cb0..4342e70 100644 >> --- a/src/key_value_store/kv_flat_btree_async.cc >> +++ b/src/key_value_store/kv_flat_btree_async.cc >> @@ -1119,9 +1119,9 @@ int KvFlatBtreeAsync::cleanup(const index_data &idata, const int &errno) { >> //all changes were created except for updating the index and possibly >> //deleting the objects. roll forward. >> vector<pair<pair<int, string>, librados::ObjectWriteOperation*> > ops; >> - librados::ObjectWriteOperation owos[idata.to_delete.size() + 1]; >> + vector<librados::ObjectWriteOperation*> owos(idata.to_delete.size() + 1); > > I haven't read much of the surrounding code, but from what is included > here I don't think this is equivalent... these are just null pointers > initially, and so > >> for (int i = 0; i <= (int)idata.to_delete.size(); ++i) { >> - ops.push_back(make_pair(pair<int, string>(0, ""), &owos[i])); >> + ops.push_back(make_pair(pair<int, string>(0, ""), owos[i])); > > this doesn't do anything useful... owos[i] may as well be NULL. Why not > make it > > vector<librados::ObjectWriteOperation> owos(...) > > ? Because this would lead to a linker error: kv_flat_btree_async.o: In function `void std::__uninitialized_fill_n<false>::__uninit_fill_n<librados::ObjectWriteOperation*, unsigned long, librados::ObjectWriteOperation>(librados::ObjectWriteOperation*, unsigned long, librados::ObjectWriteOperation const&)': /usr/bin/../lib64/gcc/x86_64-suse-linux/4.7/../../../../include/c++/4.7/bits/stl_uninitialized.h:188: undefined reference to `librados::ObjectOperation::ObjectOperation(librados::ObjectOperation const&)' /usr/bin/../lib64/gcc/x86_64-suse-linux/4.7/../../../../include/c++/4.7/bits/stl_uninitialized.h:188: undefined reference to `librados::ObjectOperation::ObjectOperation(librados::ObjectOperation const&)' Because in src/include/rados/librados.hpp librados::ObjectOperation::ObjectOperation(librados::ObjectOperation const&) was is defined, but not implemented in the librados.cc. Not sure if removing ObjectOperation(librados::ObjectOperation const&) is the way to go here. Danny -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html