[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