2017-07-09 2 views
2

Lors de la compilation d'une fonction dans le fichier « ProductEvaluators.h » dans la version actuelle de Eigen en utilisant v141, je reçois une erreur interne du compilateur.erreur du compilateur interne dans Eigen (v141)

fatal error C1001: An internal error has occurred in the compiler. 

La fonction REVIENT Suivis je PRECISEE l'erreur dans/crash du compilateur à la « .sum() » dans la dernière ligne:

EIGEN_DEVICE_FUNC const CoeffReturnType coeff(Index index) const 
{ 
    const Index row = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? 0 : index; 
    const Index col = (RowsAtCompileTime == 1 || MaxRowsAtCompileTime==1) ? index : 0; 
    return (m_lhs.row(row).transpose().cwiseProduct(m_rhs.col(col))).sum(); 
} 

il serait bien sûr intéressant de corriger cette erreur spécifique, je me demandais aussi , quel type de code provoque généralement ce type de crash du compilateur?

+1

Est-ce que cela arrive aussi sans optimisations? Si oui, signalez le bogue du compilateur à Microsoft. –

+0

Juste pour info, cela arrive si on essaye de compiler Ceres, ce qui le rend non utilisable avec v141 maintenant. – DrPepperJo

Répondre

0

J'ai vu des plantages de MSVC en de multiples occasions. Jusqu'à présent, il a toujours été le compilateur 32 bits, où le msvc 64 bits (et gcc ou clang d'ailleurs) a bien fonctionné. Les solutions de contournement que j'ai utilisées sont la division des expressions en plus petites, évaluant explicitement les sous-expressions dans Eigen :: Matrix <> temporaires. Garder ces temporaires dans une classe et réutiliser ces objets minimise les coûts de performance, mais ce n'est pas le cas idéal.