blitzpp / blitz

Blitz++ Multi-Dimensional Array Library for C++
https://github.com/blitzpp/blitz/wiki
Other
406 stars 84 forks source link

Compilation issues with GCC 7 #17

Closed MatthewHambley closed 6 years ago

MatthewHambley commented 7 years ago

We have witnessed this issue while trying to compile XIOS, a library which makes use of blitz++, using GCC 7.1.0. The failure has also been seen by a Debian autobuilder, see this link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853333

It looks like this new version of GCC is stricter about some shady usage pattern which it was hitherto letting through without comment.

mettbest commented 7 years ago

I confirm there are issues with GCC 7.1.1:

../blitz/array/ops.h:127:1: note: in expansion of macro 'BZ_DECLARE_ARRAY_ET_SCALAR_OPS BZ_DECLARE_ARRAY_ET_SCALAR_OPS(complex) ^~~~~~~~~~ In file included from ../blitz/globeval.cc:34:0, from ../blitz/array/ops.cc:38, from ../blitz/array.cc:13, from ../blitz/array-impl.h:2559, from ../blitz/array.h:37, from ../src/globals.cpp:12: ../blitz/tvevaluate.h: In instantiation of 'static void blitz::_tv_evaluator<unroll, N_length>::evaluate_unaligned(T_numtype, const T_expr&, T_update) [with T_numtype = int; T_expr = blitz::_bz_ArrayExpr<blitz::FastTV2Iterator<int, 2> >; T_update = blitz::_bz_update<int, int>; bool unroll = false; int N_length = 2]': ../blitz/globeval.cc:303:7: required from 'static void blitz::chunked_updater<T_numtype, T_expr, T_update, N>::unaligned_update(T_numtype, T_expr, blitz::diffType) [with T_numtype = int; T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>; int N = 2; blitz::diffType = long int]' ../blitz/globeval.cc:342:41: recursively required from 'static void blitz::_bz_meta_binaryAssign::assign(T_data, T_expr, blitz::diffType, blitz::diffType, T_update) [with T_data = int; T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>; int I = 6; blitz::diffType = long int]' ../blitz/globeval.cc:342:41: required from 'static void blitz::_bz_meta_binaryAssign::assign(T_data, T_expr, blitz::diffType, blitz::diffType, T_update) [with T_data = int; T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>; int I = 7; blitz::diffType = long int]' ../blitz/globeval.cc:404:13: required from 'void blitz::_bz_evaluateWithUnitStride(T_dest&, typename T_dest::T_iterator&, T_expr, blitz::diffType, T_update) [with T_dest = blitz::TinyVector<int, 1>; T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>; typename T_dest::T_iterator = blitz::FastTV2Iterator<int, 1>; blitz::diffType = long int]' ../blitz/globeval.cc:591:31: required from 'static void blitz::_bz_evaluator<1>::evaluateWithStackTraversal(T_dest&, T_expr, T_update) [with T_dest = blitz::TinyVector<int, 1>; T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>]' ../blitz/globeval.cc:279:58: required from 'void blitz::_bz_evaluate(T_dest&, T_expr, T_update) [with T_dest = blitz::TinyVector<int, 1>; T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>]' ../blitz/tvevaluate.h:135:17: required from 'static void blitz::_tv_evaluator<true, N_length>::select_evaluation(blitz::TinyVector<T, N_length>&, const T_expr&, T_update) [with T = int; T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>; int N_length = 1]' ../blitz/tvevaluate.h:179:57: required from 'void blitz::TinyVector<T, N>::_tv_evaluate(const T_expr&, T_update) [with T_expr = blitz::_bz_ArrayExpr<blitz::IndexPlaceholder<0> >; T_update = blitz::_bz_update<int, int>; P_numtype = int; int N_length = 1]' ../blitz/tinyvec2.cc:86:15: required from 'blitz::TinyVector<T, N>& blitz::TinyVector<T, N>::operator=(const blitz::ETBase&) [with T_expr = blitz::IndexPlaceholder<0>; P_numtype = int; int N_length = 1]' ../blitz/array/storage.h:412:17: required from 'blitz::ColumnMajorArray::ColumnMajorArray(blitz::paddingPolicy) [with int N_rank = 1]' ../blitz/array/storage.h:430:34: required from here ../blitz/tvevaluate.h:120:36: error: 'const class blitz::_bz_ArrayExpr<blitz::FastTV2Iterator<int, 2> >' has no member named 'fastRead'; did you mean 'fastRead_tv'? T_update::update(data[i], expr.fastRead(i));


                               fastRead_tv
Makefile:430: recipe for target 'globals.lo' failed
make[1]: *** [globals.lo] Error 1
make[1]: Leaving directory '/data/pede_ma/workspace_eclipse/UPAS2_trunk/UPAS-L2/build/blitz-0.10/lib'
Makefile:451: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1
wperkins commented 7 years ago

With my #16 changes, I can build and run check-testsuite and check-examples without problems on Mac OS (Sierra) using GNU 7.2.0. That's the only platform I have access to a GNU 7 compiler.

citibeth commented 7 years ago

Please tell me when I should merge these PRs.

On Thu, Sep 28, 2017 at 11:00 AM, Bill notifications@github.com wrote:

With my #16 https://github.com/blitzpp/blitz/pull/16 changes, I can build and run check-testsuite and check-examples without problems on Mac OS (Sierra) using GNU 7.2.0. That's the only platform I have access to a GNU 7 compiler.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/blitzpp/blitz/issues/17#issuecomment-332864467, or mute the thread https://github.com/notifications/unsubscribe-auth/AB1cd0i0hvcneE-yL_PCRYB4k5pEC4xsks5sm7SYgaJpZM4PBFhU .

183amir commented 7 years ago

I can confirm that #16 works on CentOS 6 and gcc 7.1

wperkins commented 7 years ago

16 is what I use now, so I think it ready to merge.

MatthewHambley commented 6 years ago

I've just had a chance to try building Blitz 1.0.1 with GCC 7.3.0 and can confirm that the problem appears to be fixed.

slayoo commented 6 years ago

Thanks! Closing the issue then