base::CircularQueue give up on const correctness for MSVC This CL makes the CircularQueue iterator not work on const queue instances (for which there is no current usage) in exchange of making it work on MSVC. The problem is that the current Iterator implementation is only half const-correct. A truly const-correct version would require two Iterator classes a const_iterator and an interator, and corresponding const+non-const begin()/end() and front()/back() methods on the CircularQueue container. That's too much complexity and more chances to get things wrong. Failure log: https://pastebin.com/raw/2v3q6pkf FAILED: obj/src/base/unittests.circular_queue_unittest.obj C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\bin\Hostx64\x64\cl.exe /nologo /showIncludes /FC -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -DNOMINMAX -D_HAS_EXCEPTIONS=0 -DWIN32_LEAN_AND_MEAN -DGTEST_LANG_CXX11=1 -DPERFETTO_IMPLEMENTATION "-IC:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/include" "-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/ucrt" "-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um" "-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared" -I../../buildtools/googletest/googletest/include -I../../buildtools/googletest/googlemock/include -I../.. -I../../include -Igen/build_config -Igen -I../../src/third_party_getopt /Od /bigobj /Gy /WX /Z7 /W2 /wd4244 /wd4267 /GR- /c ../../src/base/circular_queue_unittest.cc /Foobj/src/base/unittests.circular_queue_unittest.obj /Fd"obj/src/base/unittests_c.pdb" C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7419): error C3892: '_First': you cannot assign to a variable that is const C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7541): note: see reference to function template instantiation '_BidIt std::_Insertion_sort_unchecked<_RanIt,_Pr>(const _BidIt,const _BidIt,_Pr)' being compiled with [ _BidIt=perfetto::base::CircularQueue<uint64_t>::Iterator, _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator, _Pr=std::less<void> ] C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7571): note: see reference to function template instantiation 'void std::_Sort_unchecked<_RanIt,_Fn>(_RanIt,_RanIt,__int64,_Pr)' being compiled with [ _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator, _Fn=std::less<void>, _Pr=std::less<void> ] C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7576): note: see reference to function template instantiation 'void std::sort<_RanIt,std::less<void>>(const _RanIt,const _RanIt,_Pr)' being compiled with [ _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator, _Pr=std::less<void> ] D:\Progetti\perfetto\src\base\circular_queue_unittest.cc(100): note: see reference to function template instantiation 'void std::sort<perfetto::base::CircularQueue<uint64_t>::Iterator>(const _RanIt,const _RanIt)' being compiled with [ _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator ] ninja: build stopped: subcommand failed. PS D:\Progetti\perfetto> Bug: 174454879 Change-Id: I1cfb44dac646f455157ce08b15e14b3349e5a7de
Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.
See https://perfetto.dev/docs or the /docs/ directory for documentation.