Tool/software:
Hello,
In the following example, the struct does not contain the expected values after initialization. The 10th element is not correctly initialized.
If I use float instead of double for e.g. var5, then the program prints as expected. If I replace var5 with two float var51 and var52 the program still works as expected.
Replacing the implementation in init_data.cpp with default initialization followed by per-element assignment does not fix the issue.
cl6x --help TMS320C6x C/C++ Compiler v8.3.10 Tools Copyright (c) 1996-2018 Texas Instruments Incorporated
Compilation flags. Observed at all optimization levels.
-qq -mv6600 --relaxed_ansi --define=SOC_TDA3XX --keep_unneeded_statics --diag_wrap=off --display_error_number --diag_suppress=556 --diag_suppress=2458 --mem_model:data=far --wchar_t=16 --fp_reassoc=off --float_operations_allowed=all --ramfunc=off --emit_warnings_as_errors -O3 --opt_for_speed=4 -DNDEBUG --symdebug:none --c++14
Code
init_data.hpp
#ifndef INIT_DATA_HPP_ #define INIT_DATA_HPP_ struct Data { double var1; double var2; double var3; double var4; double var5; double var6; double var7; double var8; double var9; double var10; double var11; }; Data initData(double inVar1, double inVar2, double inVar3, double inVar4, double inVar5, double inVar6, double inVar7, double inVar8, double inVar9, double inVar10, double inVar11); #endif // INIT_DATA_HPP_
init_data.cpp
#include "init_data.hpp" Data initData(double inVar1, double inVar2, double inVar3, double inVar4, double inVar5, double inVar6, double inVar7, double inVar8, double inVar9, double inVar10, double inVar11) { return {inVar1, inVar2, inVar3, inVar4, inVar5, inVar6, inVar7, inVar8, inVar9, inVar10, inVar11}; }
init_data_app.cpp
#include "application_if/application_if.hpp" #include "init_data.hpp" #include <xdc/runtime/System.h> namespace se { namespace application { void init() { Data data = initData(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0); // Prints as expected. System_printf("Result 1: %f\n", data.var1); System_printf("Result 2: %f\n", data.var2); System_printf("Result 3: %f\n", data.var3); System_printf("Result 4: %f\n", data.var4); System_printf("Result 5: %f\n", data.var5); System_printf("Result 6: %f\n", data.var6); System_printf("Result 7: %f\n", data.var7); System_printf("Result 8: %f\n", data.var8); System_printf("Result 9: %f\n", data.var9); // Prints -0.000000 instead of 10.0. System_printf("Result 10: %f\n", data.var10); // Prints 11.0 as expected. System_printf("Result 11: %f\n", data.var11); } } // namespace application } // namespace se
Output
Result 1: 1.0000 Result 2: 2.0000 Result 3: 3.0000 Result 4: 4.0000 Result 5: 5.0000 Result 6: 6.0000 Result 7: 7.0000 Result 8: 8.0000 Result 9: 9.0000 Result 10: -0.0000 Result 11: 11.0000