[LLVMdev] A bug or a feature?
David Blaikie
dblaikie at gmail.com
Mon Mar 10 16:34:00 PDT 2014
On Mon, Mar 10, 2014 at 4:24 PM, Anton Yartsev <anton.yartsev at gmail.com> wrote:
> Hi,
>
> I've run Clang Static Analyzer checker alpha.cplusplus.NewDeleteLeaks over
> LLVM codebase to detect false-positives and at the same time eliminate
> memory leaks. The majority of leaks were detected in lib/Target/* and
> lib/MC/*. In all cases the similar trick was detected as a leak (example
> from lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp) :
>
> static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
> MCContext &Context, MCAsmBackend &MAB,
> raw_ostream &OS, MCCodeEmitter *Emitter,
> const MCSubtargetInfo &STI, bool
> RelaxAll,
> bool NoExecStack) {
> MCStreamer *S =
> createELFStreamer(Context, MAB, OS, Emitter, RelaxAll, NoExecStack);
> new SparcTargetELFStreamer(*S);
>
> 1 Memory is allocated →
>
> return S;
>
> 2 ← Potential memory leak
> }
>
> Have not got why is this SparcTargetELFStreamer created dynamically and not
> assigned.
> Can anybody please explain is this a trick or a trouble?
It's a trick - if you look at the MCTargetStreamer ctor (which
SparcTargetELFStreamer derives from you'll see this:
MCTargetStreamer::MCTargetStreamer(MCStreamer &S) : Streamer(S) {
S.setTargetStreamer(this);
}
So it didn't actually leak... the MCStreamer ('S' in the function you
showed above) took ownership of the object.
>
> The similar pattern was detected in
> lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
> lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp
> lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
> lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
> lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp
> lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
> lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp
> lib/MC/MCELFStreamer.cpp
> lib/MC/WinCOFFStreamer.cpp
> lib/MC/MCMachOStreamer.cpp
>
> --
> Anton
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list