Skip to content

UB invoked by Fill from BDCSVD

Summary

Undefined behavior in BDCSVD<Eigen::MatrixXd, Eigen::ComputeThinU | Eigen::ComputeThinV> for a particular matrix may point to a bug.

Environment

  • Operating System : Linux
  • Architecture : x64
  • Eigen Version : 3.3.9
  • Compiler Version : clang version 17.0.6
  • Compile Flags : -std=c++17 -O3 -g -fsanitize=undefined -fsanitize=integer -fsanitize=local-bounds -fno-omit-frame-pointer
  • Vector Extension : <I'm not sure what that is>

Minimal Example

I tried to recreate this in CE using eigen trunk, but it did not compile due to how I reproduced the matrix.


#include <iostream>
#include <stdlib.h> 
#include "Eigen/Dense"

int main()
{
    constexpr int input_rows = 10;
    constexpr int input_cols = 100;

    // make matrix
    double* matrix;
    
    matrix = (double*) malloc((input_rows*input_cols) * sizeof(double));

    matrix[0] = 0.000000;
    matrix[1] = 0.000000;
    matrix[2] = 0.000000;
    matrix[3] = 0.000000;
    matrix[4] = 0.000000;
    matrix[5] = 0.000000;
    matrix[6] = 0.000000;
    matrix[7] = 0.000000;
    matrix[8] = 0.000000;
    matrix[9] = 0.000000;
    matrix[10] = 0.000000;
    matrix[11] = 0.000000;
    matrix[12] = 0.000000;
    matrix[13] = 0.000000;
    matrix[14] = 0.000000;
    matrix[15] = 0.000000;
    matrix[16] = 0.000000;
    matrix[17] = 0.000000;
    matrix[18] = 0.000000;
    matrix[19] = 0.000000;
    matrix[20] = 0.000000;
    matrix[21] = 0.000000;
    matrix[22] = 0.000000;
    matrix[23] = 0.000000;
    matrix[24] = 0.000000;
    matrix[25] = 0.000000;
    matrix[26] = 0.000000;
    matrix[27] = 0.000000;
    matrix[28] = 0.000000;
    matrix[29] = 0.000000;
    matrix[30] = 0.000000;
    matrix[31] = 0.000000;
    matrix[32] = 0.000000;
    matrix[33] = 0.000000;
    matrix[34] = 0.000000;
    matrix[35] = 0.000000;
    matrix[36] = 0.000000;
    matrix[37] = 0.000000;
    matrix[38] = 0.000000;
    matrix[39] = 0.000000;
    matrix[40] = 0.000000;
    matrix[41] = 0.000000;
    matrix[42] = 0.000000;
    matrix[43] = 0.000000;
    matrix[44] = 0.000000;
    matrix[45] = 0.000000;
    matrix[46] = 0.000000;
    matrix[47] = 0.000000;
    matrix[48] = 0.000000;
    matrix[49] = 0.000000;
    matrix[50] = 0.000000;
    matrix[51] = 0.000000;
    matrix[52] = 0.000000;
    matrix[53] = 0.000000;
    matrix[54] = 0.000000;
    matrix[55] = 0.000000;
    matrix[56] = 0.000000;
    matrix[57] = 0.000000;
    matrix[58] = 0.000000;
    matrix[59] = 0.000000;
    matrix[60] = 0.000000;
    matrix[61] = 0.000000;
    matrix[62] = 0.000000;
    matrix[63] = 0.000000;
    matrix[64] = 0.000000;
    matrix[65] = 0.000000;
    matrix[66] = 0.000000;
    matrix[67] = 0.000000;
    matrix[68] = 0.000000;
    matrix[69] = 0.000000;
    matrix[70] = 0.000000;
    matrix[71] = 0.000000;
    matrix[72] = 0.000000;
    matrix[73] = 0.000000;
    matrix[74] = 0.000000;
    matrix[75] = 0.000000;
    matrix[76] = 0.000000;
    matrix[77] = 0.000000;
    matrix[78] = 0.000000;
    matrix[79] = 0.000000;
    matrix[80] = 0.000000;
    matrix[81] = 0.000000;
    matrix[82] = 0.000000;
    matrix[83] = 0.000000;
    matrix[84] = 0.000000;
    matrix[85] = 0.000000;
    matrix[86] = 0.000000;
    matrix[87] = 0.000000;
    matrix[88] = 0.000000;
    matrix[89] = 0.000000;
    matrix[90] = 0.000000;
    matrix[91] = 0.000000;
    matrix[92] = 0.000000;
    matrix[93] = 0.000000;
    matrix[94] = 0.000000;
    matrix[95] = 0.000000;
    matrix[96] = 0.000000;
    matrix[97] = 0.000000;
    matrix[98] = 0.000000;
    matrix[99] = 0.000000;
    matrix[100] = 0.000000;
    matrix[101] = 0.010101;
    matrix[102] = 0.020408;
    matrix[103] = 0.030927;
    matrix[104] = 0.041664;
    matrix[105] = 0.052625;
    matrix[106] = 0.063816;
    matrix[107] = 0.075243;
    matrix[108] = 0.086912;
    matrix[109] = 0.098829;
    matrix[110] = 0.000000;
    matrix[111] = 0.010101;
    matrix[112] = 0.020408;
    matrix[113] = 0.030927;
    matrix[114] = 0.041664;
    matrix[115] = 0.052625;
    matrix[116] = 0.063816;
    matrix[117] = 0.075243;
    matrix[118] = 0.086912;
    matrix[119] = 0.098829;
    matrix[120] = 0.000000;
    matrix[121] = 0.010101;
    matrix[122] = 0.020408;
    matrix[123] = 0.030927;
    matrix[124] = 0.041664;
    matrix[125] = 0.052625;
    matrix[126] = 0.063816;
    matrix[127] = 0.075243;
    matrix[128] = 0.086912;
    matrix[129] = 0.098829;
    matrix[130] = 0.000000;
    matrix[131] = 0.010101;
    matrix[132] = 0.020408;
    matrix[133] = 0.030927;
    matrix[134] = 0.041664;
    matrix[135] = 0.052625;
    matrix[136] = 0.063816;
    matrix[137] = 0.075243;
    matrix[138] = 0.086912;
    matrix[139] = 0.098829;
    matrix[140] = 0.000000;
    matrix[141] = 0.010101;
    matrix[142] = 0.020408;
    matrix[143] = 0.030927;
    matrix[144] = 0.041664;
    matrix[145] = 0.052625;
    matrix[146] = 0.063816;
    matrix[147] = 0.075243;
    matrix[148] = 0.086912;
    matrix[149] = 0.098829;
    matrix[150] = 0.000000;
    matrix[151] = 0.010101;
    matrix[152] = 0.020408;
    matrix[153] = 0.030927;
    matrix[154] = 0.041664;
    matrix[155] = 0.052625;
    matrix[156] = 0.063816;
    matrix[157] = 0.075243;
    matrix[158] = 0.086912;
    matrix[159] = 0.098829;
    matrix[160] = 0.000000;
    matrix[161] = 0.010101;
    matrix[162] = 0.020408;
    matrix[163] = 0.030927;
    matrix[164] = 0.041664;
    matrix[165] = 0.052625;
    matrix[166] = 0.063816;
    matrix[167] = 0.075243;
    matrix[168] = 0.086912;
    matrix[169] = 0.098829;
    matrix[170] = 0.000000;
    matrix[171] = 0.010101;
    matrix[172] = 0.020408;
    matrix[173] = 0.030927;
    matrix[174] = 0.041664;
    matrix[175] = 0.052625;
    matrix[176] = 0.063816;
    matrix[177] = 0.075243;
    matrix[178] = 0.086912;
    matrix[179] = 0.098829;
    matrix[180] = 0.000000;
    matrix[181] = 0.010101;
    matrix[182] = 0.020408;
    matrix[183] = 0.030927;
    matrix[184] = 0.041664;
    matrix[185] = 0.052625;
    matrix[186] = 0.063816;
    matrix[187] = 0.075243;
    matrix[188] = 0.086912;
    matrix[189] = 0.098829;
    matrix[190] = 0.000000;
    matrix[191] = 0.010101;
    matrix[192] = 0.020408;
    matrix[193] = 0.030927;
    matrix[194] = 0.041664;
    matrix[195] = 0.052625;
    matrix[196] = 0.063816;
    matrix[197] = 0.075243;
    matrix[198] = 0.086912;
    matrix[199] = 0.098829;
    matrix[200] = 0.000000;
    matrix[201] = 0.020408;
    matrix[202] = 0.041664;
    matrix[203] = 0.063816;
    matrix[204] = 0.086912;
    matrix[205] = 0.111000;
    matrix[206] = 0.136128;
    matrix[207] = 0.162344;
    matrix[208] = 0.189696;
    matrix[209] = 0.218232;
    matrix[210] = 0.000000;
    matrix[211] = 0.020408;
    matrix[212] = 0.041664;
    matrix[213] = 0.063816;
    matrix[214] = 0.086912;
    matrix[215] = 0.111000;
    matrix[216] = 0.136128;
    matrix[217] = 0.162344;
    matrix[218] = 0.189696;
    matrix[219] = 0.218232;
    matrix[220] = 0.000000;
    matrix[221] = 0.020408;
    matrix[222] = 0.041664;
    matrix[223] = 0.063816;
    matrix[224] = 0.086912;
    matrix[225] = 0.111000;
    matrix[226] = 0.136128;
    matrix[227] = 0.162344;
    matrix[228] = 0.189696;
    matrix[229] = 0.218232;
    matrix[230] = 0.000000;
    matrix[231] = 0.020408;
    matrix[232] = 0.041664;
    matrix[233] = 0.063816;
    matrix[234] = 0.086912;
    matrix[235] = 0.111000;
    matrix[236] = 0.136128;
    matrix[237] = 0.162344;
    matrix[238] = 0.189696;
    matrix[239] = 0.218232;
    matrix[240] = 0.000000;
    matrix[241] = 0.020408;
    matrix[242] = 0.041664;
    matrix[243] = 0.063816;
    matrix[244] = 0.086912;
    matrix[245] = 0.111000;
    matrix[246] = 0.136128;
    matrix[247] = 0.162344;
    matrix[248] = 0.189696;
    matrix[249] = 0.218232;
    matrix[250] = 0.000000;
    matrix[251] = 0.020408;
    matrix[252] = 0.041664;
    matrix[253] = 0.063816;
    matrix[254] = 0.086912;
    matrix[255] = 0.111000;
    matrix[256] = 0.136128;
    matrix[257] = 0.162344;
    matrix[258] = 0.189696;
    matrix[259] = 0.218232;
    matrix[260] = 0.000000;
    matrix[261] = 0.020408;
    matrix[262] = 0.041664;
    matrix[263] = 0.063816;
    matrix[264] = 0.086912;
    matrix[265] = 0.111000;
    matrix[266] = 0.136128;
    matrix[267] = 0.162344;
    matrix[268] = 0.189696;
    matrix[269] = 0.218232;
    matrix[270] = 0.000000;
    matrix[271] = 0.020408;
    matrix[272] = 0.041664;
    matrix[273] = 0.063816;
    matrix[274] = 0.086912;
    matrix[275] = 0.111000;
    matrix[276] = 0.136128;
    matrix[277] = 0.162344;
    matrix[278] = 0.189696;
    matrix[279] = 0.218232;
    matrix[280] = 0.000000;
    matrix[281] = 0.020408;
    matrix[282] = 0.041664;
    matrix[283] = 0.063816;
    matrix[284] = 0.086912;
    matrix[285] = 0.111000;
    matrix[286] = 0.136128;
    matrix[287] = 0.162344;
    matrix[288] = 0.189696;
    matrix[289] = 0.218232;
    matrix[290] = 0.000000;
    matrix[291] = 0.020408;
    matrix[292] = 0.041664;
    matrix[293] = 0.063816;
    matrix[294] = 0.086912;
    matrix[295] = 0.111000;
    matrix[296] = 0.136128;
    matrix[297] = 0.162344;
    matrix[298] = 0.189696;
    matrix[299] = 0.218232;
    matrix[300] = 0.000000;
    matrix[301] = 0.030927;
    matrix[302] = 0.063816;
    matrix[303] = 0.098829;
    matrix[304] = 0.136128;
    matrix[305] = 0.175875;
    matrix[306] = 0.218232;
    matrix[307] = 0.263361;
    matrix[308] = 0.311424;
    matrix[309] = 0.362583;
    matrix[310] = 0.000000;
    matrix[311] = 0.030927;
    matrix[312] = 0.063816;
    matrix[313] = 0.098829;
    matrix[314] = 0.136128;
    matrix[315] = 0.175875;
    matrix[316] = 0.218232;
    matrix[317] = 0.263361;
    matrix[318] = 0.311424;
    matrix[319] = 0.362583;
    matrix[320] = 0.000000;
    matrix[321] = 0.030927;
    matrix[322] = 0.063816;
    matrix[323] = 0.098829;
    matrix[324] = 0.136128;
    matrix[325] = 0.175875;
    matrix[326] = 0.218232;
    matrix[327] = 0.263361;
    matrix[328] = 0.311424;
    matrix[329] = 0.362583;
    matrix[330] = 0.000000;
    matrix[331] = 0.030927;
    matrix[332] = 0.063816;
    matrix[333] = 0.098829;
    matrix[334] = 0.136128;
    matrix[335] = 0.175875;
    matrix[336] = 0.218232;
    matrix[337] = 0.263361;
    matrix[338] = 0.311424;
    matrix[339] = 0.362583;
    matrix[340] = 0.000000;
    matrix[341] = 0.030927;
    matrix[342] = 0.063816;
    matrix[343] = 0.098829;
    matrix[344] = 0.136128;
    matrix[345] = 0.175875;
    matrix[346] = 0.218232;
    matrix[347] = 0.263361;
    matrix[348] = 0.311424;
    matrix[349] = 0.362583;
    matrix[350] = 0.000000;
    matrix[351] = 0.030927;
    matrix[352] = 0.063816;
    matrix[353] = 0.098829;
    matrix[354] = 0.136128;
    matrix[355] = 0.175875;
    matrix[356] = 0.218232;
    matrix[357] = 0.263361;
    matrix[358] = 0.311424;
    matrix[359] = 0.362583;
    matrix[360] = 0.000000;
    matrix[361] = 0.030927;
    matrix[362] = 0.063816;
    matrix[363] = 0.098829;
    matrix[364] = 0.136128;
    matrix[365] = 0.175875;
    matrix[366] = 0.218232;
    matrix[367] = 0.263361;
    matrix[368] = 0.311424;
    matrix[369] = 0.362583;
    matrix[370] = 0.000000;
    matrix[371] = 0.030927;
    matrix[372] = 0.063816;
    matrix[373] = 0.098829;
    matrix[374] = 0.136128;
    matrix[375] = 0.175875;
    matrix[376] = 0.218232;
    matrix[377] = 0.263361;
    matrix[378] = 0.311424;
    matrix[379] = 0.362583;
    matrix[380] = 0.000000;
    matrix[381] = 0.030927;
    matrix[382] = 0.063816;
    matrix[383] = 0.098829;
    matrix[384] = 0.136128;
    matrix[385] = 0.175875;
    matrix[386] = 0.218232;
    matrix[387] = 0.263361;
    matrix[388] = 0.311424;
    matrix[389] = 0.362583;
    matrix[390] = 0.000000;
    matrix[391] = 0.030927;
    matrix[392] = 0.063816;
    matrix[393] = 0.098829;
    matrix[394] = 0.136128;
    matrix[395] = 0.175875;
    matrix[396] = 0.218232;
    matrix[397] = 0.263361;
    matrix[398] = 0.311424;
    matrix[399] = 0.362583;
    matrix[400] = 0.000000;
    matrix[401] = 0.041664;
    matrix[402] = 0.086912;
    matrix[403] = 0.136128;
    matrix[404] = 0.189696;
    matrix[405] = 0.248000;
    matrix[406] = 0.311424;
    matrix[407] = 0.380352;
    matrix[408] = 0.455168;
    matrix[409] = 0.536256;
    matrix[410] = 0.000000;
    matrix[411] = 0.041664;
    matrix[412] = 0.086912;
    matrix[413] = 0.136128;
    matrix[414] = 0.189696;
    matrix[415] = 0.248000;
    matrix[416] = 0.311424;
    matrix[417] = 0.380352;
    matrix[418] = 0.455168;
    matrix[419] = 0.536256;
    matrix[420] = 0.000000;
    matrix[421] = 0.041664;
    matrix[422] = 0.086912;
    matrix[423] = 0.136128;
    matrix[424] = 0.189696;
    matrix[425] = 0.248000;
    matrix[426] = 0.311424;
    matrix[427] = 0.380352;
    matrix[428] = 0.455168;
    matrix[429] = 0.536256;
    matrix[430] = 0.000000;
    matrix[431] = 0.041664;
    matrix[432] = 0.086912;
    matrix[433] = 0.136128;
    matrix[434] = 0.189696;
    matrix[435] = 0.248000;
    matrix[436] = 0.311424;
    matrix[437] = 0.380352;
    matrix[438] = 0.455168;
    matrix[439] = 0.536256;
    matrix[440] = 0.000000;
    matrix[441] = 0.041664;
    matrix[442] = 0.086912;
    matrix[443] = 0.136128;
    matrix[444] = 0.189696;
    matrix[445] = 0.248000;
    matrix[446] = 0.311424;
    matrix[447] = 0.380352;
    matrix[448] = 0.455168;
    matrix[449] = 0.536256;
    matrix[450] = 0.000000;
    matrix[451] = 0.041664;
    matrix[452] = 0.086912;
    matrix[453] = 0.136128;
    matrix[454] = 0.189696;
    matrix[455] = 0.248000;
    matrix[456] = 0.311424;
    matrix[457] = 0.380352;
    matrix[458] = 0.455168;
    matrix[459] = 0.536256;
    matrix[460] = 0.000000;
    matrix[461] = 0.041664;
    matrix[462] = 0.086912;
    matrix[463] = 0.136128;
    matrix[464] = 0.189696;
    matrix[465] = 0.248000;
    matrix[466] = 0.311424;
    matrix[467] = 0.380352;
    matrix[468] = 0.455168;
    matrix[469] = 0.536256;
    matrix[470] = 0.000000;
    matrix[471] = 0.041664;
    matrix[472] = 0.086912;
    matrix[473] = 0.136128;
    matrix[474] = 0.189696;
    matrix[475] = 0.248000;
    matrix[476] = 0.311424;
    matrix[477] = 0.380352;
    matrix[478] = 0.455168;
    matrix[479] = 0.536256;
    matrix[480] = 0.000000;
    matrix[481] = 0.041664;
    matrix[482] = 0.086912;
    matrix[483] = 0.136128;
    matrix[484] = 0.189696;
    matrix[485] = 0.248000;
    matrix[486] = 0.311424;
    matrix[487] = 0.380352;
    matrix[488] = 0.455168;
    matrix[489] = 0.536256;
    matrix[490] = 0.000000;
    matrix[491] = 0.041664;
    matrix[492] = 0.086912;
    matrix[493] = 0.136128;
    matrix[494] = 0.189696;
    matrix[495] = 0.248000;
    matrix[496] = 0.311424;
    matrix[497] = 0.380352;
    matrix[498] = 0.455168;
    matrix[499] = 0.536256;
    matrix[500] = 0.000000;
    matrix[501] = 0.052625;
    matrix[502] = 0.111000;
    matrix[503] = 0.175875;
    matrix[504] = 0.248000;
    matrix[505] = 0.328125;
    matrix[506] = 0.417000;
    matrix[507] = 0.515375;
    matrix[508] = 0.624000;
    matrix[509] = 0.743625;
    matrix[510] = 0.000000;
    matrix[511] = 0.052625;
    matrix[512] = 0.111000;
    matrix[513] = 0.175875;
    matrix[514] = 0.248000;
    matrix[515] = 0.328125;
    matrix[516] = 0.417000;
    matrix[517] = 0.515375;
    matrix[518] = 0.624000;
    matrix[519] = 0.743625;
    matrix[520] = 0.000000;
    matrix[521] = 0.052625;
    matrix[522] = 0.111000;
    matrix[523] = 0.175875;
    matrix[524] = 0.248000;
    matrix[525] = 0.328125;
    matrix[526] = 0.417000;
    matrix[527] = 0.515375;
    matrix[528] = 0.624000;
    matrix[529] = 0.743625;
    matrix[530] = 0.000000;
    matrix[531] = 0.052625;
    matrix[532] = 0.111000;
    matrix[533] = 0.175875;
    matrix[534] = 0.248000;
    matrix[535] = 0.328125;
    matrix[536] = 0.417000;
    matrix[537] = 0.515375;
    matrix[538] = 0.624000;
    matrix[539] = 0.743625;
    matrix[540] = 0.000000;
    matrix[541] = 0.052625;
    matrix[542] = 0.111000;
    matrix[543] = 0.175875;
    matrix[544] = 0.248000;
    matrix[545] = 0.328125;
    matrix[546] = 0.417000;
    matrix[547] = 0.515375;
    matrix[548] = 0.624000;
    matrix[549] = 0.743625;
    matrix[550] = 0.000000;
    matrix[551] = 0.052625;
    matrix[552] = 0.111000;
    matrix[553] = 0.175875;
    matrix[554] = 0.248000;
    matrix[555] = 0.328125;
    matrix[556] = 0.417000;
    matrix[557] = 0.515375;
    matrix[558] = 0.624000;
    matrix[559] = 0.743625;
    matrix[560] = 0.000000;
    matrix[561] = 0.052625;
    matrix[562] = 0.111000;
    matrix[563] = 0.175875;
    matrix[564] = 0.248000;
    matrix[565] = 0.328125;
    matrix[566] = 0.417000;
    matrix[567] = 0.515375;
    matrix[568] = 0.624000;
    matrix[569] = 0.743625;
    matrix[570] = 0.000000;
    matrix[571] = 0.052625;
    matrix[572] = 0.111000;
    matrix[573] = 0.175875;
    matrix[574] = 0.248000;
    matrix[575] = 0.328125;
    matrix[576] = 0.417000;
    matrix[577] = 0.515375;
    matrix[578] = 0.624000;
    matrix[579] = 0.743625;
    matrix[580] = 0.000000;
    matrix[581] = 0.052625;
    matrix[582] = 0.111000;
    matrix[583] = 0.175875;
    matrix[584] = 0.248000;
    matrix[585] = 0.328125;
    matrix[586] = 0.417000;
    matrix[587] = 0.515375;
    matrix[588] = 0.624000;
    matrix[589] = 0.743625;
    matrix[590] = 0.000000;
    matrix[591] = 0.052625;
    matrix[592] = 0.111000;
    matrix[593] = 0.175875;
    matrix[594] = 0.248000;
    matrix[595] = 0.328125;
    matrix[596] = 0.417000;
    matrix[597] = 0.515375;
    matrix[598] = 0.624000;
    matrix[599] = 0.743625;
    matrix[600] = 0.000000;
    matrix[601] = 0.063816;
    matrix[602] = 0.136128;
    matrix[603] = 0.218232;
    matrix[604] = 0.311424;
    matrix[605] = 0.417000;
    matrix[606] = 0.536256;
    matrix[607] = 0.670488;
    matrix[608] = 0.820992;
    matrix[609] = 0.989064;
    matrix[610] = 0.000000;
    matrix[611] = 0.063816;
    matrix[612] = 0.136128;
    matrix[613] = 0.218232;
    matrix[614] = 0.311424;
    matrix[615] = 0.417000;
    matrix[616] = 0.536256;
    matrix[617] = 0.670488;
    matrix[618] = 0.820992;
    matrix[619] = 0.989064;
    matrix[620] = 0.000000;
    matrix[621] = 0.063816;
    matrix[622] = 0.136128;
    matrix[623] = 0.218232;
    matrix[624] = 0.311424;
    matrix[625] = 0.417000;
    matrix[626] = 0.536256;
    matrix[627] = 0.670488;
    matrix[628] = 0.820992;
    matrix[629] = 0.989064;
    matrix[630] = 0.000000;
    matrix[631] = 0.063816;
    matrix[632] = 0.136128;
    matrix[633] = 0.218232;
    matrix[634] = 0.311424;
    matrix[635] = 0.417000;
    matrix[636] = 0.536256;
    matrix[637] = 0.670488;
    matrix[638] = 0.820992;
    matrix[639] = 0.989064;
    matrix[640] = 0.000000;
    matrix[641] = 0.063816;
    matrix[642] = 0.136128;
    matrix[643] = 0.218232;
    matrix[644] = 0.311424;
    matrix[645] = 0.417000;
    matrix[646] = 0.536256;
    matrix[647] = 0.670488;
    matrix[648] = 0.820992;
    matrix[649] = 0.989064;
    matrix[650] = 0.000000;
    matrix[651] = 0.063816;
    matrix[652] = 0.136128;
    matrix[653] = 0.218232;
    matrix[654] = 0.311424;
    matrix[655] = 0.417000;
    matrix[656] = 0.536256;
    matrix[657] = 0.670488;
    matrix[658] = 0.820992;
    matrix[659] = 0.989064;
    matrix[660] = 0.000000;
    matrix[661] = 0.063816;
    matrix[662] = 0.136128;
    matrix[663] = 0.218232;
    matrix[664] = 0.311424;
    matrix[665] = 0.417000;
    matrix[666] = 0.536256;
    matrix[667] = 0.670488;
    matrix[668] = 0.820992;
    matrix[669] = 0.989064;
    matrix[670] = 0.000000;
    matrix[671] = 0.063816;
    matrix[672] = 0.136128;
    matrix[673] = 0.218232;
    matrix[674] = 0.311424;
    matrix[675] = 0.417000;
    matrix[676] = 0.536256;
    matrix[677] = 0.670488;
    matrix[678] = 0.820992;
    matrix[679] = 0.989064;
    matrix[680] = 0.000000;
    matrix[681] = 0.063816;
    matrix[682] = 0.136128;
    matrix[683] = 0.218232;
    matrix[684] = 0.311424;
    matrix[685] = 0.417000;
    matrix[686] = 0.536256;
    matrix[687] = 0.670488;
    matrix[688] = 0.820992;
    matrix[689] = 0.989064;
    matrix[690] = 0.000000;
    matrix[691] = 0.063816;
    matrix[692] = 0.136128;
    matrix[693] = 0.218232;
    matrix[694] = 0.311424;
    matrix[695] = 0.417000;
    matrix[696] = 0.536256;
    matrix[697] = 0.670488;
    matrix[698] = 0.820992;
    matrix[699] = 0.989064;
    matrix[700] = 0.000000;
    matrix[701] = 0.075243;
    matrix[702] = 0.162344;
    matrix[703] = 0.263361;
    matrix[704] = 0.380352;
    matrix[705] = 0.515375;
    matrix[706] = 0.670488;
    matrix[707] = 0.847749;
    matrix[708] = 1.049216;
    matrix[709] = 1.276947;
    matrix[710] = 0.000000;
    matrix[711] = 0.075243;
    matrix[712] = 0.162344;
    matrix[713] = 0.263361;
    matrix[714] = 0.380352;
    matrix[715] = 0.515375;
    matrix[716] = 0.670488;
    matrix[717] = 0.847749;
    matrix[718] = 1.049216;
    matrix[719] = 1.276947;
    matrix[720] = 0.000000;
    matrix[721] = 0.075243;
    matrix[722] = 0.162344;
    matrix[723] = 0.263361;
    matrix[724] = 0.380352;
    matrix[725] = 0.515375;
    matrix[726] = 0.670488;
    matrix[727] = 0.847749;
    matrix[728] = 1.049216;
    matrix[729] = 1.276947;
    matrix[730] = 0.000000;
    matrix[731] = 0.075243;
    matrix[732] = 0.162344;
    matrix[733] = 0.263361;
    matrix[734] = 0.380352;
    matrix[735] = 0.515375;
    matrix[736] = 0.670488;
    matrix[737] = 0.847749;
    matrix[738] = 1.049216;
    matrix[739] = 1.276947;
    matrix[740] = 0.000000;
    matrix[741] = 0.075243;
    matrix[742] = 0.162344;
    matrix[743] = 0.263361;
    matrix[744] = 0.380352;
    matrix[745] = 0.515375;
    matrix[746] = 0.670488;
    matrix[747] = 0.847749;
    matrix[748] = 1.049216;
    matrix[749] = 1.276947;
    matrix[750] = 0.000000;
    matrix[751] = 0.075243;
    matrix[752] = 0.162344;
    matrix[753] = 0.263361;
    matrix[754] = 0.380352;
    matrix[755] = 0.515375;
    matrix[756] = 0.670488;
    matrix[757] = 0.847749;
    matrix[758] = 1.049216;
    matrix[759] = 1.276947;
    matrix[760] = 0.000000;
    matrix[761] = 0.075243;
    matrix[762] = 0.162344;
    matrix[763] = 0.263361;
    matrix[764] = 0.380352;
    matrix[765] = 0.515375;
    matrix[766] = 0.670488;
    matrix[767] = 0.847749;
    matrix[768] = 1.049216;
    matrix[769] = 1.276947;
    matrix[770] = 0.000000;
    matrix[771] = 0.075243;
    matrix[772] = 0.162344;
    matrix[773] = 0.263361;
    matrix[774] = 0.380352;
    matrix[775] = 0.515375;
    matrix[776] = 0.670488;
    matrix[777] = 0.847749;
    matrix[778] = 1.049216;
    matrix[779] = 1.276947;
    matrix[780] = 0.000000;
    matrix[781] = 0.075243;
    matrix[782] = 0.162344;
    matrix[783] = 0.263361;
    matrix[784] = 0.380352;
    matrix[785] = 0.515375;
    matrix[786] = 0.670488;
    matrix[787] = 0.847749;
    matrix[788] = 1.049216;
    matrix[789] = 1.276947;
    matrix[790] = 0.000000;
    matrix[791] = 0.075243;
    matrix[792] = 0.162344;
    matrix[793] = 0.263361;
    matrix[794] = 0.380352;
    matrix[795] = 0.515375;
    matrix[796] = 0.670488;
    matrix[797] = 0.847749;
    matrix[798] = 1.049216;
    matrix[799] = 1.276947;
    matrix[800] = 0.000000;
    matrix[801] = 0.086912;
    matrix[802] = 0.189696;
    matrix[803] = 0.311424;
    matrix[804] = 0.455168;
    matrix[805] = 0.624000;
    matrix[806] = 0.820992;
    matrix[807] = 1.049216;
    matrix[808] = 1.311744;
    matrix[809] = 1.611648;
    matrix[810] = 0.000000;
    matrix[811] = 0.086912;
    matrix[812] = 0.189696;
    matrix[813] = 0.311424;
    matrix[814] = 0.455168;
    matrix[815] = 0.624000;
    matrix[816] = 0.820992;
    matrix[817] = 1.049216;
    matrix[818] = 1.311744;
    matrix[819] = 1.611648;
    matrix[820] = 0.000000;
    matrix[821] = 0.086912;
    matrix[822] = 0.189696;
    matrix[823] = 0.311424;
    matrix[824] = 0.455168;
    matrix[825] = 0.624000;
    matrix[826] = 0.820992;
    matrix[827] = 1.049216;
    matrix[828] = 1.311744;
    matrix[829] = 1.611648;
    matrix[830] = 0.000000;
    matrix[831] = 0.086912;
    matrix[832] = 0.189696;
    matrix[833] = 0.311424;
    matrix[834] = 0.455168;
    matrix[835] = 0.624000;
    matrix[836] = 0.820992;
    matrix[837] = 1.049216;
    matrix[838] = 1.311744;
    matrix[839] = 1.611648;
    matrix[840] = 0.000000;
    matrix[841] = 0.086912;
    matrix[842] = 0.189696;
    matrix[843] = 0.311424;
    matrix[844] = 0.455168;
    matrix[845] = 0.624000;
    matrix[846] = 0.820992;
    matrix[847] = 1.049216;
    matrix[848] = 1.311744;
    matrix[849] = 1.611648;
    matrix[850] = 0.000000;
    matrix[851] = 0.086912;
    matrix[852] = 0.189696;
    matrix[853] = 0.311424;
    matrix[854] = 0.455168;
    matrix[855] = 0.624000;
    matrix[856] = 0.820992;
    matrix[857] = 1.049216;
    matrix[858] = 1.311744;
    matrix[859] = 1.611648;
    matrix[860] = 0.000000;
    matrix[861] = 0.086912;
    matrix[862] = 0.189696;
    matrix[863] = 0.311424;
    matrix[864] = 0.455168;
    matrix[865] = 0.624000;
    matrix[866] = 0.820992;
    matrix[867] = 1.049216;
    matrix[868] = 1.311744;
    matrix[869] = 1.611648;
    matrix[870] = 0.000000;
    matrix[871] = 0.086912;
    matrix[872] = 0.189696;
    matrix[873] = 0.311424;
    matrix[874] = 0.455168;
    matrix[875] = 0.624000;
    matrix[876] = 0.820992;
    matrix[877] = 1.049216;
    matrix[878] = 1.311744;
    matrix[879] = 1.611648;
    matrix[880] = 0.000000;
    matrix[881] = 0.086912;
    matrix[882] = 0.189696;
    matrix[883] = 0.311424;
    matrix[884] = 0.455168;
    matrix[885] = 0.624000;
    matrix[886] = 0.820992;
    matrix[887] = 1.049216;
    matrix[888] = 1.311744;
    matrix[889] = 1.611648;
    matrix[890] = 0.000000;
    matrix[891] = 0.086912;
    matrix[892] = 0.189696;
    matrix[893] = 0.311424;
    matrix[894] = 0.455168;
    matrix[895] = 0.624000;
    matrix[896] = 0.820992;
    matrix[897] = 1.049216;
    matrix[898] = 1.311744;
    matrix[899] = 1.611648;
    matrix[900] = 0.000000;
    matrix[901] = 0.098829;
    matrix[902] = 0.218232;
    matrix[903] = 0.362583;
    matrix[904] = 0.536256;
    matrix[905] = 0.743625;
    matrix[906] = 0.989064;
    matrix[907] = 1.276947;
    matrix[908] = 1.611648;
    matrix[909] = 1.997541;
    matrix[910] = 0.000000;
    matrix[911] = 0.098829;
    matrix[912] = 0.218232;
    matrix[913] = 0.362583;
    matrix[914] = 0.536256;
    matrix[915] = 0.743625;
    matrix[916] = 0.989064;
    matrix[917] = 1.276947;
    matrix[918] = 1.611648;
    matrix[919] = 1.997541;
    matrix[920] = 0.000000;
    matrix[921] = 0.098829;
    matrix[922] = 0.218232;
    matrix[923] = 0.362583;
    matrix[924] = 0.536256;
    matrix[925] = 0.743625;
    matrix[926] = 0.989064;
    matrix[927] = 1.276947;
    matrix[928] = 1.611648;
    matrix[929] = 1.997541;
    matrix[930] = 0.000000;
    matrix[931] = 0.098829;
    matrix[932] = 0.218232;
    matrix[933] = 0.362583;
    matrix[934] = 0.536256;
    matrix[935] = 0.743625;
    matrix[936] = 0.989064;
    matrix[937] = 1.276947;
    matrix[938] = 1.611648;
    matrix[939] = 1.997541;
    matrix[940] = 0.000000;
    matrix[941] = 0.098829;
    matrix[942] = 0.218232;
    matrix[943] = 0.362583;
    matrix[944] = 0.536256;
    matrix[945] = 0.743625;
    matrix[946] = 0.989064;
    matrix[947] = 1.276947;
    matrix[948] = 1.611648;
    matrix[949] = 1.997541;
    matrix[950] = 0.000000;
    matrix[951] = 0.098829;
    matrix[952] = 0.218232;
    matrix[953] = 0.362583;
    matrix[954] = 0.536256;
    matrix[955] = 0.743625;
    matrix[956] = 0.989064;
    matrix[957] = 1.276947;
    matrix[958] = 1.611648;
    matrix[959] = 1.997541;
    matrix[960] = 0.000000;
    matrix[961] = 0.098829;
    matrix[962] = 0.218232;
    matrix[963] = 0.362583;
    matrix[964] = 0.536256;
    matrix[965] = 0.743625;
    matrix[966] = 0.989064;
    matrix[967] = 1.276947;
    matrix[968] = 1.611648;
    matrix[969] = 1.997541;
    matrix[970] = 0.000000;
    matrix[971] = 0.098829;
    matrix[972] = 0.218232;
    matrix[973] = 0.362583;
    matrix[974] = 0.536256;
    matrix[975] = 0.743625;
    matrix[976] = 0.989064;
    matrix[977] = 1.276947;
    matrix[978] = 1.611648;
    matrix[979] = 1.997541;
    matrix[980] = 0.000000;
    matrix[981] = 0.098829;
    matrix[982] = 0.218232;
    matrix[983] = 0.362583;
    matrix[984] = 0.536256;
    matrix[985] = 0.743625;
    matrix[986] = 0.989064;
    matrix[987] = 1.276947;
    matrix[988] = 1.611648;
    matrix[989] = 1.997541;
    matrix[990] = 0.000000;
    matrix[991] = 0.098829;
    matrix[992] = 0.218232;
    matrix[993] = 0.362583;
    matrix[994] = 0.536256;
    matrix[995] = 0.743625;
    matrix[996] = 0.989064;
    matrix[997] = 1.276947;
    matrix[998] = 1.611648;
    matrix[999] = 1.997541;

    // make map
    Eigen::Map<Eigen::MatrixXd> eigen_input{matrix, 10, 100};

    // default construct svd
    Eigen::BDCSVD<Eigen::MatrixXd, Eigen::ComputeThinU | Eigen::ComputeThinV> eigen_svd;
    eigen_svd.setThreshold(1.0e-10);
    
    // compute 
    eigen_svd.compute(eigen_input);

    free(matrix);
    return 0;
}

Steps to reproduce

  1. Save the above code as eigen_ub.cpp
  2. Save the following into ubsan.supp
implicit-integer-sign-change:PacketMath.h
unsigned-integer-overflow:random.tcc
  1. Compile
clang++ -std=c++17  -O3 -g -fsanitize=undefined -fsanitize=integer -fsanitize=local-bounds -fno-omit-frame-pointer -isystem./include/eigen3 -c eigen_ub.cpp -o eigen_ub.o
  1. Link
clang++  -O3 -g -fsanitize=undefined -fsanitize=integer -fsanitize=local-bounds  -o eigen_ub.exe eigen_ub.o -ldl
  1. Run with ubsan
UBSAN_OPTIONS=suppressions=ubsan.supp:print_stacktrace=1:report_error_type=1 eigen_ub.exe

What is the current bug behavior?

I ran into this while testing some matrices. The particular matrix above triggered this UB in Fill, which does not happen for other matrices of the same size. I raise this issue as it might be a symptom of a problem waiting to cause issues down the road.

../../../install/eigen_cpu/include/eigen3/Eigen/src/Core/Fill.h:87:12: runtime error: null pointer passed as argument 1, which is declared to never be null
/usr/include/string.h:61:62: note: nonnull attribute specified here
    #0 0x46f93e in Eigen::internal::eigen_zero_impl<Eigen::Block<Eigen::Matrix<double, -1, 1, 0, -1, 1>, -1, 1, false>, true>::run(Eigen::Block<Eigen::Matrix<double, -1, 1, 0, -1, 1>, -1, 1, false>&) /usr/workspace/boba_dev/boba_tpl_build_farms/nov_2024/examples/reproducers/eigen_ub/../../../install/eigen_cpu/include/eigen3/Eigen/src/Core/Fill.h:87:5
    #1 0x46f93e in Eigen::DenseBase<Eigen::Block<Eigen::Matrix<double, -1, 1, 0, -1, 1>, -1, 1, false>>::setZero() /usr/workspace/boba_dev/boba_tpl_build_farms/nov_2024/examples/reproducers/eigen_ub/../../../install/eigen_cpu/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h:551:3
    #2 0x46b8c8 in Eigen::BDCSVD<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 40>::compute_impl(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, unsigned int) /usr/workspace/boba_dev/boba_tpl_build_farms/nov_2024/examples/reproducers/eigen_ub/../../../install/eigen_cpu/include/eigen3/Eigen/src/SVD/BDCSVD.h:380:49
    #3 0x43a43e in Eigen::BDCSVD<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 40>::compute(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&) /usr/workspace/boba_dev/boba_tpl_build_farms/nov_2024/examples/reproducers/eigen_ub/../../../install/eigen_cpu/include/eigen3/Eigen/src/SVD/BDCSVD.h:194:54
    #4 0x43a43e in main /usr/workspace/boba_dev/boba_tpl_build_farms/nov_2024/examples/reproducers/eigen_ub/eigen_ub.cpp:1031:15
    #5 0x155553e157e4 in __libc_start_main (/lib64/libc.so.6+0x3a7e4) (BuildId: 37e4ac6a7fb96950b0e6bf72d73d94f3296c77eb)
    #6 0x403cdd in _start (/usr/WS1/boba_dev/boba_tpl_build_farms/nov_2024/examples/reproducers/eigen_ub/eigen_ub.exe+0x403cdd) (BuildId: cfe933cbb95a9e08c52c8e77909a94ab360e2d52)

SUMMARY: UndefinedBehaviorSanitizer: invalid-null-argument ../../../install/eigen_cpu/include/eigen3/Eigen/src/Core/Fill.h:87:12

What is the expected correct behavior?

Fix the call to the function in Fill to not have the null as required by the attributes.

Relevant logs

Posted above

Anything else that might help

  • This issue was flagged by my ub sanitizer tests when I updated from c2f15edc43367c3a11aacbb51c7431ccb5a31bb5 to 8ad4344ca79f2f248bc5ed70eec72e4b9c4d5e88
Edited by pguthrey