template errors

490 views
Skip to first unread message

Bob Carpenter

unread,
Nov 22, 2012, 7:08:12 PM11/22/12
to stan...@googlegroups.com
The state of the current version on Google code is messed
up. I need to back it up to where we were passing all tests
at least on my machine and try again. Please bear with me,
as I'm still all thumbs with Git.

- Bob

Bob Carpenter

unread,
Nov 22, 2012, 7:19:15 PM11/22/12
to stan...@googlegroups.com
That wasn't so bad. I'd just specified a bad
return type on col(). It's fixed now.

I believe the build-bot's still broken because
of issues with c++11 and the tests. Everything
works on my machine locally using clang++.

- Bob

Daniel Lee

unread,
Nov 22, 2012, 7:30:40 PM11/22/12
to stan...@googlegroups.com
The failure is due to something loosely related. I'll get it fixed as soon as I can.

Happy thanksgiving!
> --
>
>

Ben Goodrich

unread,
Nov 23, 2012, 12:23:40 AM11/23/12
to stan...@googlegroups.com
On Thursday, November 22, 2012 7:19:17 PM UTC-5, Bob Carpenter wrote:
I believe the build-bot's still broken because
of issues with c++11 and the tests.  Everything
works on my machine locally using clang++.

I assume that is without setting --std=c++0x ? Without that, test-unit is fine for me with clang++3.1. With that set, test-unit passes for g++ 4.6.x, 4.5.x, and 4.4.x, but with clang++-3.1 I get the boost compilation errors at

https://groups.google.com/d/msg/stan-dev/2KiJKTH8rMk/WOfuzJSpfQQJ

In addition, if you specify -stdlib=libc++ and -DGTEST_USE_OWN_TR1_TUPLE, you get the compilation errors due to complex input / output at

https://groups.google.com/d/msg/stan-dev/2KiJKTH8rMk/64k2g_2lcVAJ

With g++-4.7 and --std=c++0x, I get the parser failures at

https://groups.google.com/d/msg/stan-dev/2peHG5IGPsk/mbyZi6v1cWcJ

With g++-4.8 snapshot, I get the chains ICE at

https://groups.google.com/d/msg/stan-dev/DY0yoyeasNM/lQG_L3lHBOsJ

With clang-3.2 snapshot, the behavior is the same as for clang++-3.1, i.e. success depends on the absence of --std=c++0x.

Ben

Ben Goodrich

unread,
Nov 27, 2012, 4:34:16 PM11/27/12
to stan...@googlegroups.com
On Friday, November 23, 2012 12:23:40 AM UTC-5, Ben Goodrich wrote:
On Thursday, November 22, 2012 7:19:17 PM UTC-5, Bob Carpenter wrote:
I believe the build-bot's still broken because
of issues with c++11 and the tests.  Everything
works on my machine locally using clang++.

I assume that is without setting --std=c++0x ? Without that, test-unit is fine for me with clang++3.1. With that set, test-unit passes for g++ 4.6.x, 4.5.x, and 4.4.x, but with clang++-3.1 I get the boost compilation errors at

https://groups.google.com/d/msg/stan-dev/2KiJKTH8rMk/WOfuzJSpfQQJ

These errors are triggered under Boost 1.52.0. If I use my system Boost, which is 1.49.0, then test-unit passes with clang-3.1 even if --std=c++0x is set.

Ben

 

Bob Carpenter

unread,
Nov 28, 2012, 12:54:31 AM11/28/12
to stan...@googlegroups.com


On 11/27/12 4:34 PM, Ben Goodrich wrote:
> On Friday, November 23, 2012 12:23:40 AM UTC-5, Ben Goodrich wrote:
>
> On Thursday, November 22, 2012 7:19:17 PM UTC-5, Bob Carpenter wrote:
>
> I believe the build-bot's still broken because
> of issues with c++11 and the tests. Everything
> works on my machine locally using clang++.
>
>
> I assume that is without setting --std=c++0x ? Without that, test-unit is fine for me with clang++3.1. With that
> set, test-unit passes for g++ 4.6.x, 4.5.x, and 4.4.x, but with clang++-3.1 I get the boost compilation errors at
>
> https://groups.google.com/d/msg/stan-dev/2KiJKTH8rMk/WOfuzJSpfQQJ
> <https://groups.google.com/d/msg/stan-dev/2KiJKTH8rMk/WOfuzJSpfQQJ>
>
>
> These errors are triggered under Boost 1.52.0. If I use my system Boost, which is 1.49.0, then test-unit passes with
> clang-3.1 even if --std=c++0x is set.

Thanks for the tip and pointer to the bug in the previous
message -- I'd somehow missed that in the messages we're
getting now, which may be due to something else.

I will dig into fixing this when I'm back in
town (Monday).

Not that I'm looking forward to diving into Boost templates
for their variant type system, which is used heavily in the
parser.

- Bob

Ben Goodrich

unread,
Nov 28, 2012, 10:31:28 AM11/28/12
to stan...@googlegroups.com
On Wednesday, November 28, 2012 12:54:31 AM UTC-5, Bob Carpenter wrote:
Thanks for the tip and pointer to the bug in the previous
message -- I'd somehow missed that in the messages we're
getting now, which may be due to something else.

If you missed the original, it is here

https://groups.google.com/d/msg/stan-dev/43aXzAbOgbg/5i5eW_JQQmoJ

and also has links to the problems under g++ >= 4.7.

Ben

Ben Goodrich

unread,
Nov 28, 2012, 11:55:20 AM11/28/12
to stan...@googlegroups.com
On Friday, November 23, 2012 12:23:40 AM UTC-5, Ben Goodrich wrote:
On Thursday, November 22, 2012 7:19:17 PM UTC-5, Bob Carpenter wrote:
I believe the build-bot's still broken because
of issues with c++11 and the tests.  Everything
works on my machine locally using clang++.
In addition, if you specify -stdlib=libc++ and -DGTEST_USE_OWN_TR1_TUPLE, you get the compilation errors due to complex input / output at

https://groups.google.com/d/msg/stan-dev/2KiJKTH8rMk/64k2g_2lcVAJ

Now that the complex eigenvalues stuff is gone, I can get a lot farther with --std=c++0x, -stdlib=libc++ and -DGTEST_USE_OWN_TR1_TUPLE. It runs for a while and then fails to link against stanc

goodrich@CYBERPOWERPC:/opt/stan$ make O=0 CC=clang++ test-unit
clang
++ -I src -I lib/eigen_3.1.2 -I lib/boost_1.52.0 -O0 -Wall -Wno-unused-function -Wno-tautological-compare -DGTEST_USE_OWN_TR1_TUPLE -stdlib=libc++   -c -Wno-c++11-extensions -std=c++0x -I lib/gtest_1.6.0/include -I lib/gtest_1.6.0 src/test/io/csv_writer_test.cpp -o test/io/csv_writer.o
clang
++ -I src -I lib/eigen_3.1.2 -I lib/boost_1.52.0 -O0 -Wall -Wno-unused-function -Wno-tautological-compare -DGTEST_USE_OWN_TR1_TUPLE -stdlib=libc++  -lpthread  lib/gtest_1.6.0/src/gtest_main.cc test/io/csv_writer.o -Wno-c++11-extensions -std=c++0x -I lib/gtest_1.6.0/include -I lib/gtest_1.6.0 -o test/io/csv_writer test/libgtest.a -Lbin -lstan -Lbin -lstanc
/usr/bin/ld: cannot find -lstanc
clang
: error: linker command failed with exit code 1 (use -v to see invocation)
make
: *** [test/io/csv_writer] Error 1

It is true that I only have libstan.a in bin/

goodrich@CYBERPOWERPC:/opt/stan$ ls bin/
libstan
.a  stan

But I can explicitly do a make bin/stanc to create it. So, I guess it is a problem where make test-unit failed to create all its dependencies?

Continuing test-unit from there, I run into Boost errors with 1.52.0 that can be resolved by using Boost 1.49.0. So, basically it is possible to pass test-unit using either GCC's standard c++ library or Eigen's.

Ben

Bob Carpenter

unread,
Nov 28, 2012, 3:55:57 PM11/28/12
to stan...@googlegroups.com
I'm having that problem with our builds, too,
and I'm sure that's the problem.

> Continuing test-unit from there, I run into Boost errors with 1.52.0 that can be resolved by using Boost 1.49.0. So,
> basically it is possible to pass test-unit using either GCC's standard c++ library or Eigen's.

I still want to track down what's going on. I'm never
sure if the problems are on our side, the compiler's side,
or on Boost's side (there's a lot of traffic on the parser
mailing list -- like a mini version of the Rcpp traffic).

- Bob

Ben Goodrich

unread,
Dec 1, 2012, 4:42:51 PM12/1/12
to stan...@googlegroups.com
 
I now suspect that the error is attributable to

http://www.boost.org/users/news/a_special_note_for_boost_1_52_0_and_higher.html

because result_of.hpp is the last thing mentioned before the error here:

In file included from src/stan/gm/grammars/statement_grammar_inst.cpp:1:
In file included from src/stan/gm/grammars/statement_grammar_def.hpp:16:
In file included from lib/boost_1.52.0/boost/spirit/include/qi.hpp:16:
In file included from lib/boost_1.52.0/boost/spirit/home/qi.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/qi/action.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/qi/action/action.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/qi/meta_compiler.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/support/meta_compiler.hpp:19:
In file included from lib/boost_1.52.0/boost/proto/proto.hpp:12:
In file included from lib/boost_1.52.0/boost/proto/core.hpp:13:
In file included from lib/boost_1.52.0/boost/proto/proto_fwd.hpp:28:
In file included from lib/boost_1.52.0/boost/utility/result_of.hpp:23:
lib
/boost_1.52.0/boost/mpl/eval_if.hpp:38:26: error: no type named 'type' in 'boost::result_of<boost::phoenix::actor<boost::spirit::attribute<1> > (boost::spirit::unused_type,
      boost::spirit::context<boost::fusion::cons<stan::gm::statement &, boost::fusion::cons<bool, boost::fusion::cons<int, boost::fusion::nil> > >, boost::fusion::vector0<void> >)>'

   
typedef typename f_::type type;
           
~~~~~~~~~~~~~^~~~

Ben

Ben Goodrich

unread,
Dec 2, 2012, 4:34:04 PM12/2/12
to stan...@googlegroups.com
On Wednesday, November 28, 2012 11:55:20 AM UTC-5, Ben Goodrich wrote:
Continuing test-unit from there, I run into Boost errors with 1.52.0 that can be resolved by using Boost 1.49.0. So, basically it is possible to pass test-unit using either GCC's standard c++ library or Eigen's.

But only with O=0. With

goodrich@CYBERPOWERPC:/opt/stan$ make clean-all && time make O=1 CC=clang++ BOOST=/usr/include/ -j8 -k test-unit > /tmp/clang.log && echo "success"

it runs into parser errors like

EXPECTATION FAILURE LOCATION: file=src/test/gm/model_specs/function_signatures6.stan; line=1, column=1

data
{
 
^-- here


These are similar but not identical to the parser errors under g++-4.7,

Ben

Bob Carpenter

unread,
Dec 2, 2012, 5:08:11 PM12/2/12
to stan...@googlegroups.com
Nice! That we can fix by writing a drop-in replacement
metaprogram. I'll get the fix in ASAP.

- Bob
> --
>
>

Ben Goodrich

unread,
Dec 3, 2012, 3:41:56 AM12/3/12
to stan...@googlegroups.com
On Friday, November 23, 2012 12:23:40 AM UTC-5, Ben Goodrich wrote:
On Thursday, November 22, 2012 7:19:17 PM UTC-5, Bob Carpenter wrote:
I believe the build-bot's still broken because
of issues with c++11 and the tests.  Everything
works on my machine locally using clang++.

I assume that is without setting --std=c++0x ? Without that, test-unit is fine for me with clang++3.1. With that set, test-unit passes for g++ 4.6.x

And I can cross-compile and run test-unit for 32bit Windows as long as O >= 2. With O=1, I get a test failure

test/math/matrix.exe --gtest_output="xml:test/math/matrix.xml";
Running main() from gtest_main.cc
[==========] Running 33 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 33 tests from MathErrorHandling
[ RUN      ] MathErrorHandling.CheckNotNanDefaultPolicy
[       OK ] MathErrorHandling.CheckNotNanDefaultPolicy (0 ms)
[ RUN      ] MathErrorHandling.CheckNotNanErrnoPolicy
src
/test/math/error_handling_test.cpp:33: Failure
Value of: std::isnan (result)
 
Actual: true
Expected: false
check_not_nan should
not have returned nan: inf
src
/test/math/error_handling_test.cpp:37: Failure
Value of: std::isnan (result)
 
Actual: true
Expected: false
check_not_nan should have returned nan
: -inf
[  FAILED  ] MathErrorHandling.CheckNotNanErrnoPolicy (1 ms)

and with O=0, I get the usual "Fatal error: can't close test/gm/parser.o: File too big".

So, I don't know why Jenkins is dying with O=3; I think the code is actually okay with --std=c++0x.

Ben

Ben Goodrich

unread,
Dec 4, 2012, 6:16:09 PM12/4/12
to stan...@googlegroups.com
On Wednesday, November 28, 2012 11:55:20 AM UTC-5, Ben Goodrich wrote:
Continuing test-unit from there, I run into Boost errors with 1.52.0 that can be resolved by using Boost 1.49.0. So, basically it is possible to pass test-unit using either GCC's standard c++ library or Eigen's.

Not any more. It looks like function_signatures7.stan is messed up.

test/gm/compile_models --gtest_output="xml:test/gm/compile_models.xml";
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.

[----------] Global test environment set-up.
[----------] 1 test from gm
[ RUN      ] gm.compile_models
[       OK ] gm.compile_models (0 ms)
[----------] 1 test from gm (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.
unknown file
: Failure
C
++ exception with description "EXPECTATION FAILURE LOCATION: file=src/test/gm/model_specs/function_signatures7.stan; line=1, column=1


 ^-- here

"
thrown in the test body.
[  FAILED  ] gm_parser.function_signatures (17924 ms)
[----------] 36 tests from gm_parser (19069 ms total)

[----------] Global test environment tear-down
[==========] 36 tests from 1 test case ran. (19079 ms total)
[  PASSED  ] 35 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] gm_parser.function_signatures

 
1 FAILED TEST
make
: *** [runtest/test/gm/parser] Error 1


Ben

Ben Goodrich

unread,
Dec 4, 2012, 6:18:42 PM12/4/12
to stan...@googlegroups.com
On Tuesday, December 4, 2012 6:16:09 PM UTC-5, Ben Goodrich wrote:
On Wednesday, November 28, 2012 11:55:20 AM UTC-5, Ben Goodrich wrote:
Continuing test-unit from there, I run into Boost errors with 1.52.0 that can be resolved by using Boost 1.49.0. So, basically it is possible to pass test-unit using either GCC's standard c++ library or Eigen's.

Not any more. It looks like function_signatures7.stan is messed up.

Actually, there is no function_signatures7.stan in src/test/gm/model_specs/function_signatures*.stan

Ben



Bob Carpenter

unread,
Dec 5, 2012, 1:26:57 PM12/5/12
to stan...@googlegroups.com
> Actually, there is no |function_signatures7.stan| in src/test/gm/model_specs/function_signatures*.stan

There is now. I'd committed but not pushed.

- Bob

Ben Goodrich

unread,
Dec 5, 2012, 4:06:55 PM12/5/12
to stan...@googlegroups.com
On Wednesday, December 5, 2012 1:26:57 PM UTC-5, Bob Carpenter wrote:
> Actually, there is no |function_signatures7.stan| in src/test/gm/model_specs/function_signatures*.stan

There is now.  I'd committed but not pushed.

Still haven't pushed it?

Bob Carpenter

unread,
Dec 6, 2012, 3:50:14 PM12/6/12
to stan...@googlegroups.com
Apparently not.

This time I made really really sure :-)

- Bob
> --
>
>

Bob Carpenter

unread,
Dec 6, 2012, 4:48:45 PM12/6/12
to stan...@googlegroups.com
In:

http://www.boost.org/doc/libs/1_52_0/boost/utility/result_of.hpp

there's a code comment (and supporting #defines);

// Use the decltype-based version of result_of by default if the compiler
// supports N3276 <http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf>.
// The user can force the choice by defining either BOOST_RESULT_OF_USE_DECLTYPE or
// BOOST_RESULT_OF_USE_TR1, but not both!

I changed the CFLAGS in the top-level stan/makefile:

CFLAGS = -I src -I $(EIGEN) -I $(BOOST) -O$O -Wall -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE

Will this work on Windows or do we need to do something different?

- Bob

On 12/1/12 4:42 PM, Ben Goodrich wrote:
...
> I now suspect that the error is attributable to
>
> http://www.boost.org/users/news/a_special_note_for_boost_1_52_0_and_higher.html
>
> because result_of.hpp is the last thing mentioned before the error here:
>
> |
> In file included from src/stan/gm/grammars/statement_grammar_inst.cpp:1:
...

Ben Goodrich

unread,
Dec 6, 2012, 7:07:17 PM12/6/12
to stan...@googlegroups.com
On Thursday, December 6, 2012 4:48:45 PM UTC-5, Bob Carpenter wrote:
In:

     http://www.boost.org/doc/libs/1_52_0/boost/utility/result_of.hpp

there's a code comment (and supporting #defines);

     // Use the decltype-based version of result_of by default if the compiler
     // supports N3276 <http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf>.
     // The user can force the choice by defining either BOOST_RESULT_OF_USE_DECLTYPE or
     // BOOST_RESULT_OF_USE_TR1, but not both!

I changed the CFLAGS in the top-level stan/makefile:

     CFLAGS = -I src -I $(EIGEN) -I $(BOOST) -O$O -Wall -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE

Will this work on Windows or do we need to do something different?

Still broken with clang++-3.1 and O=3 (log attached), but now the failures are similar to those of g++-4.7.

Ben

clang.txt

Ben Goodrich

unread,
Dec 6, 2012, 8:01:12 PM12/6/12
to stan...@googlegroups.com

Works at O=0. Here is a suspicious warning:

ar: creating bin/libstan.a
In file included from src/stan/gm/grammars/expression_grammar_inst.cpp:1:
In file included from src/stan/gm/grammars/expression_grammar_def.hpp:16:

In file included from lib/boost_1.52.0/boost/spirit/include/qi.hpp:16:
In file included from lib/boost_1.52.0/boost/spirit/home/qi.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/qi/action.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/qi/action/action.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/qi/meta_compiler.hpp:14:
In file included from lib/boost_1.52.0/boost/spirit/home/support/meta_compiler.hpp:19:
In file included from lib/boost_1.52.0/boost/proto/proto.hpp:16:
In file included from lib/boost_1.52.0/boost/proto/functional.hpp:14:
In file included from lib/boost_1.52.0/boost/proto/functional/range.hpp:15:
In file included from lib/boost_1.52.0/boost/proto/functional/range/rbegin.hpp:12:
In file included from lib/boost_1.52.0/boost/range/rbegin.hpp:19:
In file included from lib/boost_1.52.0/boost/range/reverse_iterator.hpp:20:
In file included from lib/boost_1.52.0/boost/iterator/reverse_iterator.hpp:12:
lib
/boost_1.52.0/boost/iterator/iterator_adaptor.hpp:306:18: warning: returning reference to local temporary object [-Wreturn-stack-address]
       
{ return *m_iterator; }
                 
^~~~~~~~~~~
lib
/boost_1.52.0/boost/iterator/iterator_facade.hpp:514:20: note: in instantiation of member function
     
'boost::iterator_adaptor<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, const char, boost::forward_traversal_tag, boost::use_default,
      boost::use_default>::dereference'
requested here
         
return f.dereference();
                   
^
lib
/boost_1.52.0/boost/iterator/iterator_facade.hpp:639:18: note: in instantiation of function template specialization
     
'boost::iterator_core_access::dereference<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >'
requested here
         
return iterator_core_access::dereference(this->derived());
                 
^
lib
/boost_1.52.0/boost/spirit/home/qi/detail/string_parse.hpp:28:37: note: in instantiation of member function
     
'boost::iterator_facade<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, const char, boost::forward_traversal_tag, const char &, long long>::operator*'
requested here
           
if (i == last || (ch != *i))
                                   
^
lib
/boost_1.52.0/boost/spirit/home/qi/string/lit.hpp:110:20: note: in instantiation of function template specialization 'boost::spirit::qi::detail::string_parse<char,
      boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, const boost::spirit::unused_type>'
requested here
           
return detail::string_parse(str, first, last, attr);
                   
^
lib
/boost_1.52.0/boost/spirit/home/qi/detail/expect_function.hpp:50:28: note: in instantiation of function template specialization 'boost::spirit::qi::literal_string<char const (&)[3],
      true>::parse<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, boost::spirit::context<boost::fusion::cons<stan::gm::expression &, boost::fusion::nil>, boost::fusion::vector0<void> >, boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >, const boost::spirit::unused_type>'
requested here
           
if (!component.parse(first, last, context, skipper, attr))
                           
^
lib
/boost_1.52.0/boost/spirit/home/support/algorithm/any_if.hpp:186:20: note: (skipping 20 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
           
return f(*first1, attribute) ||
                   
^
lib
/boost_1.52.0/boost/function/function_template.hpp:1069:5: note: in instantiation of function template specialization 'boost::function4<bool,
      boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > &, const boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > &, boost::spirit::context<boost::fusion::cons<stan::gm::expression &, boost::fusion::nil>, boost::fusion::vector0<void> > &, const boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >
      &>::function4<boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval,
      boost::fusion::vector<boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >,
      boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::literal_string<char const (&)[3], true>,
      boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval,
      boost::fusion::vector<boost::spirit::attribute<0>, boost::phoenix::composite<boost::phoenix::detail::function_eval<5>,
      boost::fusion::vector<boost::phoenix::value<stan::gm::binary_op_expr>, boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::phoenix::value<const char *>,
      boost::phoenix::value<const char *>, boost::phoenix::reference<std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::fusion::nil> > > >, boost::fusion::nil> > >, mpl_::bool_<true> > >'
requested here
    base_type
(f)
   
^
lib
/boost_1.52.0/boost/function/function_template.hpp:1124:5: note: in instantiation of function template specialization 'boost::function<bool
      (boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > &, const boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > &, boost::spirit::context<boost::fusion::cons<stan::gm::expression &, boost::fusion::nil>, boost::fusion::vector0<void> > &, const boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >
      &)>::function<boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval,
      boost::fusion::vector<boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >,
      boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::literal_string<char const (&)[3], true>,
      boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval,
      boost::fusion::vector<boost::spirit::attribute<0>, boost::phoenix::composite<boost::phoenix::detail::function_eval<5>,
      boost::fusion::vector<boost::phoenix::value<stan::gm::binary_op_expr>, boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::phoenix::value<const char *>,
      boost::phoenix::value<const char *>, boost::phoenix::reference<std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::fusion::nil> > > >, boost::fusion::nil> > >, mpl_::bool_<true> > >'
requested here
    self_type
(f).swap(*this);
   
^
lib
/boost_1.52.0/boost/spirit/home/qi/nonterminal/rule.hpp:182:19: note: in instantiation of function template specialization 'boost::function<bool
      (boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > &, const boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > &, boost::spirit::context<boost::fusion::cons<stan::gm::expression &, boost::fusion::nil>, boost::fusion::vector0<void> > &, const boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >
      &)>::operator=<boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval,
      boost::fusion::vector<boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >,
      boost::fusion::cons<boost::spirit::qi::kleene<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::literal_string<char const (&)[3], true>,
      boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const
      boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval,
      boost::fusion::vector<boost::spirit::attribute<0>, boost::phoenix::composite<boost::phoenix::detail::function_eval<5>,
      boost::fusion::vector<boost::phoenix::value<stan::gm::binary_op_expr>, boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::phoenix::value<const char *>,
      boost::phoenix::value<const char *>, boost::phoenix::reference<std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::fusion::nil> > > >, boost::fusion::nil> > >, mpl_::bool_<true> > >'
requested here
            lhs
.f = detail::bind_parser<Auto>(
                 
^
lib
/boost_1.52.0/boost/spirit/home/qi/nonterminal/rule.hpp:246:13: note: in instantiation of function template specialization
     
'boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >,
      boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type>::define<mpl_::bool_<true>, boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater,
      boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript,
      boost::proto::argsns_::list2<boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char>
      >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> &, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const
      boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval, boost::fusion::vector<boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > &>, 0> >, 2> &, const
      boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater,
      boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit,
      boost::fusion::vector1<char const (&)[3]> > >, 0> &, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript,
      boost::proto::argsns_::list2<boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char>
      >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> &, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const
      boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval, boost::fusion::vector<boost::spirit::attribute<0>,
      boost::phoenix::composite<boost::phoenix::detail::function_eval<5>, boost::fusion::vector<boost::phoenix::value<stan::gm::binary_op_expr>, boost::spirit::attribute<0>,
      boost::spirit::argument<0>, boost::phoenix::value<const char *>, boost::phoenix::value<const char *>, boost::phoenix::reference<std::__1::basic_stringstream<char,
      std::__1::char_traits<char>, std::__1::allocator<char> > >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > &>, 0> >, 2> &>, 2> &>, 1>
      &>, 2> >'
requested here
            define
<mpl::true_>(r, expr, traits::matches<qi::domain, Expr>());
           
^
src
/stan/gm/grammars/expression_grammar_def.hpp:509:9: note: in instantiation of function template specialization 'boost::spirit::qi::operator%=<const
      boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript,
      boost::proto::argsns_::list2<boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char>
      >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> &, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const
      boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval, boost::fusion::vector<boost::spirit::attribute<0>, boost::spirit::argument<0>, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > &>, 0> >, 2> &, const
      boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater,
      boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit,
      boost::fusion::vector1<char const (&)[3]> > >, 0> &, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript,
      boost::proto::argsns_::list2<boost::spirit::qi::rule<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char, std::__1::char_traits<char>
      >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > >, stan::gm::expression (), stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::__1::istreambuf_iterator<char,
      std::__1::char_traits<char> >, boost::spirit::iterator_policies::default_policy<boost::spirit::iterator_policies::ref_counted, boost::spirit::iterator_policies::no_check,
      boost::spirit::iterator_policies::buffering_input_iterator, boost::spirit::iterator_policies::split_std_deque> >, boost::spirit::classic::file_position_base<std::__1::basic_string<char>
      > > >, boost::spirit::unused_type, boost::spirit::unused_type> &, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const
      boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval, boost::fusion::vector<boost::spirit::attribute<0>,
      boost::phoenix::composite<boost::phoenix::detail::function_eval<5>, boost::fusion::vector<boost::phoenix::value<stan::gm::binary_op_expr>, boost::spirit::attribute<0>,
      boost::spirit::argument<0>, boost::phoenix::value<const char *>, boost::phoenix::value<const char *>, boost::phoenix::reference<std::__1::basic_stringstream<char,
      std::__1::char_traits<char>, std::__1::allocator<char> > >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::fusion::void_,
      boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > &>, 0> >, 2> &>, 2> &>, 1>
      &>, 2> >'
requested here
       
%= expression14_r [_val = _1]
       
^


 

Bob Carpenter

unread,
Dec 7, 2012, 2:12:31 AM12/7/12
to stan...@googlegroups.com

On 12/6/12 8:01 PM, Ben Goodrich wrote:
> On Thursday, December 6, 2012 7:07:17 PM UTC-5, Ben Goodrich wrote:
>
> On Thursday, December 6, 2012 4:48:45 PM UTC-5, Bob Carpenter wrote:
...
> I changed the CFLAGS in the top-level stan/makefile:
>
> CFLAGS = -I src -I $(EIGEN) -I $(BOOST) -O$O -Wall -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE
>
> Will this work on Windows or do we need to do something different?
>
>
> Still broken with clang++-3.1 and O=3 (log attached), but now the failures are similar to those of g++-4.7.

I suppose that's an improvement.

> Works at O=0. Here is a suspicious warning:
...

Thanks for pasting in the warning -- I patched the grammar and am hoping
this clears it up.

As always, I'm amazed it was parsing and compiling the way it was.

On Mac OS X Mountain Lion, the unit tests all pass under
Xcode's latest clang++ 3.1. I think they were passing before
I patched the grammar.

- Bob

Ben Goodrich

unread,
Dec 7, 2012, 4:33:57 AM12/7/12
to stan...@googlegroups.com
On Friday, December 7, 2012 2:12:31 AM UTC-5, Bob Carpenter wrote:

On 12/6/12 8:01 PM, Ben Goodrich wrote:
> On Thursday, December 6, 2012 7:07:17 PM UTC-5, Ben Goodrich wrote:
>
>     On Thursday, December 6, 2012 4:48:45 PM UTC-5, Bob Carpenter wrote:
...
>         I changed the CFLAGS in the top-level stan/makefile:
>
>               CFLAGS = -I src -I $(EIGEN) -I $(BOOST) -O$O -Wall -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE
>
>         Will this work on Windows or do we need to do something different?
>
>
>     Still broken with clang++-3.1 and O=3 (log attached), but now the failures are similar to those of g++-4.7.

I suppose that's an improvement.

> Works at O=0. Here is a suspicious warning:
...

Thanks for pasting in the warning -- I patched the grammar and am hoping
this clears it up.

Not for me (or Jenkins). Unless you are working with a locally modified make/os_mac, I don't think we have the same clang configuration. In the clang section, you need to add a

 CFLAGS += -std=c++0x

 and get rid of any

 CFLAGS_GTEST += -Wno-c++11-extensions


As always, I'm amazed it was parsing and compiling the way it was.

On Mac OS X Mountain Lion, the unit tests all pass under
Xcode's latest clang++ 3.1.  I think they were passing before
I patched the grammar.

I think clang was pretty much always passing the tests for me too, as long as you don't enforce the c++0x standard.

It still fails under g++-4.7 too. Here is its version of the suspicious warning:

In file included from lib/boost_1.52.0/boost/iterator/reverse_iterator.hpp:12:0,
                 
from lib/boost_1.52.0/boost/range/reverse_iterator.hpp:20,
                 
from lib/boost_1.52.0/boost/range/rbegin.hpp:19,
                 
from lib/boost_1.52.0/boost/range/functions.hpp:23,
                 
from lib/boost_1.52.0/boost/range/iterator_range_core.hpp:26,
                 
from lib/boost_1.52.0/boost/lexical_cast.hpp:167,
                 
from src/stan/gm/parser.hpp:4,
                 
from src/test/gm/parser_test.cpp:9:
lib
/boost_1.52.0/boost/iterator/iterator_adaptor.hpp: In instantiation of ‘typename boost::detail::iterator_adaptor_base<Derived, Base, Value, Traversal, Reference, Difference>::type::reference boost::iterator_adaptor<Derived, Base, Value, Traversal, Reference, Difference>::dereference() const [with Derived = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > >; Base = boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > >; Value = const char; Traversal = boost::forward_traversal_tag; Reference = boost::use_default; Difference = boost::use_default; typename boost::detail::iterator_adaptor_base<Derived, Base, Value, Traversal, Reference, Difference>::type::reference = const char&]’:
lib
/boost_1.52.0/boost/iterator/iterator_facade.hpp:514:32:   required from ‘static typename Facade::reference boost::iterator_core_access::dereference(const Facade&) [with Facade = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > >; typename Facade::reference = const char&]’
lib
/boost_1.52.0/boost/iterator/iterator_facade.hpp:639:67:   required from ‘boost::iterator_facade<I, V, TC, R, D>::reference boost::iterator_facade<I, V, TC, R, D>::operator*() const [with Derived = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > >; Value = const char; CategoryOrTraversal = boost::forward_traversal_tag; Reference = const char&; Difference = long int; boost::iterator_facade<I, V, TC, R, D>::reference = const char&]’
lib
/boost_1.52.0/boost/concept_check.hpp:553:54:   required from ‘boost::ForwardIterator<TT>::~ForwardIterator() [with TT = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > >]’
lib
/boost_1.52.0/boost/concept/detail/general.hpp:38:28:   required from ‘static void boost::concepts::requirement<boost::concepts::failed************ Model::************>::failed() [with Model = boost::ForwardIterator<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > > >]’
lib
/boost_1.52.0/boost/spirit/home/qi/parse.hpp:149:1:   required from ‘bool boost::spirit::qi::phrase_parse(Iterator&, Iterator, const Expr&, const Skipper&, boost::spirit::qi::skip_flag, Attr&) [with Iterator = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > >; Expr = stan::gm::program_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > > >; Skipper = stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > > >; Attr = stan::gm::program]’
lib
/boost_1.52.0/boost/spirit/home/qi/parse.hpp:197:86:   required from ‘bool boost::spirit::qi::phrase_parse(Iterator&, Iterator, const Expr&, const Skipper&, Attr&) [with Iterator = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > >; Expr = stan::gm::program_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > > >; Skipper = stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> > > > >; Attr = stan::gm::program]’
src
/stan/gm/parser.hpp:100:46:   required from here
lib
/boost_1.52.0/boost/iterator/iterator_adaptor.hpp:306:19: warning: returning reference to temporary [enabled by default]


I assume the line that says

boost::concepts::requirement<boost::concepts::failed************ Model::************>::failed() [with Model =

is a bad thing.

Ben

Ben Goodrich

unread,
Dec 7, 2012, 5:51:58 AM12/7/12
to stan...@googlegroups.com
On Friday, December 7, 2012 4:33:57 AM UTC-5, Ben Goodrich wrote:
It still fails under g++-4.7 too. Here is its version of the suspicious warning:

Attached is the entire log using clang-3.2 RC3. It looks pretty much the same as for clang-3.1 and g++-4.7 to me, but hopefully there is something in it that clarifies the problem.

Ben

clang-3.2.txt

Bob Carpenter

unread,
Dec 7, 2012, 6:31:34 PM12/7/12
to stan...@googlegroups.com
The builds being broken on Jenkins is blocking the
release of a new version of Stan. Not to mention
totally stressing me out because I have no idea how to
even begin to debug the problem.

Were the problems introduced by a new dependency
on C++11? I remember deciding that we would have no
dependencies on C++11 features in Stan itself, but that
someone wanted to add some C++11 features to the tests,
which at the time, seemed OK. If that's what's breaking
our builds, I think we should reverse that decision and
not depend on C++11 in the tests, either.

It seems like like compiler support and API support (Eigen and Boost)
is even flakier than for pre-C++11. We're probably also doing
things wrong because I don't know what has changed from version
to version. All the issues I see are buried in libs where we
don't seem to have any control (I include a new offering below).

I can't even get compiled with clang++ -O0 with Ben's suggestions,
putting the following in stan/make

CFLAGS += -std=c++0x

and removing from stan/make/os_mac

CFLAGS_GTEST += -Wno-c++11-extensions

The compiler exits in the middle of an Eigen library:

-------------------------------
clang++ -I src -I lib/eigen_3.1.2 -I lib/boost_1.52.0 -O3 -Wall -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -std=c++0x
-Wno-unused-function -Wno-tautological-compare -c -o bin/stan/math/matrix.o src/stan/math/matrix.cpp
In file included from src/stan/math/matrix.cpp:4:
In file included from src/stan/math/matrix.hpp:12:
In file included from lib/eigen_3.1.2/Eigen/Dense:1:
In file included from lib/eigen_3.1.2/Eigen/Core:248:
lib/eigen_3.1.2/Eigen/src/Core/util/Memory.h:713:23: error: no member named 'forward' in namespace
'std'
::new(p) T(std::forward<Args>(args)...);
~~~~~^
lib/eigen_3.1.2/Eigen/src/Core/util/Memory.h:713:31: error: 'Args' does not refer to a value
::new(p) T(std::forward<Args>(args)...);
^
lib/eigen_3.1.2/Eigen/src/Core/util/Memory.h:710:26: note: declared here
template<typename... Args>
^
2 errors generated.
make: *** [bin/stan/math/matrix.o] Error 1
--------------------------------------

Now std::forward seems to be built into C++, so why isn't Eigen
finding it? We certainly don't use it on our own anywhere.

- Bob
> lib/boost_1.52.0/boost/iterator/iterator_adaptor.hpp: In instantiation of �typename
> boost::detail::iterator_adaptor_base<Derived, Base, Value, Traversal, Reference, Difference>::type::reference
> boost::iterator_adaptor<Derived, Base, Value, Traversal, Reference, Difference>::dereference() const [with Derived =
> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > >; Base = boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> >
> >; Value = const char; Traversal = boost::forward_traversal_tag; Reference = boost::use_default; Difference =
> boost::use_default; typename boost::detail::iterator_adaptor_base<Derived, Base, Value, Traversal, Reference,
> Difference>::type::reference = const char&]�:
> lib/boost_1.52.0/boost/iterator/iterator_facade.hpp:514:32: required from �static typename Facade::reference
> boost::iterator_core_access::dereference(const Facade&) [with Facade =
> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > >; typename Facade::reference = const char&]�
> lib/boost_1.52.0/boost/iterator/iterator_facade.hpp:639:67: required from �boost::iterator_facade<I, V, TC, R,
> D>::reference boost::iterator_facade<I, V, TC, R, D>::operator*() const [with Derived =
> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > >; Value = const char; CategoryOrTraversal = boost::forward_traversal_tag; Reference = const
> char&; Difference = long int; boost::iterator_facade<I, V, TC, R, D>::reference = const char&]�
> lib/boost_1.52.0/boost/concept_check.hpp:553:54: required from �boost::ForwardIterator<TT>::~ForwardIterator() [with
> TT = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > >]�
> lib/boost_1.52.0/boost/concept/detail/general.hpp:38:28: required from �static void
> boost::concepts::requirement<boost::concepts::failed************ Model::************>::failed() [with Model =
> boost::ForwardIterator<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > > >]�
> lib/boost_1.52.0/boost/spirit/home/qi/parse.hpp:149:1: required from �bool boost::spirit::qi::phrase_parse(Iterator&,
> Iterator, const Expr&, const Skipper&, boost::spirit::qi::skip_flag, Attr&) [with Iterator =
> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > >; Expr =
> stan::gm::program_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > > >; Skipper =
> stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > > >; Attr = stan::gm::program]�
> lib/boost_1.52.0/boost/spirit/home/qi/parse.hpp:197:86: required from �bool boost::spirit::qi::phrase_parse(Iterator&,
> Iterator, const Expr&, const Skipper&, Attr&) [with Iterator =
> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > >; Expr =
> stan::gm::program_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > > >; Skipper =
> stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
> std::char_traits<char> > > > >; Attr = stan::gm::program]�
> src/stan/gm/parser.hpp:100:46: required from here
> lib/boost_1.52.0/boost/iterator/iterator_adaptor.hpp:306:19: warning: returning reference to temporary [enabled by default]
>
> |
>
> I assume the line that says
>
> |
> |
> boost::concepts::requirement<boost::concepts::failed************ Model::************>::failed() [with Model =
> |
>
> is a bad thing.
> |
> Ben
>
> --
>
>

Daniel Lee

unread,
Dec 7, 2012, 7:37:44 PM12/7/12
to stan...@googlegroups.com
On Dec 7, 2012, at 6:31 PM, Bob Carpenter <ca...@alias-i.com> wrote:

> The builds being broken on Jenkins is blocking the
> release of a new version of Stan. Not to mention
> totally stressing me out because I have no idea how to
> even begin to debug the problem.
>
> Were the problems introduced by a new dependency
> on C++11? I remember deciding that we would have no
> dependencies on C++11 features in Stan itself, but that
> someone wanted to add some C++11 features to the tests,
> which at the time, seemed OK. If that's what's breaking
> our builds, I think we should reverse that decision and
> not depend on C++11 in the tests, either.
>

Sorry about being silent on the issue. I'm still looking, but I think I'm close. If I don't find it by the stan meeting, we can call it and I'll back the tests out.

The problem on windows: the gm/parser tests kill the compiler. I've been playing with it on another personal windows machine I have. The complied just dies. No warnings or messages. The behavior is reminiscent of a size limitation that we saw months back.
I don't know what that error is.
>> lib/boost_1.52.0/boost/iterator/iterator_adaptor.hpp: In instantiation of ‘typename
>> boost::detail::iterator_adaptor_base<Derived, Base, Value, Traversal, Reference, Difference>::type::reference
>> boost::iterator_adaptor<Derived, Base, Value, Traversal, Reference, Difference>::dereference() const [with Derived =
>> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > >; Base = boost::spirit::multi_pass<std::istreambuf_iterator<char, std::char_traits<char> >
>> >; Value = const char; Traversal = boost::forward_traversal_tag; Reference = boost::use_default; Difference =
>> boost::use_default; typename boost::detail::iterator_adaptor_base<Derived, Base, Value, Traversal, Reference,
>> Difference>::type::reference = const char&]’:
>> lib/boost_1.52.0/boost/iterator/iterator_facade.hpp:514:32: required from ‘static typename Facade::reference
>> boost::iterator_core_access::dereference(const Facade&) [with Facade =
>> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > >; typename Facade::reference = const char&]’
>> lib/boost_1.52.0/boost/iterator/iterator_facade.hpp:639:67: required from ‘boost::iterator_facade<I, V, TC, R,
>> D>::reference boost::iterator_facade<I, V, TC, R, D>::operator*() const [with Derived =
>> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > >; Value = const char; CategoryOrTraversal = boost::forward_traversal_tag; Reference = const
>> char&; Difference = long int; boost::iterator_facade<I, V, TC, R, D>::reference = const char&]’
>> lib/boost_1.52.0/boost/concept_check.hpp:553:54: required from ‘boost::ForwardIterator<TT>::~ForwardIterator() [with
>> TT = boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > >]’
>> lib/boost_1.52.0/boost/concept/detail/general.hpp:38:28: required from ‘static void
>> boost::concepts::requirement<boost::concepts::failed************ Model::************>::failed() [with Model =
>> boost::ForwardIterator<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > > >]’
>> lib/boost_1.52.0/boost/spirit/home/qi/parse.hpp:149:1: required from ‘bool boost::spirit::qi::phrase_parse(Iterator&,
>> Iterator, const Expr&, const Skipper&, boost::spirit::qi::skip_flag, Attr&) [with Iterator =
>> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > >; Expr =
>> stan::gm::program_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > > >; Skipper =
>> stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > > >; Attr = stan::gm::program]’
>> lib/boost_1.52.0/boost/spirit/home/qi/parse.hpp:197:86: required from ‘bool boost::spirit::qi::phrase_parse(Iterator&,
>> Iterator, const Expr&, const Skipper&, Attr&) [with Iterator =
>> boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > >; Expr =
>> stan::gm::program_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > > >; Skipper =
>> stan::gm::whitespace_grammar<boost::spirit::classic::position_iterator2<boost::spirit::multi_pass<std::istreambuf_iterator<char,
>> std::char_traits<char> > > > >; Attr = stan::gm::program]’
>> src/stan/gm/parser.hpp:100:46: required from here
>> lib/boost_1.52.0/boost/iterator/iterator_adaptor.hpp:306:19: warning: returning reference to temporary [enabled by default]
>>
>> |
>>
>> I assume the line that says
>>
>> |
>> |
>> boost::concepts::requirement<boost::concepts::failed************ Model::************>::failed() [with Model =
>> |
>>
>> is a bad thing.
>> |
>> Ben
>>
>> --
>
> --
>
>

Ben Goodrich

unread,
Dec 7, 2012, 9:00:28 PM12/7/12
to stan...@googlegroups.com
On Friday, December 7, 2012 6:31:34 PM UTC-5, Bob Carpenter wrote:
The builds being broken on Jenkins is blocking the
release of a new version of Stan.  Not to mention
totally stressing me out because I have no idea how to
even begin to debug the problem.

Were the problems introduced by a new dependency
on C++11?   I remember deciding that we would have no
dependencies on C++11 features in Stan itself, but that
someone wanted to add some C++11 features to the tests,
which at the time, seemed OK.  If that's what's breaking
our builds, I think we should reverse that decision and
not depend on C++11 in the tests, either.

I think there are two separate issues here: One is whether the tests should utilize features that are unique to the C++11 standard, which I guess Daniel has good reason to want. The other is whether Stan itself should adhere to the C++11 standard even if we are not using any of its unique features like decltype or lambda functions or whatever.

I think the problems we are having are related to the second issue, but it is a good goal to target the standard. If -std is unspecified, it defaults to g++99, which is not an actual standard. The reason why I think we are utilizing some quirky undefined behavior is that we are having more success with the old compilers. As far as I know, all versions of (pure) g++ up to 4.6.x are passing test-unit. It is g++-4.7 and clang-3.1 and the forthcoming release of each that are having trouble, plus mingw on Windows. That mingw is close to g++-4.6, but I can successfully cross-compile to Windows, so I think we would be okay if Jenkins weren't mysteriously dying.

I can't even get compiled with clang++ -O0 with Ben's suggestions,
putting the following in stan/make

    CFLAGS += -std=c++0x

and removing from stan/make/os_mac

    CFLAGS_GTEST += -Wno-c++11-extensions

The compiler exits in the middle of an Eigen library:

Can you get through the Eigen test suite with those options?

We should have released v1.0.4 as soon as the thing with the line numbers in the error message was fixed. And we shouldn't have tried to transition to the c++11 standard in a branch rather than in master. But I think we should keep trying to move forward rather than trying to go backward.

Ben

Ben Goodrich

unread,
Dec 7, 2012, 9:13:58 PM12/7/12
to stan...@googlegroups.com
On Friday, December 7, 2012 6:31:34 PM UTC-5, Bob Carpenter wrote:
The compiler exits in the middle of an Eigen library:

-------------------------------
clang++ -I src -I lib/eigen_3.1.2 -I lib/boost_1.52.0 -O3 -Wall -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -std=c++0x
-Wno-unused-function -Wno-tautological-compare   -c -o bin/stan/math/matrix.o src/stan/math/matrix.cpp
In file included from src/stan/math/matrix.cpp:4:
In file included from src/stan/math/matrix.hpp:12:
In file included from lib/eigen_3.1.2/Eigen/Dense:1:
In file included from lib/eigen_3.1.2/Eigen/Core:248:
lib/eigen_3.1.2/Eigen/src/Core/util/Memory.h:713:23: error: no member named 'forward' in namespace
       'std'
       ::new(p) T(std::forward<Args>(args)...);
                  ~~~~~^
lib/eigen_3.1.2/Eigen/src/Core/util/Memory.h:713:31: error: 'Args' does not refer to a value
       ::new(p) T(std::forward<Args>(args)...);
                               ^
lib/eigen_3.1.2/Eigen/src/Core/util/Memory.h:710:26: note: declared here
     template<typename... Args>
                          ^
2 errors generated.
make: *** [bin/stan/math/matrix.o] Error 1
--------------------------------------

Now std::forward seems to be built into C++, so why isn't Eigen
finding it?  We certainly don't use it on our own anywhere.

This link

http://marshall.calepin.co/llvmclang-and-standard-libraries-on-mac-os-x.html

seems to have the best explanation among the hits I got from Google. And it raises yet another issue: Should we be adding

CFLAGS += -stdlib=libc++

when Clang is used to use Clang's version of the standard C++ library rather than g++'s? I think so, even though it is less widely used. This

http://libcxx.llvm.org/

claims that it is "a 100% complete C++11 implementation on Apple's OS X" and it works for me on Debian. It probably doesn't work on Windows but just getting clang++ to work on Windows requires a few steps (that we haven't attempted yet).

Ben

Ben Goodrich

unread,
Dec 7, 2012, 9:28:55 PM12/7/12
to stan...@googlegroups.com

If so, then you also have to do

CFLAGS_GTEST += -DGTEST_USE_OWN_TR1_TUPLE

to circumvent purely gtest-related errors.

Ben

Ben Goodrich

unread,
Dec 7, 2012, 9:33:42 PM12/7/12
to stan...@googlegroups.com
On Friday, December 7, 2012 7:37:44 PM UTC-5, Daniel Lee wrote:
Sorry about being silent on the issue. I'm still looking, but I think I'm close. If I don't find it by the stan meeting, we can call it and I'll back the tests out.

The problem on windows: the gm/parser tests kill the compiler. I've been playing with it on another personal windows machine I have. The complied just dies. No warnings or messages. The behavior is reminiscent of a size limitation that we saw months back.

Can you email me how to get into the Jenkins box? I don't know what I am doing, but I can do it.

Ben

Bob Carpenter

unread,
Dec 8, 2012, 4:57:31 PM12/8/12
to stan...@googlegroups.com


On 12/7/12 9:00 PM, Ben Goodrich wrote:
> On Friday, December 7, 2012 6:31:34 PM UTC-5, Bob Carpenter wrote:
>
> The builds being broken on Jenkins is blocking the
> release of a new version of Stan. Not to mention
> totally stressing me out because I have no idea how to
> even begin to debug the problem.
>
> Were the problems introduced by a new dependency
> on C++11? I remember deciding that we would have no
> dependencies on C++11 features in Stan itself, but that
> someone wanted to add some C++11 features to the tests,
> which at the time, seemed OK. If that's what's breaking
> our builds, I think we should reverse that decision and
> not depend on C++11 in the tests, either.
>
>
> I think there are two separate issues here: One is whether the tests should utilize features that are unique to the
> C++11 standard, which I guess Daniel has good reason to want. The other is whether Stan itself should adhere to the
> C++11 standard even if we are not using any of its unique features like decltype or lambda functions or whatever.

Absolutely. And I think it's important that we be standards compliant.

What makes this so absurdly hard with C++ is that the standard isn't
strict enough to fully determine behavior of a "compliant" compiler.
And at different optimization levels, the same compiler can make
different decisions in places where the spec's incomplete.

> I think the problems we are having are related to the second issue,

That, or incomplete implementations to the standard by either
Eigen, Boost, or the new compilers!

I don't have any strategies for working through this other than
one compiler warning and error message at a time. But when we're
out on the cutting edge with new compilers, we can't even rely
on old newsgroup posts that work through the same problems.

> but it is a good goal to target the standard. If
> -std is unspecified, it defaults to g++99, which is not an actual standard. The reason why I think we are utilizing some
> quirky undefined behavior is that we are having more success with the old compilers. As far as I know, all versions of
> (pure) g++ up to 4.6.x are passing test-unit. It is g++-4.7 and clang-3.1 and the forthcoming release of each that are
> having trouble, plus mingw on Windows. That mingw is close to g++-4.6, but I can successfully cross-compile to Windows,
> so I think we would be okay if Jenkins weren't mysteriously dying.
>
> I can't even get compiled with clang++ -O0 with Ben's suggestions,
> putting the following in stan/make
>
> CFLAGS += -std=c++0x
>
> and removing from stan/make/os_mac
>
> CFLAGS_GTEST += -Wno-c++11-extensions
>
> The compiler exits in the middle of an Eigen library:
>
>
> Can you get through the Eigen test suite with those options?
>
> We should have released v1.0.4 as soon as the thing with the line numbers in the error message was fixed.

Agreed. And part of what's making me feel so anxious about
all of this is that I introduced the error in 1.0.3 that
I so desperately want to get fixed with a release.

> And we
> shouldn't have tried to transition to the c++11 standard in a branch rather than in master. But I think we should keep
> trying to move forward rather than trying to go backward.

I think this is a timing issue. Unless we can fix the problems
we're having now, I think we should go back as far as we have to
for a stable release. Not having the line numbers in error messages
is a very big deal for our users and is really going to turn people
off from using Stan.

- Bob

Ben Goodrich

unread,
Dec 9, 2012, 7:18:02 AM12/9/12
to stan...@googlegroups.com
On Saturday, December 8, 2012 4:57:31 PM UTC-5, Bob Carpenter wrote:
Absolutely.  And I think it's important that we be standards compliant.

What makes this so absurdly hard with C++ is that the standard isn't
strict enough to fully determine behavior of a "compliant" compiler.
And at different optimization levels, the same compiler can make
different decisions in places where the spec's incomplete.

FWIW, ATM I think we getting the same test failures at all levels of optimization.
 
> We should have released v1.0.4 as soon as the thing with the line numbers in the error message was fixed.

Agreed.  And part of what's making me feel so anxious about
all of this is that I introduced the error in 1.0.3 that
I so desperately want to get fixed with a release.

> And we
> shouldn't have tried to transition to the c++11 standard in a branch rather than in master. But I think we should keep
> trying to move forward rather than trying to go backward.

I think this is a timing issue.  Unless we can fix the problems
we're having now, I think we should go back as far as we have to
for a stable release.  Not having the line numbers in error messages
is a very big deal for our users and is really going to turn people
off from using Stan.

It is hard to say that going backwards is the right direction without knowing what the problem is. That said, if we do

CFLAGS_GTEST += -std=c++0x

rather than

CFLAGS += -std=c++0x

(which I think was Daniel's original intention), then we still have test failures in src/test/gm/parser_test.cpp (for recent compilers only). However, these test failures are not that bad: stanc is parsing the .stan files fine, but parser_test.cpp does not utilize stanc. In other words, something in these headers

#include "stan/gm/ast_def.cpp"
#include "stan/gm/parser.hpp"
#include <stan/gm/generator.hpp>
#include <stan/gm/grammars/program_grammar_def.hpp>
#include <stan/gm/grammars/whitespace_grammar_def.hpp>
#include <stan/gm/grammars/expression_grammar_def.hpp>
#include <stan/gm/grammars/statement_grammar_def.hpp>
#include <stan/gm/grammars/var_decls_grammar_def.hpp>

is likely to be not compliant with the c++11 standard (i.e. we are getting the same error from both g++ >= 4.7 and clang++ >= 3.1 and with either boost 1.52 or 1.50). But no one actually parses without stanc, and it's a non-issue with the default versions of g++ on Mac and Windows anyway. So, I don't think it would be the worst thing in the world to blacklist that test, release v1.0.4, and then try to make all of Stan standard compliant for v1.0.5.

Ben

Reply all
Reply to author
Forward
0 new messages