[Bug 1835536] [NEW] Stack-located variable is overwritten unexpectedly
Alexey Kozin
1835536 at bugs.launchpad.net
Fri Jul 5 13:17:22 UTC 2019
Public bug reported:
May be I made a mistake in the code, but the situation looks like a bug.
The problem belongs to gcc-7 and gcc-8.
Local variable E is created. The constructor successfully fills the
field E.t2.number with the value of -1.0.
After calling of an empty function with a const reference to tuple, the
value of E.t2.number is overwritten unexpectedly. The attached code
stores the value of E.t2.number before calling and after calling of an
empty function and then prints both.
The following line is printed with the preprocessed code attached:
v_before=-1.000000, v_after=0.000000
Compilation under Release configuration in Eclipse CDT generates another code. In this situation the variable E.t2.number is not initialized properly. In this case the following result is printed:
v_before=0.000000, v_after=0.000000
Unfortunately, I failed to create such preprocessed code. If I use -E option and links the prerocessed code with g++-8, the value is initialized with -1.0 successfully and it corrupts only after the calling of an empty function.
The suspicious code:
...
void func(const std::tuple<int>& t)
{
}
int main()
{
...
auto E=A(I,J)-B(J,I);
double v_before=E.t2.number;
func(std::tuple<int>(1));
double v_after=E.t2.number;
printf("v_before=%lf, v_after=%lf\n",v_before, v_after);
}
** Affects: gcc-7 (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-7 in Ubuntu.
https://bugs.launchpad.net/bugs/1835536
Title:
Stack-located variable is overwritten unexpectedly
Status in gcc-7 package in Ubuntu:
New
Bug description:
May be I made a mistake in the code, but the situation looks like a
bug. The problem belongs to gcc-7 and gcc-8.
Local variable E is created. The constructor successfully fills the
field E.t2.number with the value of -1.0.
After calling of an empty function with a const reference to tuple,
the value of E.t2.number is overwritten unexpectedly. The attached
code stores the value of E.t2.number before calling and after calling
of an empty function and then prints both.
The following line is printed with the preprocessed code attached:
v_before=-1.000000, v_after=0.000000
Compilation under Release configuration in Eclipse CDT generates another code. In this situation the variable E.t2.number is not initialized properly. In this case the following result is printed:
v_before=0.000000, v_after=0.000000
Unfortunately, I failed to create such preprocessed code. If I use -E option and links the prerocessed code with g++-8, the value is initialized with -1.0 successfully and it corrupts only after the calling of an empty function.
The suspicious code:
...
void func(const std::tuple<int>& t)
{
}
int main()
{
...
auto E=A(I,J)-B(J,I);
double v_before=E.t2.number;
func(std::tuple<int>(1));
double v_after=E.t2.number;
printf("v_before=%lf, v_after=%lf\n",v_before, v_after);
}
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-7/+bug/1835536/+subscriptions
More information about the foundations-bugs
mailing list