[llvm-commits] [llvm] r167356 - /llvm/trunk/include/llvm/Support/IntegersSubset.h
Rafael EspĂndola
rafael.espindola at gmail.com
Sun Nov 11 16:30:07 PST 2012
Hi Duncan,
I am trying to reproduce this to see if the root problem is a gcc or
clang bug, but I cannot get a failure. What I have done in checkout
167354 and run
$ cmake ../llvm/ -DCMAKE_BUILD_TYPE=Release -G Ninja
$ ninja unittests/Support/Release/SupportTests
$ valgrind ./unittests/Support/Release/SupportTests
What kind of build and which architecture are you using?
On 3 November 2012 10:04, Duncan Sands <baldrick at free.fr> wrote:
> Author: baldrick
> Date: Sat Nov 3 09:04:04 2012
> New Revision: 167356
>
> URL: http://llvm.org/viewvc/llvm-project?rev=167356&view=rev
> Log:
> Fix the IntegersSubsetTest unit test when compiled with gcc-4.7. The issue here
> is that the unit test doesn't have IntTy equal to APInt, instead it uses a class
> derived from APInt. When, as in these lines, an IntTy& reference is returned
> but is assigned to an APInt&, the compiler destroys the temporary the IntTy& was
> referring to, leaving the APInt& referring to garbage. This causes the unittest
> to fail systematically on my machine; it can also be caught by running the test
> under valgrind.
>
> Modified:
> llvm/trunk/include/llvm/Support/IntegersSubset.h
>
> Modified: llvm/trunk/include/llvm/Support/IntegersSubset.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/IntegersSubset.h?rev=167356&r1=167355&r2=167356&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/IntegersSubset.h (original)
> +++ llvm/trunk/include/llvm/Support/IntegersSubset.h Sat Nov 3 09:04:04 2012
> @@ -411,8 +411,8 @@
> unsigned getSize() const {
> APInt sz(((const APInt&)getItem(0).getLow()).getBitWidth(), 0);
> for (unsigned i = 0, e = getNumItems(); i != e; ++i) {
> - const APInt &Low = getItem(i).getLow();
> - const APInt &High = getItem(i).getHigh();
> + const APInt Low = getItem(i).getLow();
> + const APInt High = getItem(i).getHigh();
> APInt S = High - Low + 1;
> sz += S;
> }
> @@ -426,8 +426,8 @@
> APInt getSingleValue(unsigned idx) const {
> APInt sz(((const APInt&)getItem(0).getLow()).getBitWidth(), 0);
> for (unsigned i = 0, e = getNumItems(); i != e; ++i) {
> - const APInt &Low = getItem(i).getLow();
> - const APInt &High = getItem(i).getHigh();
> + const APInt Low = getItem(i).getLow();
> + const APInt High = getItem(i).getHigh();
> APInt S = High - Low + 1;
> APInt oldSz = sz;
> sz += S;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list