[llvm-commits] [llvm] r159614 - /llvm/trunk/lib/CodeGen/Passes.cpp

Bob Wilson bob.wilson at apple.com
Tue Jul 3 08:44:59 PDT 2012


Whoa, I totally missed that.  Thanks to ASan (and Chandler, for fixing it)!

On Jul 2, 2012, at 3:56 PM, Chandler Carruth <chandlerc at gmail.com> wrote:

> Author: chandlerc
> Date: Mon Jul  2 17:56:41 2012
> New Revision: 159614
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=159614&view=rev
> Log:
> All glory to address sanitizer. ;]
> 
> It appears to have caught a use-after-free introduced as by r159567
> and/or friends which call 'addPass' from many more places. The bug in
> 'addPass' doesn't appear to be new, and was spotted by inspection when
> ASan shown a bright light of a stacktrace at these functions.
> 
> Hopefully this will fix the ASan failure -- I have no test case other
> than running an ASan-built clang over the test suite.
> 
> Modified:
>    llvm/trunk/lib/CodeGen/Passes.cpp
> 
> Modified: llvm/trunk/lib/CodeGen/Passes.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Passes.cpp?rev=159614&r1=159613&r2=159614&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/Passes.cpp (original)
> +++ llvm/trunk/lib/CodeGen/Passes.cpp Mon Jul  2 17:56:41 2012
> @@ -280,11 +280,17 @@
> void TargetPassConfig::addPass(Pass *P) {
>   assert(!Initialized && "PassConfig is immutable");
> 
> +  // Cache the Pass ID here in case the pass manager finds this pass is
> +  // redundant with ones already scheduled / available, and deletes it.
> +  // Fundamentally, once we add the pass to the manager, we no longer own it
> +  // and shouldn't reference it.
> +  AnalysisID PassID = P->getPassID();
> +
>   if (Started && !Stopped)
>     PM->add(P);
> -  if (StopAfter == P->getPassID())
> +  if (StopAfter == PassID)
>     Stopped = true;
> -  if (StartAfter == P->getPassID())
> +  if (StartAfter == PassID)
>     Started = true;
>   if (Stopped && !Started)
>     report_fatal_error("Cannot stop compilation after pass that is not run");
> 
> 
> _______________________________________________
> 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