[Bug 1835536] Re: Stack-located variable is overwritten unexpectedly

Alexey Kozin 1835536 at bugs.launchpad.net
Sun Jul 7 12:47:54 UTC 2019


** Changed in: gcc-7 (Ubuntu)
       Status: New => Invalid

-- 
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:
  Invalid

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