Skip to content

GCC array bounds complain on libclang_parser.cpp #160

@CarlosNihelton

Description

@CarlosNihelton
  • cppast version: Comit: 032d48d
  • parser: libclang_parser
  • clang version: 15.0.6

Hi @foonathan ! Thank you very much for this great library!

I was very excited attempting to compile standardese with GCC 12.2 and got stuck on array bounds checking error message on line 123:
https://github.com/foonathan/cppast/blob/7b255252328969435487cd8a06f569b0e4b6847a/src/libclang/libclang_parser.cpp#L118-L129 ,
thus couldn't compile. It's nice to work with such a high level of strictness. It seems to me that the dir string would never be empty, but the compiler is not so convinced, thus I guess we'd need to throw an exception before accessing dir operator[] in case it's empty. Or maybe you got a better idea of how to convince the compiler that string will never be emtpy (caching it in the class constructor, maybe?).

To move forward I just put a check-and-throw before that line and got it to compile till the end. I noticed the code is the same on the main branch.

Input flags: cmake -S. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS="-frecord-gcc-switches" -DLLVM_CONFIG_BINARY=/usr/lib/llvm-15/bin/llvm-config -DCMAKE_CXX_COMPILER=g++

Output:

cmake --build build --target standardese_tool
[44/83] Building CXX object external/cppast/src/CMakeFiles/cppast.dir/libclang/libclang_parser.cpp.o
FAILED: external/cppast/src/CMakeFiles/cppast.dir/libclang/libclang_parser.cpp.o
/usr/bin/g++ -DCPPAST_CLANG_BINARY=\"/usr/lib/llvm-15/bin/clang\" -DCPPAST_CLANG_VERSION_STRING=\"15.0.6\" -DCPPAST_VERSION_MAJOR=\"0\" -DCPPAST_VERSION_MINOR=\"0\" -DCPPAST_VERSION_STRING=\"0.0\" -DTYPE_SAFE_ARITHMETIC_POLICY=1 -DTYPE_SAFE_ENABLE_ASSERTIONS=0 -DTYPE_SAFE_ENABLE_PRECONDITION_CHECKS=1 -DTYPE_SAFE_ENABLE_WRAPPER=1 -Dcppast_EXPORTS -I/home/cnihelton/Dev/2_Tools/standardese/external/cppast/src/../include -I/home/cnihelton/Dev/2_Tools/standardese/external/cppast/src/SYSTEM -I/home/cnihelton/Dev/2_Tools/standardese/build/_deps/type_safe-src/include -I/home/cnihelton/Dev/2_Tools/standardese/build/_deps/type_safe-src/external/debug_assert -I/home/cnihelton/Dev/2_Tools/standardese/external/cppast/external/tpl -I/usr/lib/llvm-15/include -frecord-gcc-switches -O2 -g -DNDEBUG -fPIC -pedantic-errors -Werror -Wall -Wextra -Wconversion -Wsign-conversion -Wno-noexcept-type -MD -MT external/cppast/src/CMakeFiles/cppast.dir/libclang/libclang_parser.cpp.o -MF external/cppast/src/CMakeFiles/cppast.dir/libclang/libclang_parser.cpp.o.d -o external/cppast/src/CMakeFiles/cppast.dir/libclang/libclang_parser.cpp.o -c /home/cnihelton/Dev/2_Tools/standardese/external/cppast/src/libclang/libclang_parser.cpp
In file included from /home/cnihelton/Dev/2_Tools/standardese/external/cppast/src/libclang/cxtokenizer.hpp:14,
                 from /home/cnihelton/Dev/2_Tools/standardese/external/cppast/src/libclang/libclang_parser.cpp:14:
In member function ‘char cppast::detail::cxstring::operator[](std::size_t) const’,
    inlined from ‘std::string {anonymous}::get_full_path(const cppast::detail::cxstring&, const std::string&)’ at /home/cnihelton/Dev/2_Tools/standardese/external/cppast/src/libclang/libclang_parser.cpp:122:34:
/home/cnihelton/Dev/2_Tools/standardese/external/cppast/src/libclang/raii_wrapper.hpp:125:29: error: array subscript -1 is outside array bounds of ‘const char [1]’ [-Werror=array-bounds]
  125 |             return c_str()[i];
      |                             ^
cc1plus: all warnings being treated as errors
[53/83] Building CXX object src/CMakeFiles/standardese.dir/comment/config.cpp.o
ninja: build stopped: subcommand failed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions