Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

more helpful "PCH file built from a different branch" message #1117

Open
bob-carpenter opened this issue Sep 20, 2022 · 3 comments
Open

more helpful "PCH file built from a different branch" message #1117

bob-carpenter opened this issue Sep 20, 2022 · 3 comments

Comments

@bob-carpenter
Copy link
Contributor

bob-carpenter commented Sep 20, 2022

Summary:

The PCH file built from a different branch error does not provide a hint on how to fix it. Add such a hint.

Description:

When I try to build with the wrong precompiled header (PCH), I get this:

~/github/stan-dev/cmdstan (develop)$ make ~/temp2/simple

--- Translating Stan model to C++ code ---
bin/stanc  --o=/Users/bcarpenter/temp2/simple.hpp /Users/bcarpenter/temp2/simple.stan

--- Compiling, linking C++ code ---
clang++ -std=c++1y -Wno-unknown-warning-option -Wno-tautological-compare -Wno-sign-compare -D_REENTRANT -Wno-ignored-attributes      -I stan/lib/stan_math/lib/tbb_2020.3/include    -O3 -I src -I stan/src -I lib/rapidjson_1.1.0/ -I lib/CLI11-1.9.1/ -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.9 -I stan/lib/stan_math/lib/boost_1.78.0 -I stan/lib/stan_math/lib/sundials_6.1.1/include -I stan/lib/stan_math/lib/sundials_6.1.1/src/sundials    -DBOOST_DISABLE_ASSERTS          -c -include-pch stan/src/stan/model/model_header.hpp.gch -x c++ -o /Users/bcarpenter/temp2/simple.o /Users/bcarpenter/temp2/simple.hpp
error: PCH file built from a different branch ((clang-1316.0.21.2.5)) than the compiler ((clang-1400.0.29.102))
1 error generated.
make: *** [/Users/bcarpenter/temp2/simple] Error 1

This is great that it says what's wrong, but it would be even better if it suggested how to fix the problem. I'm pretty sure I need to just delete a .pch file, but I don't know where it's at. A recursive search didn't work:

~/github/stan-dev/cmdstan (develop)$ ls -R -l | grep pch
-rw-r--r--   1 bcarpenter  1595  3773 Aug 10 12:07 pchip.hpp
-rw-r--r--  1 bcarpenter  1595   340 Aug 10 12:07 pch.hpp
-rwxr-xr-x  1 bcarpenter  1595  1175 Aug 10 12:07 cppcheck.sh
-rw-r--r--   1 bcarpenter  1595    537 Aug 10 12:07 pch.hpp
-rw-r--r--   1 bcarpenter  1595   2717 Aug 10 12:07 pch.jam
-rw-r--r--   1 bcarpenter  1595   2848 Aug 10 12:07 pch.py
~/github/stan-dev/cmdstan (develop)$ 

Reproducible Steps:

See above, but to reproduce it, you need to have two compilers, one of which built the pch file and a different one to tickle this error.

Current Output:

See above.

Expected Output:

Some hint as to where the pch file is that I need to delete. Even better, just automatically delete and rebuild after detecting this error.

Additional Information:

There are a lot of pages where people brought up this problem on our forums or in issues. The advice in the first hit on the forums didn't work, which suggested just running make clean. Here's what I get:

~/github/stan-dev/cmdstan (develop)$ make clean
rm -f -r test
rm -f 
rm -f 
rm -f 
rm -f 
~/github/stan-dev/cmdstan (develop)$ make ~/temp2/simple

--- Compiling, linking C++ code ---
clang++ -std=c++1y -Wno-unknown-warning-option -Wno-tautological-compare -Wno-sign-compare -D_REENTRANT -Wno-ignored-attributes      -I stan/lib/stan_math/lib/tbb_2020.3/include    -O3 -I src -I stan/src -I lib/rapidjson_1.1.0/ -I lib/CLI11-1.9.1/ -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.9 -I stan/lib/stan_math/lib/boost_1.78.0 -I stan/lib/stan_math/lib/sundials_6.1.1/include -I stan/lib/stan_math/lib/sundials_6.1.1/src/sundials    -DBOOST_DISABLE_ASSERTS          -c -include-pch stan/src/stan/model/model_header.hpp.gch -x c++ -o /Users/bcarpenter/temp2/simple.o /Users/bcarpenter/temp2/simple.hpp
error: PCH file built from a different branch ((clang-1316.0.21.2.5)) than the compiler ((clang-1400.0.29.102))
1 error generated.
make: *** [/Users/bcarpenter/temp2/simple] Error 1

Current Version:

v2.30.1

@WardBrian
Copy link
Member

Just as a warning to anyone who wants to try addressing this issue, we've spent a fair amount of effort trying to catch this message and provide guidance in CmdStanPy, but Apple/Clang changes the wording of the error message seemingly every version as well, so it ends up being very brittle.

Doing that while also only having the powers of make on your hands will be challenging

@bob-carpenter
Copy link
Contributor Author

bob-carpenter commented Sep 20, 2022

The forum posts I found had instructions for fixing that no longer work. So I put my SEO hat on and formulated a forum post that I hope has the Google juice to pop to the top of search results for pch conflicts:

https://discourse.mc-stan.org/t/how-to-fix-pch-conflict-error-building-cmdstan-cmdstanpy-or-cmdstanr/28895

The answer is that you need to

$ cd <cmdstan>
$ make clean-all

The make clean suggested in the forums doesn't work. And for some reason, I couldn't find the pch file by searching in the Finder on Mac OS X.

@rok-cesnovar
Copy link
Member

rok-cesnovar commented Sep 20, 2022

The make clean suggested in the forums doesn't work.

Yeah, the precompiled header files are removed in clean-all: https://github.com/stan-dev/cmdstan/blob/develop/makefile#L316

And for some reason, I couldn't find the pch file by searching in the Finder on Mac OS X.

The extension is actually .hpp.gch. It should be in cmdstan/stan/src/stan/model/model_header.hpp.gch.

I think we should move that line from clean-all to clean. Seems like a good option to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants