Собственная ошибка компиляции с gcc 8.2.1 на MSYS2 - PullRequest
0 голосов
/ 19 декабря 2018

Мы сталкиваемся с ошибками при компиляции с Eigen 3.3.7 (и, возможно, более ранними версиями) с последними версиями GCC 8.2.1, поставляемыми MSYS2.Как ни странно, это происходит только с последними сборками того же пакета (mingw-w64-x86_64-gcc 8.2.1):

  • 8.2.1 + 20181123-1: штраф
  • 8.2.1 +20181130-1: ошибка
  • 8.2.1 + 20181207-1: ошибка

Ошибка:

In file included from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/SparseCore:50,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Sparse:26,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Eigen:2,
                 from src/registration/transform/search.h:21,
                 from src/registration/transform/initialiser_helpers.cpp:20:
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h: In member function 'Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::BlockType& Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::operator=(const BlockType&)':
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h:216:33: error: expected primary-expression before '>' token
       return operator=<BlockType>(other);

                             ^

Я предполагаю, что это ошибкав пакете GCC, поставляемом MSYS2, а не Eigen (насколько я могу судить, файл SparseBlock.h некоторое время не менялся).Разные сборки GCC основаны на одном и том же исходном коде?Любая идея, что проблема может быть?


РЕДАКТИРОВАТЬ: вот MCVE:

test.cpp:

#include <Eigen/Eigen>
int main () { return 0; }

скомпилировать с g ++ 8.2.1 (версия 8.2.1 + 20181130-1 или новее - без ошибок с более старой версией):

$ g++ $(pkg-config --cflags eigen3) test.cpp -o test
In file included from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/SparseCore:50,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Sparse:26,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Eigen:2,
                 from test.cpp:1:
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h: In member function 'Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::BlockType& Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::operator=(const BlockType&)':
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h:216:33: error: expected primary-expression before '>' token
       return operator=<BlockType>(other);
                                 ^

1 Ответ

0 голосов
/ 20 декабря 2018

Дальнейшие исследования показывают, что это действительно ошибка GCC.Я сообщил об этом в GCC Bugzilla , и я закрою эту тему.Спасибо!

...