http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56419



             Bug #: 56419

           Summary: [4.8 regression] transactions in for-loops disappear

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: torv...@gcc.gnu.org

                CC: al...@gcc.gnu.org, sp...@cse.lehigh.edu





Transaction statements in for-loops don't show up in Gimple.  For example:



int x = 0;

int inc_func(int i) {

     for (int j = 0; j < i; ++j)

     {

         __transaction_atomic { x+=1; }

     }

     return 0;

}



g++ -v -O0 test.cc -c -fgnu-tm -fdump-tree-all -Wall

leads to the following test.cc.004t.gimple:



int inc_func(int) (int i)

{

  int D.2360;



  {

    int j;



    j = 0;

    goto <D.2358>;

    <D.2357>:

    j = j + 1;

    <D.2358>:

    if (j < i) goto <D.2357>; else goto <D.2355>;

    <D.2355>:

  }

  D.2360 = 0;

  return D.2360;

}



This does work when using the C frontend.  Seems to also work when the

transaction is in while loops or on an if-branch.  Doesn't seem to be sensitive

to which C++ standard is requested.



Originally reported by Mike Spear.  Mike says this works with 4.7.2, but

doesn't with g++ (GCC) 4.8.0 20130221 (experimental) (revision 

196192).  I've confirmed with an early-December build.

Reply via email to