llvm-project/clang/lib/Frontend
Duncan P. N. Exon Smith 4a8212a488 Reapply "Frontend: Stop leaking when not -disable-free"
This reverts commit r236422, effectively reapplying r236419.  ASan
helped me diagnose the problem: the non-leaking logic would free the
ASTConsumer before freeing Sema whenever `isCurrentASTFile()`, causing a
use-after-free in `Sema::~Sema()`.

This version unconditionally frees Sema and the ASTContext before
freeing the ASTConsumer.  Without the fix, these were either being freed
before the ASTConsumer was freed or leaked after, but they were always
spiritually released so this isn't really a functionality change.

I ran all of check-clang with ASan locally this time, so I'm hoping
there aren't any more problems lurking.

Original commit message:

    Try again to plug a leak that's been around since at least r128011
    after coming across the FIXME.  Nico Weber tried something similar
    in r207065 but had to revert in r207070 due to a bot failure.

    The build failure isn't visible anymore so I'm not sure what went
    wrong.  I'm doing this slightly differently -- when not
    -disable-free I'm still resetting the members (just not leaking
    them) -- so maybe it will work out this time?  Tests pass locally,
    anyway.

llvm-svn: 236424
2015-05-04 14:59:20 +00:00
..
Rewrite Fix a few line endings. NFC. 2015-05-01 02:04:32 +00:00
ASTConsumers.cpp Remove some unused includes of llvm/IR headers from parts of Clang that really 2015-02-26 00:01:03 +00:00
ASTMerge.cpp Implemented support for testing the ASTImporter's 2015-04-28 18:24:12 +00:00
ASTUnit.cpp Return a pointer instead of having a pointer outparam and a bool return. 2015-04-10 12:54:53 +00:00
CMakeLists.txt Revert "Wrap clang module files in a Mach-O, ELF, or COFF container." 2015-02-25 02:44:04 +00:00
CacheTokens.cpp Use raw_pwrite_stream in clang. 2015-04-14 15:15:49 +00:00
ChainedDiagnosticConsumer.cpp Remove spurious mode marker from .cpp file. 2012-10-29 06:05:01 +00:00
ChainedIncludesSource.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:00:23 +00:00
CodeGenOptions.cpp [cleanup] Re-sort *all* #include lines with llvm/utils/sort_includes.py 2015-01-14 11:29:14 +00:00
CompilerInstance.cpp [modules] Start moving the module visibility information off the Module itself. 2015-05-01 01:53:09 +00:00
CompilerInvocation.cpp [modules] Add -fmodules-local-submodule-visibility flag. 2015-05-01 21:22:17 +00:00
CreateInvocationFromCommandLine.cpp Driver: Use pointee_iterator rather than iterating over unique_ptrs 2014-10-03 01:04:53 +00:00
DependencyFile.cpp Support generating NMake/Jom-style depfiles. 2015-04-27 18:14:32 +00:00
DependencyGraph.cpp Unique_ptrify PPCallbacks ownership. 2014-09-10 04:53:53 +00:00
DiagnosticRenderer.cpp Simplify creation of a bunch of ArrayRefs by using None, makeArrayRef or just letting them be implicitly created. 2014-08-27 06:28:36 +00:00
FrontendAction.cpp Reapply "Frontend: Stop leaking when not -disable-free" 2015-05-04 14:59:20 +00:00
FrontendActions.cpp Use raw_pwrite_stream in clang. 2015-04-14 15:15:49 +00:00
FrontendOptions.cpp Ensure that we still parse preprocessed CUDA files as CUDA when we use 2015-03-19 17:32:06 +00:00
HeaderIncludeGen.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:00:23 +00:00
InitHeaderSearch.cpp Add driver support for Native Client SDK 2015-03-30 20:31:33 +00:00
InitPreprocessor.cpp Add C11 *_DECIMAL_DIG. 2015-02-23 09:12:31 +00:00
LangStandards.cpp [C++11] Use 'nullptr'. Frontend edition. 2014-05-22 04:46:25 +00:00
LayoutOverrideSource.cpp Excise <cctype> from Clang (except clang-tblgen) in favor of CharInfo.h. 2013-02-08 22:30:41 +00:00
LogDiagnosticPrinter.cpp Add DiagID and Warning Flag to DiagnosticsLog 2014-11-14 21:23:56 +00:00
Makefile Make clang's rewrite engine a core feature 2014-07-16 16:48:33 +00:00
ModuleDependencyCollector.cpp Remove many superfluous SmallString::str() calls. 2015-03-18 10:17:07 +00:00
MultiplexConsumer.cpp Rename MacroDefinition -> MacroDefinitionRecord, Preprocessor::MacroDefinition -> MacroDefinition. 2015-05-04 02:25:31 +00:00
PrintPreprocessedOutput.cpp Switch PPCallbacks to take the new MacroDefinition instead of MacroDirective*, in order to preserve full information on module macro expansion. 2015-05-04 03:15:40 +00:00
SerializedDiagnosticPrinter.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:00:23 +00:00
SerializedDiagnosticReader.cpp [cleanup] Re-sort *all* #include lines with llvm/utils/sort_includes.py 2015-01-14 11:29:14 +00:00
TextDiagnostic.cpp The prefix 'Ms-' should be 'MS-' 2015-02-02 19:30:52 +00:00
TextDiagnosticBuffer.cpp Support 'remark' in VerifyDiagnosticConsumer 2014-05-01 14:06:01 +00:00
TextDiagnosticPrinter.cpp Remove uses of the redundant ".reset(nullptr)" of unique_ptr, in favor of ".reset()" 2014-07-19 01:06:45 +00:00
VerifyDiagnosticConsumer.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:00:23 +00:00