On Mon, 2012-01-02 at 19:10 +0100, Torvald Riegel wrote:
> - Do we potentially get unnecessary warnings (if vars are live across
> a transaction begin)? I didn't get such warnings in the STAMP app
> that wasn't working though. Does anyone has suggestions for a test
> case?
Attached is a test that raises a warning. This requires g++ and
-Wclobbered (-Wall is not sufficient), so it might still be okay until
we have a proper solution.
Interestingly (at least to me), I wasn't able to construct a test on my
own (see main2() for my attempts...), but had to web-search for one (see
main()). Is the warning actually supposed to always trigger? We only
seem to have a test for a case where there should be _no_ warning.
/* { dg-do compile } */
/* { dg-options "-fgnu-tm -Wclobbered -O" } */
#include <vector>
extern int foo(int);
extern int y;
int main2() {
int i;
int x[123];
int sum = 0;
x[5] += x[6] = 10;
for (i=0; i < 100; i++) {
__transaction_atomic {
y=12;
}
x[i] += x[5] + x[6] + i;
sum += x[i];
}
// and again, without loop.
__transaction_atomic {
y=12;
}
x[i] += x[5] + x[6] + i;
sum += x[i];
return foo(x[x[12]]) + sum;
}
int main() {
std::vector<int> foo(y);
__transaction_atomic { y = 13; }
return 1;
}