[llvm] r360675 - [APFloat] APFloat::Storage::Storage - fix use after move

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Tue May 14 12:50:00 PDT 2019


Declaring a local variable of type fltSemantics is likely to lead to a use-after-free; I'm surprised you aren't seeing any issues.  Should be "const fltSemantics&".

-Eli

> -----Original Message-----
> From: llvm-commits <llvm-commits-bounces at lists.llvm.org> On Behalf Of
> Simon Pilgrim via llvm-commits
> Sent: Tuesday, May 14, 2019 7:14 AM
> To: llvm-commits at lists.llvm.org
> Subject: [EXT] [llvm] r360675 - [APFloat] APFloat::Storage::Storage - fix use after
> move
> 
> Author: rksimon
> Date: Tue May 14 07:13:30 2019
> New Revision: 360675
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=360675&view=rev
> Log:
> [APFloat] APFloat::Storage::Storage - fix use after move
> 
> This was mentioned both in https://www.viva64.com/en/b/0629/ and by scan-
> build checks
> 
> Modified:
>     llvm/trunk/lib/Support/APFloat.cpp
> 
> Modified: llvm/trunk/lib/Support/APFloat.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/Support/APFloat.cpp?rev=360675&r1=360674&r2=36067
> 5&view=diff
> =================================================================
> =============
> --- llvm/trunk/lib/Support/APFloat.cpp (original)
> +++ llvm/trunk/lib/Support/APFloat.cpp Tue May 14 07:13:30 2019
> @@ -4418,9 +4418,9 @@ APFloat::Storage::Storage(IEEEFloat F, c
>      return;
>    }
>    if (usesLayout<DoubleAPFloat>(Semantics)) {
> -    new (&Double)
> -        DoubleAPFloat(Semantics, APFloat(std::move(F), F.getSemantics()),
> -                      APFloat(semIEEEdouble));
> +    const fltSemantics IEEESemantics = F.getSemantics();
> +    new (&Double) DoubleAPFloat(Semantics, APFloat(std::move(F),
> IEEESemantics),
> +                                APFloat(semIEEEdouble));
>      return;
>    }
>    llvm_unreachable("Unexpected semantics");
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list