[cfe-commits] r146959 - in /cfe/trunk: include/clang/AST/ include/clang/Analysis/Analyses/ include/clang/Basic/ include/clang/CodeGen/ include/clang/Driver/ include/clang/Frontend/ include/clang/Lex/ include/clang/Sema/ include/clang/StaticAnalyzer/Core/ include/clang/StaticAnalyzer/Core/BugReporter/ include/clang/StaticAnalyzer/Core/PathSensitive/ lib/AST/ lib/Analysis/ lib/Basic/ lib/CodeGen/ lib/Driver/ lib/Frontend/ lib/Lex/ lib/Parse/ lib/Sema/ lib/StaticAnalyzer/Core/ utils/TableGen/

Ted Kremenek kremenek at apple.com
Mon Dec 19 20:36:11 PST 2011


Apparently I didn't see that Chris approved the change.  I really think this warrants more discussion.  Is there really no way we can do better?

On Dec 19, 2011, at 8:33 PM, Ted Kremenek wrote:

> Hi David,
> 
> I'm sorry to come down hard here, but I really don't like the idea of adding a fake method just unweaken the vtables.  Can we just move the offending virtual methods out-of-line?  Having weak vtables is one thing; have a dead method permanently embedded in that vtable is another.  We've now just increased the size of the clang executable (and make the code less pretty) just to perform this build-time optimization.
> 
> I'm going to revert this change.
> 
> Ted
> 
> On Dec 19, 2011, at 6:48 PM, David Blaikie wrote:
> 
>> Author: dblaikie
>> Date: Mon Dec 19 20:48:34 2011
>> New Revision: 146959
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=146959&view=rev
>> Log:
>> Unweaken vtables as per http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
>> 
>> Added:
>>   cfe/trunk/lib/Analysis/Dominators.cpp
>>   cfe/trunk/lib/Frontend/ChainedDiagnosticConsumer.cpp
>>   cfe/trunk/lib/Lex/PPCallbacks.cpp
>>   cfe/trunk/lib/Sema/SemaConsumer.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/SubEngine.cpp
>> Modified:
>>   cfe/trunk/include/clang/AST/Attr.h
>>   cfe/trunk/include/clang/AST/Decl.h
>>   cfe/trunk/include/clang/AST/DeclCXX.h
>>   cfe/trunk/include/clang/AST/DeclFriend.h
>>   cfe/trunk/include/clang/AST/DeclObjC.h
>>   cfe/trunk/include/clang/AST/DeclTemplate.h
>>   cfe/trunk/include/clang/AST/ExprCXX.h
>>   cfe/trunk/include/clang/AST/Mangle.h
>>   cfe/trunk/include/clang/Analysis/Analyses/Dominators.h
>>   cfe/trunk/include/clang/Analysis/Analyses/LiveVariables.h
>>   cfe/trunk/include/clang/Analysis/Analyses/PostOrderCFGView.h
>>   cfe/trunk/include/clang/Analysis/Analyses/ReachableCode.h
>>   cfe/trunk/include/clang/Basic/Diagnostic.h
>>   cfe/trunk/include/clang/Basic/FileSystemStatCache.h
>>   cfe/trunk/include/clang/CodeGen/CodeGenAction.h
>>   cfe/trunk/include/clang/CodeGen/ModuleBuilder.h
>>   cfe/trunk/include/clang/Driver/Action.h
>>   cfe/trunk/include/clang/Driver/Job.h
>>   cfe/trunk/include/clang/Frontend/ChainedDiagnosticConsumer.h
>>   cfe/trunk/include/clang/Frontend/FrontendAction.h
>>   cfe/trunk/include/clang/Lex/Lexer.h
>>   cfe/trunk/include/clang/Lex/PPCallbacks.h
>>   cfe/trunk/include/clang/Lex/PreprocessorLexer.h
>>   cfe/trunk/include/clang/Sema/SemaConsumer.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/Checker.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
>>   cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h
>>   cfe/trunk/lib/AST/AttrImpl.cpp
>>   cfe/trunk/lib/AST/Decl.cpp
>>   cfe/trunk/lib/AST/DeclCXX.cpp
>>   cfe/trunk/lib/AST/DeclFriend.cpp
>>   cfe/trunk/lib/AST/DeclObjC.cpp
>>   cfe/trunk/lib/AST/DeclTemplate.cpp
>>   cfe/trunk/lib/AST/ExprCXX.cpp
>>   cfe/trunk/lib/AST/Mangle.cpp
>>   cfe/trunk/lib/Analysis/LiveVariables.cpp
>>   cfe/trunk/lib/Analysis/PostOrderCFGView.cpp
>>   cfe/trunk/lib/Analysis/ReachableCode.cpp
>>   cfe/trunk/lib/Basic/Diagnostic.cpp
>>   cfe/trunk/lib/Basic/FileSystemStatCache.cpp
>>   cfe/trunk/lib/CodeGen/CodeGenAction.cpp
>>   cfe/trunk/lib/CodeGen/ModuleBuilder.cpp
>>   cfe/trunk/lib/Driver/Action.cpp
>>   cfe/trunk/lib/Driver/Job.cpp
>>   cfe/trunk/lib/Driver/ToolChains.cpp
>>   cfe/trunk/lib/Driver/ToolChains.h
>>   cfe/trunk/lib/Driver/Tools.cpp
>>   cfe/trunk/lib/Driver/Tools.h
>>   cfe/trunk/lib/Frontend/FrontendAction.cpp
>>   cfe/trunk/lib/Lex/Lexer.cpp
>>   cfe/trunk/lib/Lex/PreprocessorLexer.cpp
>>   cfe/trunk/lib/Parse/ParseObjc.cpp
>>   cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/AnalysisManager.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/Checker.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp
>>   cfe/trunk/lib/StaticAnalyzer/Core/SymbolManager.cpp
>>   cfe/trunk/utils/TableGen/TableGen.cpp
>> 
>> Modified: cfe/trunk/include/clang/AST/Attr.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Attr.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/Attr.h (original)
>> +++ cfe/trunk/include/clang/AST/Attr.h Mon Dec 19 20:48:34 2011
>> @@ -112,6 +112,7 @@
>> };
>> 
>> class InheritableAttr : public Attr {
>> +  virtual void anchor();
>> protected:
>>  InheritableAttr(attr::Kind AK, SourceRange R)
>>    : Attr(AK, R) {}
>> @@ -127,6 +128,7 @@
>> };
>> 
>> class InheritableParamAttr : public InheritableAttr {
>> +  virtual void anchor();
>> protected:
>>  InheritableParamAttr(attr::Kind AK, SourceRange R)
>>    : InheritableAttr(AK, R) {}
>> 
>> Modified: cfe/trunk/include/clang/AST/Decl.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/Decl.h (original)
>> +++ cfe/trunk/include/clang/AST/Decl.h Mon Dec 19 20:48:34 2011
>> @@ -67,6 +67,7 @@
>> 
>> /// TranslationUnitDecl - The top declaration context.
>> class TranslationUnitDecl : public Decl, public DeclContext {
>> +  virtual void anchor();
>>  ASTContext &Ctx;
>> 
>>  /// The (most recently entered) anonymous namespace for this
>> @@ -99,6 +100,7 @@
>> /// NamedDecl - This represents a decl with a name.  Many decls have names such
>> /// as ObjCMethodDecl, but not @class, etc.
>> class NamedDecl : public Decl {
>> +  virtual void anchor();
>>  /// Name - The name of this declaration, which is typically a normal
>>  /// identifier but may also be a special kind of name (C++
>>  /// constructor, Objective-C selector, etc.)
>> @@ -320,6 +322,7 @@
>> /// location of the statement.  For GNU local labels (__label__), the decl
>> /// location is where the __label__ is.
>> class LabelDecl : public NamedDecl {
>> +  virtual void anchor();
>>  LabelStmt *TheStmt;
>>  /// LocStart - For normal labels, this is the same as the main declaration
>>  /// label, i.e., the location of the identifier; for GNU local labels,
>> @@ -355,6 +358,7 @@
>> 
>> /// NamespaceDecl - Represent a C++ namespace.
>> class NamespaceDecl : public NamedDecl, public DeclContext {
>> +  virtual void anchor();
>>  bool IsInline : 1;
>> 
>>  /// LocStart - The starting location of the source range, pointing
>> @@ -498,6 +502,7 @@
>> /// an lvalue) a function (in which case it is a function designator) or
>> /// an enum constant.
>> class ValueDecl : public NamedDecl {
>> +  virtual void anchor();
>>  QualType DeclType;
>> 
>> protected:
>> @@ -1137,6 +1142,7 @@
>> };
>> 
>> class ImplicitParamDecl : public VarDecl {
>> +  virtual void anchor();
>> public:
>>  static ImplicitParamDecl *Create(ASTContext &C, DeclContext *DC,
>>                                   SourceLocation IdLoc, IdentifierInfo *Id,
>> @@ -2140,6 +2146,7 @@
>> /// field injected from an anonymous union/struct into the parent scope.
>> /// IndirectFieldDecl are always implicit.
>> class IndirectFieldDecl : public ValueDecl {
>> +  virtual void anchor();
>>  NamedDecl **Chaining;
>>  unsigned ChainingSize;
>> 
>> @@ -2179,6 +2186,7 @@
>> /// TypeDecl - Represents a declaration of a type.
>> ///
>> class TypeDecl : public NamedDecl {
>> +  virtual void anchor();
>>  /// TypeForDecl - This indicates the Type object that represents
>>  /// this TypeDecl.  It is a cache maintained by
>>  /// ASTContext::getTypedefType, ASTContext::getTagDeclType, and
>> @@ -2220,6 +2228,7 @@
>> 
>> /// Base class for declarations which introduce a typedef-name.
>> class TypedefNameDecl : public TypeDecl, public Redeclarable<TypedefNameDecl> {
>> +  virtual void anchor();
>>  /// UnderlyingType - This is the type the typedef is set to.
>>  TypeSourceInfo *TInfo;
>> 
>> @@ -2547,6 +2556,7 @@
>> /// EnumDecl - Represents an enum.  As an extension, we allow forward-declared
>> /// enums.
>> class EnumDecl : public TagDecl {
>> +  virtual void anchor();
>>  /// IntegerType - This represent the integer type that the enum corresponds
>>  /// to for code generation purposes.  Note that the enumerator constants may
>>  /// have a different type than this does.
>> @@ -2866,6 +2876,7 @@
>> };
>> 
>> class FileScopeAsmDecl : public Decl {
>> +  virtual void anchor();
>>  StringLiteral *AsmString;
>>  SourceLocation RParenLoc;
>>  FileScopeAsmDecl(DeclContext *DC, StringLiteral *asmstring,
>> 
>> Modified: cfe/trunk/include/clang/AST/DeclCXX.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/DeclCXX.h (original)
>> +++ cfe/trunk/include/clang/AST/DeclCXX.h Mon Dec 19 20:48:34 2011
>> @@ -104,6 +104,7 @@
>> /// Also note that this class has nothing to do with so-called
>> /// "access declarations" (C++98 11.3 [class.access.dcl]).
>> class AccessSpecDecl : public Decl {
>> +  virtual void anchor();
>>  /// ColonLoc - The location of the ':'.
>>  SourceLocation ColonLoc;
>> 
>> @@ -1316,6 +1317,7 @@
>> /// CXXMethodDecl - Represents a static or instance method of a
>> /// struct/union/class.
>> class CXXMethodDecl : public FunctionDecl {
>> +  virtual void anchor();
>> protected:
>>  CXXMethodDecl(Kind DK, CXXRecordDecl *RD, SourceLocation StartLoc,
>>                const DeclarationNameInfo &NameInfo,
>> @@ -1325,9 +1327,9 @@
>>    : FunctionDecl(DK, RD, StartLoc, NameInfo, T, TInfo,
>>                   (isStatic ? SC_Static : SC_None),
>>                   SCAsWritten, isInline, isConstexpr) {
>> -      if (EndLocation.isValid())
>> -        setRangeEnd(EndLocation);
>> -    }
>> +    if (EndLocation.isValid())
>> +      setRangeEnd(EndLocation);
>> +  }
>> 
>> public:
>>  static CXXMethodDecl *Create(ASTContext &C, CXXRecordDecl *RD,
>> @@ -1690,6 +1692,7 @@
>> /// };
>> /// @endcode
>> class CXXConstructorDecl : public CXXMethodDecl {
>> +  virtual void anchor();
>>  /// IsExplicitSpecified - Whether this constructor declaration has the
>>  /// 'explicit' keyword specified.
>>  bool IsExplicitSpecified : 1;
>> @@ -1918,6 +1921,7 @@
>> /// };
>> /// @endcode
>> class CXXDestructorDecl : public CXXMethodDecl {
>> +  virtual void anchor();
>>  /// ImplicitlyDefined - Whether this destructor was implicitly
>>  /// defined by the compiler. When false, the destructor was defined
>>  /// by the user. In C++03, this flag will have the same value as
>> @@ -1989,6 +1993,7 @@
>> /// };
>> /// @endcode
>> class CXXConversionDecl : public CXXMethodDecl {
>> +  virtual void anchor();
>>  /// IsExplicitSpecified - Whether this conversion function declaration is
>>  /// marked "explicit", meaning that it can only be applied when the user
>>  /// explicitly wrote a cast. This is a C++0x feature.
>> @@ -2045,6 +2050,7 @@
>> ///   extern "C" void foo();
>> ///
>> class LinkageSpecDecl : public Decl, public DeclContext {
>> +  virtual void anchor();
>> public:
>>  /// LanguageIDs - Used to represent the language in a linkage
>>  /// specification.  The values are part of the serialization abi for
>> @@ -2117,9 +2123,10 @@
>> ///    using namespace std;
>> ///
>> // NB: UsingDirectiveDecl should be Decl not NamedDecl, but we provide
>> -// artificial name, for all using-directives in order to store
>> +// artificial names for all using-directives in order to store
>> // them in DeclContext effectively.
>> class UsingDirectiveDecl : public NamedDecl {
>> +  virtual void anchor();
>>  /// \brief The location of the "using" keyword.
>>  SourceLocation UsingLoc;
>> 
>> @@ -2219,6 +2226,8 @@
>> /// namespace Foo = Bar;
>> /// @endcode
>> class NamespaceAliasDecl : public NamedDecl {
>> +  virtual void anchor();
>> +
>>  /// \brief The location of the "namespace" keyword.
>>  SourceLocation NamespaceLoc;
>> 
>> @@ -2308,6 +2317,8 @@
>> /// }
>> ///
>> class UsingShadowDecl : public NamedDecl {
>> +  virtual void anchor();
>> +
>>  /// The referenced declaration.
>>  NamedDecl *Underlying;
>> 
>> @@ -2367,6 +2378,8 @@
>> /// UsingDecl - Represents a C++ using-declaration. For example:
>> ///    using someNameSpace::someIdentifier;
>> class UsingDecl : public NamedDecl {
>> +  virtual void anchor();
>> +
>>  /// \brief The source location of the "using" location itself.
>>  SourceLocation UsingLocation;
>> 
>> @@ -2497,6 +2510,8 @@
>> ///   using Base<T>::foo;
>> /// };
>> class UnresolvedUsingValueDecl : public ValueDecl {
>> +  virtual void anchor();
>> +
>>  /// \brief The source location of the 'using' keyword
>>  SourceLocation UsingLocation;
>> 
>> @@ -2564,6 +2579,8 @@
>> /// The type associated with a unresolved using typename decl is
>> /// currently always a typename type.
>> class UnresolvedUsingTypenameDecl : public TypeDecl {
>> +  virtual void anchor();
>> +
>>  /// \brief The source location of the 'using' keyword
>>  SourceLocation UsingLocation;
>> 
>> @@ -2612,6 +2629,7 @@
>> 
>> /// StaticAssertDecl - Represents a C++0x static_assert declaration.
>> class StaticAssertDecl : public Decl {
>> +  virtual void anchor();
>>  Expr *AssertExpr;
>>  StringLiteral *Message;
>>  SourceLocation RParenLoc;
>> 
>> Modified: cfe/trunk/include/clang/AST/DeclFriend.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclFriend.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/DeclFriend.h (original)
>> +++ cfe/trunk/include/clang/AST/DeclFriend.h Mon Dec 19 20:48:34 2011
>> @@ -35,6 +35,7 @@
>> ///
>> /// The semantic context of a friend decl is its declaring class.
>> class FriendDecl : public Decl {
>> +  virtual void anchor();
>> public:
>>  typedef llvm::PointerUnion<NamedDecl*,TypeSourceInfo*> FriendUnion;
>> 
>> 
>> Modified: cfe/trunk/include/clang/AST/DeclObjC.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/DeclObjC.h (original)
>> +++ cfe/trunk/include/clang/AST/DeclObjC.h Mon Dec 19 20:48:34 2011
>> @@ -426,6 +426,8 @@
>> /// ObjCProtocolDecl, and ObjCImplDecl.
>> ///
>> class ObjCContainerDecl : public NamedDecl, public DeclContext {
>> +  virtual void anchor();
>> +
>>  SourceLocation AtStart;
>> 
>>  // These two locations in the range mark the end of the method container.
>> @@ -542,6 +544,8 @@
>> ///
>> class ObjCInterfaceDecl : public ObjCContainerDecl
>>                        , public Redeclarable<ObjCInterfaceDecl> {
>> +  virtual void anchor();
>> +
>>  /// TypeForDecl - This indicates the Type object that represents this
>>  /// TypeDecl.  It is a cache maintained by ASTContext::getObjCInterfaceType
>>  mutable const Type *TypeForDecl;
>> @@ -949,6 +953,8 @@
>> ///   }
>> ///
>> class ObjCIvarDecl : public FieldDecl {
>> +  virtual void anchor();
>> +
>> public:
>>  enum AccessControl {
>>    None, Private, Protected, Public, Package
>> @@ -1010,7 +1016,7 @@
>> /// ObjCAtDefsFieldDecl - Represents a field declaration created by an
>> ///  @defs(...).
>> class ObjCAtDefsFieldDecl : public FieldDecl {
>> -private:
>> +  virtual void anchor();
>>  ObjCAtDefsFieldDecl(DeclContext *DC, SourceLocation StartLoc,
>>                      SourceLocation IdLoc, IdentifierInfo *Id,
>>                      QualType T, Expr *BW)
>> @@ -1055,6 +1061,8 @@
>> /// id <NSDraggingInfo> anyObjectThatImplementsNSDraggingInfo;
>> ///
>> class ObjCProtocolDecl : public ObjCContainerDecl {
>> +  virtual void anchor();
>> +
>>  /// Referenced protocols
>>  ObjCProtocolList ReferencedProtocols;
>> 
>> @@ -1173,6 +1181,8 @@
>> /// @protocol NSTextInput, NSChangeSpelling, NSDraggingInfo;
>> ///
>> class ObjCForwardProtocolDecl : public Decl {
>> +  virtual void anchor();
>> +
>>  ObjCProtocolList ReferencedProtocols;
>> 
>>  ObjCForwardProtocolDecl(DeclContext *DC, SourceLocation L,
>> @@ -1232,6 +1242,8 @@
>> /// don't support this level of dynamism, which is both powerful and dangerous.
>> ///
>> class ObjCCategoryDecl : public ObjCContainerDecl {
>> +  virtual void anchor();
>> +
>>  /// Interface belonging to this category
>>  ObjCInterfaceDecl *ClassInterface;
>> 
>> @@ -1328,6 +1340,8 @@
>> };
>> 
>> class ObjCImplDecl : public ObjCContainerDecl {
>> +  virtual void anchor();
>> +
>>  /// Class interface for this class/category implementation
>>  ObjCInterfaceDecl *ClassInterface;
>> 
>> @@ -1391,6 +1405,8 @@
>> ///
>> /// ObjCCategoryImplDecl
>> class ObjCCategoryImplDecl : public ObjCImplDecl {
>> +  virtual void anchor();
>> +
>>  // Category name
>>  IdentifierInfo *Id;
>> 
>> @@ -1479,6 +1495,7 @@
>> /// specified, they need to be *identical* to the interface.
>> ///
>> class ObjCImplementationDecl : public ObjCImplDecl {
>> +  virtual void anchor();
>>  /// Implementation Class's super class.
>>  ObjCInterfaceDecl *SuperClass;
>>  /// Support for ivar initialization.
>> @@ -1609,6 +1626,7 @@
>> /// ObjCCompatibleAliasDecl - Represents alias of a class. This alias is
>> /// declared as @compatibility_alias alias class.
>> class ObjCCompatibleAliasDecl : public NamedDecl {
>> +  virtual void anchor();
>>  /// Class that this is an alias of.
>>  ObjCInterfaceDecl *AliasedClass;
>> 
>> @@ -1635,6 +1653,7 @@
>> /// @property (assign, readwrite) int MyProperty;
>> ///
>> class ObjCPropertyDecl : public NamedDecl {
>> +  virtual void anchor();
>> public:
>>  enum PropertyAttributeKind {
>>    OBJC_PR_noattr    = 0x00,
>> 
>> Modified: cfe/trunk/include/clang/AST/DeclTemplate.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclTemplate.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/DeclTemplate.h (original)
>> +++ cfe/trunk/include/clang/AST/DeclTemplate.h Mon Dec 19 20:48:34 2011
>> @@ -198,6 +198,7 @@
>> /// parameters and a reference to the templated scoped declaration: the
>> /// underlying AST node.
>> class TemplateDecl : public NamedDecl {
>> +  virtual void anchor();
>> protected:
>>  // This is probably never used.
>>  TemplateDecl(Kind DK, DeclContext *DC, SourceLocation L,
>> @@ -1201,6 +1202,7 @@
>> /// name of a template and the template parameters allowable for substitution.
>> class TemplateTemplateParmDecl
>>  : public TemplateDecl, protected TemplateParmPosition {
>> +  virtual void anchor();
>> 
>>  /// DefaultArgument - The default template argument, if any.
>>  TemplateArgumentLoc DefaultArgument;
>> @@ -1561,6 +1563,8 @@
>> 
>> class ClassTemplatePartialSpecializationDecl
>>  : public ClassTemplateSpecializationDecl {
>> +  virtual void anchor();
>> +
>>  /// \brief The list of template parameters
>>  TemplateParameterList* TemplateParams;
>> 
>> @@ -1941,6 +1945,7 @@
>> /// NOTE: This class is not currently in use.  All of the above
>> /// will yield a FriendDecl, not a FriendTemplateDecl.
>> class FriendTemplateDecl : public Decl {
>> +  virtual void anchor();
>> public:
>>  typedef llvm::PointerUnion<NamedDecl*,TypeSourceInfo*> FriendUnion;
>> 
>> @@ -2107,7 +2112,8 @@
>> /// CXXMethodDecl. Then during an instantiation of class A, it will be
>> /// transformed into an actual function specialization.
>> class ClassScopeFunctionSpecializationDecl : public Decl {
>> -private:
>> +  virtual void anchor();
>> +
>>  ClassScopeFunctionSpecializationDecl(DeclContext *DC, SourceLocation Loc,
>>                                       CXXMethodDecl *FD)
>>    : Decl(Decl::ClassScopeFunctionSpecialization, DC, Loc),
>> 
>> Modified: cfe/trunk/include/clang/AST/ExprCXX.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExprCXX.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/ExprCXX.h (original)
>> +++ cfe/trunk/include/clang/AST/ExprCXX.h Mon Dec 19 20:48:34 2011
>> @@ -1643,6 +1643,8 @@
>> /// __array_rank(int[10][20]) == 2
>> /// __array_extent(int, 1)    == 20
>> class ArrayTypeTraitExpr : public Expr {
>> +  virtual void anchor();
>> +
>>  /// ATT - The trait. An ArrayTypeTrait enum in MSVC compat unsigned.
>>  unsigned ATT : 2;
>> 
>> 
>> Modified: cfe/trunk/include/clang/AST/Mangle.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Mangle.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/AST/Mangle.h (original)
>> +++ cfe/trunk/include/clang/AST/Mangle.h Mon Dec 19 20:48:34 2011
>> @@ -64,6 +64,8 @@
>> /// MangleContext - Context for tracking state which persists across multiple
>> /// calls to the C++ name mangler.
>> class MangleContext {
>> +  virtual void anchor();
>> +
>>  ASTContext &Context;
>>  DiagnosticsEngine &Diags;
>> 
>> 
>> Modified: cfe/trunk/include/clang/Analysis/Analyses/Dominators.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Analyses/Dominators.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Analysis/Analyses/Dominators.h (original)
>> +++ cfe/trunk/include/clang/Analysis/Analyses/Dominators.h Mon Dec 19 20:48:34 2011
>> @@ -31,6 +31,7 @@
>> /// This class implements the dominators tree functionality given a Clang CFG.
>> ///
>> class DominatorTree : public ManagedAnalysis {
>> +  virtual void anchor();
>> public:
>>  llvm::DominatorTreeBase<CFGBlock>* DT;
>> 
>> @@ -155,7 +156,7 @@
>>  CFG *cfg;
>> };
>> 
>> -void WriteAsOperand(raw_ostream &OS, const CFGBlock *BB,
>> +inline void WriteAsOperand(raw_ostream &OS, const CFGBlock *BB,
>>                          bool t) {
>>  OS << "BB#" << BB->getBlockID();
>> }
>> 
>> Modified: cfe/trunk/include/clang/Analysis/Analyses/LiveVariables.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Analyses/LiveVariables.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Analysis/Analyses/LiveVariables.h (original)
>> +++ cfe/trunk/include/clang/Analysis/Analyses/LiveVariables.h Mon Dec 19 20:48:34 2011
>> @@ -52,7 +52,9 @@
>>    friend class LiveVariables;    
>>  };
>> 
>> -  struct Observer {
>> +  class Observer {
>> +    virtual void anchor();
>> +  public:
>>    virtual ~Observer() {}
>> 
>>    /// A callback invoked right before invoking the
>> 
>> Modified: cfe/trunk/include/clang/Analysis/Analyses/PostOrderCFGView.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Analyses/PostOrderCFGView.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Analysis/Analyses/PostOrderCFGView.h (original)
>> +++ cfe/trunk/include/clang/Analysis/Analyses/PostOrderCFGView.h Mon Dec 19 20:48:34 2011
>> @@ -27,6 +27,7 @@
>> namespace clang {
>> 
>> class PostOrderCFGView : public ManagedAnalysis {
>> +  virtual void anchor();
>> public:
>>  /// \brief Implements a set of CFGBlocks using a BitVector.
>>  ///
>> 
>> Modified: cfe/trunk/include/clang/Analysis/Analyses/ReachableCode.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Analyses/ReachableCode.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Analysis/Analyses/ReachableCode.h (original)
>> +++ cfe/trunk/include/clang/Analysis/Analyses/ReachableCode.h Mon Dec 19 20:48:34 2011
>> @@ -37,6 +37,7 @@
>> namespace reachable_code {
>> 
>> class Callback {
>> +  virtual void anchor();
>> public:
>>  virtual ~Callback() {}
>>  virtual void HandleUnreachable(SourceLocation L, SourceRange R1,
>> 
>> Modified: cfe/trunk/include/clang/Basic/Diagnostic.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Diagnostic.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/Diagnostic.h (original)
>> +++ cfe/trunk/include/clang/Basic/Diagnostic.h Mon Dec 19 20:48:34 2011
>> @@ -1118,6 +1118,7 @@
>> /// IgnoringDiagConsumer - This is a diagnostic client that just ignores all
>> /// diags.
>> class IgnoringDiagConsumer : public DiagnosticConsumer {
>> +  virtual void anchor();
>>  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
>>                        const Diagnostic &Info) {
>>    // Just ignore it.
>> 
>> Modified: cfe/trunk/include/clang/Basic/FileSystemStatCache.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/FileSystemStatCache.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/FileSystemStatCache.h (original)
>> +++ cfe/trunk/include/clang/Basic/FileSystemStatCache.h Mon Dec 19 20:48:34 2011
>> @@ -25,6 +25,7 @@
>> /// system calls, which is used by precompiled and pretokenized headers to
>> /// improve performance.
>> class FileSystemStatCache {
>> +  virtual void anchor();
>> protected:
>>  llvm::OwningPtr<FileSystemStatCache> NextStatCache;
>> 
>> 
>> Modified: cfe/trunk/include/clang/CodeGen/CodeGenAction.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CodeGenAction.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/CodeGen/CodeGenAction.h (original)
>> +++ cfe/trunk/include/clang/CodeGen/CodeGenAction.h Mon Dec 19 20:48:34 2011
>> @@ -63,31 +63,37 @@
>> };
>> 
>> class EmitAssemblyAction : public CodeGenAction {
>> +  virtual void anchor();
>> public:
>>  EmitAssemblyAction(llvm::LLVMContext *_VMContext = 0);
>> };
>> 
>> class EmitBCAction : public CodeGenAction {
>> +  virtual void anchor();
>> public:
>>  EmitBCAction(llvm::LLVMContext *_VMContext = 0);
>> };
>> 
>> class EmitLLVMAction : public CodeGenAction {
>> +  virtual void anchor();
>> public:
>>  EmitLLVMAction(llvm::LLVMContext *_VMContext = 0);
>> };
>> 
>> class EmitLLVMOnlyAction : public CodeGenAction {
>> +  virtual void anchor();
>> public:
>>  EmitLLVMOnlyAction(llvm::LLVMContext *_VMContext = 0);
>> };
>> 
>> class EmitCodeGenOnlyAction : public CodeGenAction {
>> +  virtual void anchor();
>> public:
>>  EmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext = 0);
>> };
>> 
>> class EmitObjAction : public CodeGenAction {
>> +  virtual void anchor();
>> public:
>>  EmitObjAction(llvm::LLVMContext *_VMContext = 0);
>> };
>> 
>> Modified: cfe/trunk/include/clang/CodeGen/ModuleBuilder.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/ModuleBuilder.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/CodeGen/ModuleBuilder.h (original)
>> +++ cfe/trunk/include/clang/CodeGen/ModuleBuilder.h Mon Dec 19 20:48:34 2011
>> @@ -28,6 +28,7 @@
>>  class CodeGenOptions;
>> 
>>  class CodeGenerator : public ASTConsumer {
>> +    virtual void anchor();
>>  public:
>>    virtual llvm::Module* GetModule() = 0;
>>    virtual llvm::Module* ReleaseModule() = 0;
>> 
>> Modified: cfe/trunk/include/clang/Driver/Action.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Action.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Driver/Action.h (original)
>> +++ cfe/trunk/include/clang/Driver/Action.h Mon Dec 19 20:48:34 2011
>> @@ -94,6 +94,7 @@
>> };
>> 
>> class InputAction : public Action {
>> +  virtual void anchor();
>>  const Arg &Input;
>> public:
>>  InputAction(const Arg &_Input, types::ID _Type);
>> @@ -107,6 +108,7 @@
>> };
>> 
>> class BindArchAction : public Action {
>> +  virtual void anchor();
>>  /// The architecture to bind, or 0 if the default architecture
>>  /// should be bound.
>>  const char *ArchName;
>> @@ -123,6 +125,7 @@
>> };
>> 
>> class JobAction : public Action {
>> +  virtual void anchor();
>> protected:
>>  JobAction(ActionClass Kind, Action *Input, types::ID Type);
>>  JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type);
>> @@ -136,6 +139,7 @@
>> };
>> 
>> class PreprocessJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  PreprocessJobAction(Action *Input, types::ID OutputType);
>> 
>> @@ -146,6 +150,7 @@
>> };
>> 
>> class PrecompileJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  PrecompileJobAction(Action *Input, types::ID OutputType);
>> 
>> @@ -156,6 +161,7 @@
>> };
>> 
>> class AnalyzeJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  AnalyzeJobAction(Action *Input, types::ID OutputType);
>> 
>> @@ -166,6 +172,7 @@
>> };
>> 
>> class CompileJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  CompileJobAction(Action *Input, types::ID OutputType);
>> 
>> @@ -176,6 +183,7 @@
>> };
>> 
>> class AssembleJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  AssembleJobAction(Action *Input, types::ID OutputType);
>> 
>> @@ -186,6 +194,7 @@
>> };
>> 
>> class LinkJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  LinkJobAction(ActionList &Inputs, types::ID Type);
>> 
>> @@ -196,6 +205,7 @@
>> };
>> 
>> class LipoJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  LipoJobAction(ActionList &Inputs, types::ID Type);
>> 
>> @@ -206,6 +216,7 @@
>> };
>> 
>> class DsymutilJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  DsymutilJobAction(ActionList &Inputs, types::ID Type);
>> 
>> @@ -216,6 +227,7 @@
>> };
>> 
>> class VerifyJobAction : public JobAction {
>> +  virtual void anchor();
>> public:
>>  VerifyJobAction(ActionList &Inputs, types::ID Type);
>>  static bool classof(const Action *A) {
>> 
>> Modified: cfe/trunk/include/clang/Driver/Job.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Job.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Driver/Job.h (original)
>> +++ cfe/trunk/include/clang/Driver/Job.h Mon Dec 19 20:48:34 2011
>> @@ -46,6 +46,8 @@
>>  /// Command - An executable path/name and argument vector to
>>  /// execute.
>> class Command : public Job {
>> +  virtual void anchor();
>> +
>>  /// Source - The action which caused the creation of this job.
>>  const Action &Source;
>> 
>> 
>> Modified: cfe/trunk/include/clang/Frontend/ChainedDiagnosticConsumer.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ChainedDiagnosticConsumer.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Frontend/ChainedDiagnosticConsumer.h (original)
>> +++ cfe/trunk/include/clang/Frontend/ChainedDiagnosticConsumer.h Mon Dec 19 20:48:34 2011
>> @@ -21,6 +21,7 @@
>> /// should be the "primary" client, and will be used for computing whether the
>> /// diagnostics should be included in counts.
>> class ChainedDiagnosticConsumer : public DiagnosticConsumer {
>> +  virtual void anchor();
>>  llvm::OwningPtr<DiagnosticConsumer> Primary;
>>  llvm::OwningPtr<DiagnosticConsumer> Secondary;
>> 
>> 
>> Modified: cfe/trunk/include/clang/Frontend/FrontendAction.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendAction.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Frontend/FrontendAction.h (original)
>> +++ cfe/trunk/include/clang/Frontend/FrontendAction.h Mon Dec 19 20:48:34 2011
>> @@ -231,6 +231,7 @@
>> };
>> 
>> class PluginASTAction : public ASTFrontendAction {
>> +  virtual void anchor();
>> protected:
>>  virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>                                         StringRef InFile) = 0;
>> 
>> Modified: cfe/trunk/include/clang/Lex/Lexer.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Lexer.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Lex/Lexer.h (original)
>> +++ cfe/trunk/include/clang/Lex/Lexer.h Mon Dec 19 20:48:34 2011
>> @@ -44,6 +44,8 @@
>> /// or buffering/seeking of tokens, only forward lexing is supported.  It relies
>> /// on the specified Preprocessor object to handle preprocessor directives, etc.
>> class Lexer : public PreprocessorLexer {
>> +  virtual void anchor();
>> +
>>  //===--------------------------------------------------------------------===//
>>  // Constant configuration values for this lexer.
>>  const char *BufferStart;       // Start of the buffer.
>> 
>> Modified: cfe/trunk/include/clang/Lex/PPCallbacks.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PPCallbacks.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Lex/PPCallbacks.h (original)
>> +++ cfe/trunk/include/clang/Lex/PPCallbacks.h Mon Dec 19 20:48:34 2011
>> @@ -224,6 +224,7 @@
>> 
>> /// PPChainedCallbacks - Simple wrapper class for chaining callbacks.
>> class PPChainedCallbacks : public PPCallbacks {
>> +  virtual void anchor();
>>  PPCallbacks *First, *Second;
>> 
>> public:
>> 
>> Modified: cfe/trunk/include/clang/Lex/PreprocessorLexer.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PreprocessorLexer.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Lex/PreprocessorLexer.h (original)
>> +++ cfe/trunk/include/clang/Lex/PreprocessorLexer.h Mon Dec 19 20:48:34 2011
>> @@ -24,6 +24,7 @@
>> class Preprocessor;
>> 
>> class PreprocessorLexer {
>> +  virtual void anchor();
>> protected:
>>  Preprocessor *PP;              // Preprocessor object controlling lexing.
>> 
>> 
>> Modified: cfe/trunk/include/clang/Sema/SemaConsumer.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/SemaConsumer.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Sema/SemaConsumer.h (original)
>> +++ cfe/trunk/include/clang/Sema/SemaConsumer.h Mon Dec 19 20:48:34 2011
>> @@ -24,6 +24,7 @@
>>  /// clients that read ASTs and then require further semantic
>>  /// analysis of the entities in those ASTs.
>>  class SemaConsumer : public ASTConsumer {
>> +    virtual void anchor();
>>  public:
>>    SemaConsumer() {
>>      ASTConsumer::SemaConsumer = true;
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h Mon Dec 19 20:48:34 2011
>> @@ -52,6 +52,7 @@
>> class BugReport {
>> public:
>>  class NodeResolver {
>> +    virtual void anchor();
>>  public:
>>    virtual ~NodeResolver() {}
>>    virtual const ExplodedNode*
>> @@ -374,6 +375,7 @@
>> };
>> 
>> class BugReporterContext {
>> +  virtual void anchor();
>>  GRBugReporter &BR;
>> public:
>>  BugReporterContext(GRBugReporter& br) : BR(br) {}
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h Mon Dec 19 20:48:34 2011
>> @@ -49,6 +49,7 @@
>> };
>> 
>> class BuiltinBug : public BugType {
>> +  virtual void anchor();
>>  const std::string desc;
>> public:
>>  BuiltinBug(const char *name, const char *description)
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h Mon Dec 19 20:48:34 2011
>> @@ -46,6 +46,7 @@
>> class PathDiagnostic;
>> 
>> class PathDiagnosticConsumer {
>> +  virtual void anchor();
>> public:
>>  PathDiagnosticConsumer() {}
>> 
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/Checker.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/Checker.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/Checker.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/Checker.h Mon Dec 19 20:48:34 2011
>> @@ -383,6 +383,7 @@
>>                check::_VoidCheck, check::_VoidCheck, check::_VoidCheck>
>>  : public CheckerBase 
>> {
>> +  virtual void anchor();
>> public:
>>  static void _register(void *checker, CheckerManager &mgr) { }
>> };
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h Mon Dec 19 20:48:34 2011
>> @@ -31,6 +31,7 @@
>>  class CheckerManager;
>> 
>> class AnalysisManager : public BugReporterData {
>> +  virtual void anchor();
>>  AnalysisDeclContextManager AnaCtxMgr;
>> 
>>  ASTContext &Ctx;
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h Mon Dec 19 20:48:34 2011
>> @@ -211,6 +211,7 @@
>> /// added to the builder (either as the input node set or as the newly
>> /// constructed nodes) but did not have any outgoing transitions added.
>> class NodeBuilder {
>> +  virtual void anchor();
>> protected:
>>  const NodeBuilderContext &C;
>> 
>> @@ -305,6 +306,7 @@
>> /// \class NodeBuilderWithSinks
>> /// \brief This node builder keeps track of the generated sink nodes.
>> class NodeBuilderWithSinks: public NodeBuilder {
>> +  virtual void anchor();
>> protected:
>>  SmallVector<ExplodedNode*, 2> sinksGenerated;
>>  ProgramPoint &Location;
>> @@ -381,6 +383,7 @@
>> /// \brief BranchNodeBuilder is responsible for constructing the nodes
>> /// corresponding to the two branches of the if statement - true and false.
>> class BranchNodeBuilder: public NodeBuilder {
>> +  virtual void anchor();
>>  const CFGBlock *DstT;
>>  const CFGBlock *DstF;
>> 
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h Mon Dec 19 20:48:34 2011
>> @@ -228,6 +228,7 @@
>> 
>> // FIXME: Is this class necessary?
>> class InterExplodedGraphMap {
>> +  virtual void anchor();
>>  llvm::DenseMap<const ExplodedNode*, ExplodedNode*> M;
>>  friend class ExplodedGraph;
>> 
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h Mon Dec 19 20:48:34 2011
>> @@ -177,6 +177,7 @@
>> };
>> 
>> class GlobalsSpaceRegion : public MemSpaceRegion {
>> +  virtual void anchor();
>> protected:
>>  GlobalsSpaceRegion(MemRegionManager *mgr, Kind k)
>>    : MemSpaceRegion(mgr, k) {}
>> @@ -223,6 +224,7 @@
>> };
>> 
>> class HeapSpaceRegion : public MemSpaceRegion {
>> +  virtual void anchor();
>>  friend class MemRegionManager;
>> 
>>  HeapSpaceRegion(MemRegionManager *mgr)
>> @@ -234,6 +236,7 @@
>> };
>> 
>> class UnknownSpaceRegion : public MemSpaceRegion {
>> +  virtual void anchor();
>>  friend class MemRegionManager;
>>  UnknownSpaceRegion(MemRegionManager *mgr)
>>    : MemSpaceRegion(mgr, UnknownSpaceRegionKind) {}
>> @@ -266,7 +269,7 @@
>> };
>> 
>> class StackLocalsSpaceRegion : public StackSpaceRegion {
>> -private:
>> +  virtual void anchor();
>>  friend class MemRegionManager;
>>  StackLocalsSpaceRegion(MemRegionManager *mgr, const StackFrameContext *sfc)
>>    : StackSpaceRegion(mgr, StackLocalsSpaceRegionKind, sfc) {}
>> @@ -278,6 +281,7 @@
>> 
>> class StackArgumentsSpaceRegion : public StackSpaceRegion {
>> private:
>> +  virtual void anchor();
>>  friend class MemRegionManager;
>>  StackArgumentsSpaceRegion(MemRegionManager *mgr, const StackFrameContext *sfc)
>>    : StackSpaceRegion(mgr, StackArgumentsSpaceRegionKind, sfc) {}
>> @@ -291,6 +295,8 @@
>> /// SubRegion - A region that subsets another larger region.  Most regions
>> ///  are subclasses of SubRegion.
>> class SubRegion : public MemRegion {
>> +private:
>> +  virtual void anchor();
>> protected:
>>  const MemRegion* superRegion;
>>  SubRegion(const MemRegion* sReg, Kind k) : MemRegion(k), superRegion(sReg) {}
>> @@ -351,6 +357,8 @@
>> 
>> /// TypedRegion - An abstract class representing regions that are typed.
>> class TypedRegion : public SubRegion {
>> +public:
>> +  virtual void anchor();
>> protected:
>>  TypedRegion(const MemRegion* sReg, Kind k) : SubRegion(sReg, k) {}
>> 
>> @@ -371,6 +379,8 @@
>> 
>> /// TypedValueRegion - An abstract class representing regions having a typed value.
>> class TypedValueRegion : public TypedRegion {
>> +public:
>> +  virtual void anchor();
>> protected:
>>  TypedValueRegion(const MemRegion* sReg, Kind k) : TypedRegion(sReg, k) {}
>> 
>> @@ -399,6 +409,8 @@
>> 
>> 
>> class CodeTextRegion : public TypedRegion {
>> +public:
>> +  virtual void anchor();
>> protected:
>>  CodeTextRegion(const MemRegion *sreg, Kind k) : TypedRegion(sreg, k) {}
>> public:
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h Mon Dec 19 20:48:34 2011
>> @@ -806,6 +806,7 @@
>> /// A Utility class that allows to visit the reachable symbols using a custom
>> /// SymbolVisitor.
>> class ScanReachableSymbols : public SubRegionMap::Visitor  {
>> +  virtual void anchor();
>>  typedef llvm::DenseMap<const void*, unsigned> VisitedItems;
>> 
>>  VisitedItems visited;
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h Mon Dec 19 20:48:34 2011
>> @@ -28,6 +28,7 @@
>> class ProgramState;
>> 
>> class SValBuilder {
>> +  virtual void anchor();
>> protected:
>>  ASTContext &Context;
>> 
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h Mon Dec 19 20:48:34 2011
>> @@ -258,10 +258,12 @@
>> /// SubRegionMap - An abstract interface that represents a queryable map
>> ///  between MemRegion objects and their subregions.
>> class SubRegionMap {
>> +  virtual void anchor();
>> public:
>>  virtual ~SubRegionMap() {}
>> 
>>  class Visitor {
>> +    virtual void anchor();
>>  public:
>>    virtual ~Visitor() {}
>>    virtual bool Visit(const MemRegion* Parent, const MemRegion* SubRegion) = 0;
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h Mon Dec 19 20:48:34 2011
>> @@ -43,6 +43,7 @@
>> class MemRegion;
>> 
>> class SubEngine {
>> +  virtual void anchor();
>> public:
>>  virtual ~SubEngine() {}
>> 
>> 
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h Mon Dec 19 20:48:34 2011
>> @@ -43,6 +43,7 @@
>> /// \brief Symbolic value. These values used to capture symbolic execution of
>> /// the program.
>> class SymExpr : public llvm::FoldingSetNode {
>> +  virtual void anchor();
>> public:
>>  enum Kind { RegionValueKind, ConjuredKind, DerivedKind, ExtentKind,
>>              MetadataKind,
>> @@ -102,7 +103,7 @@
>> /// \brief A symbol representing data which can be stored in a memory location
>> /// (region).
>> class SymbolData : public SymExpr {
>> -private:
>> +  virtual void anchor();
>>  const SymbolID Sym;
>> 
>> protected:
>> 
>> Modified: cfe/trunk/lib/AST/AttrImpl.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/AttrImpl.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/AttrImpl.cpp (original)
>> +++ cfe/trunk/lib/AST/AttrImpl.cpp Mon Dec 19 20:48:34 2011
>> @@ -19,4 +19,8 @@
>> 
>> Attr::~Attr() { }
>> 
>> +void InheritableAttr::anchor() { }
>> +
>> +void InheritableParamAttr::anchor() { }
>> +
>> #include "clang/AST/AttrImpl.inc"
>> 
>> Modified: cfe/trunk/lib/AST/Decl.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/Decl.cpp (original)
>> +++ cfe/trunk/lib/AST/Decl.cpp Mon Dec 19 20:48:34 2011
>> @@ -624,6 +624,8 @@
>>  }
>> }
>> 
>> +void NamedDecl::anchor() { }
>> +
>> void NamedDecl::ClearLinkageCache() {
>>  // Note that we can't skip clearing the linkage of children just
>>  // because the parent doesn't have cached linkage:  we don't cache
>> @@ -2424,6 +2426,8 @@
>> // EnumDecl Implementation
>> //===----------------------------------------------------------------------===//
>> 
>> +void EnumDecl::anchor() { }
>> +
>> EnumDecl *EnumDecl::Create(ASTContext &C, DeclContext *DC,
>>                           SourceLocation StartLoc, SourceLocation IdLoc,
>>                           IdentifierInfo *Id,
>> @@ -2587,10 +2591,14 @@
>> // Other Decl Allocation/Deallocation Method Implementations
>> //===----------------------------------------------------------------------===//
>> 
>> +void TranslationUnitDecl::anchor() { }
>> +
>> TranslationUnitDecl *TranslationUnitDecl::Create(ASTContext &C) {
>>  return new (C) TranslationUnitDecl(C);
>> }
>> 
>> +void LabelDecl::anchor() { }
>> +
>> LabelDecl *LabelDecl::Create(ASTContext &C, DeclContext *DC,
>>                             SourceLocation IdentL, IdentifierInfo *II) {
>>  return new (C) LabelDecl(DC, IdentL, II, 0, IdentL);
>> @@ -2603,6 +2611,7 @@
>>  return new (C) LabelDecl(DC, IdentL, II, 0, GnuLabelL);
>> }
>> 
>> +void NamespaceDecl::anchor() { }
>> 
>> NamespaceDecl *NamespaceDecl::Create(ASTContext &C, DeclContext *DC,
>>                                     SourceLocation StartLoc,
>> @@ -2615,6 +2624,10 @@
>>                       NextNamespace.get(getASTContext().getExternalSource()));
>> }
>> 
>> +void ValueDecl::anchor() { }
>> +
>> +void ImplicitParamDecl::anchor() { }
>> +
>> ImplicitParamDecl *ImplicitParamDecl::Create(ASTContext &C, DeclContext *DC,
>>                                             SourceLocation IdLoc,
>>                                             IdentifierInfo *Id,
>> @@ -2649,6 +2662,8 @@
>>  return new (C) EnumConstantDecl(CD, L, Id, T, E, V);
>> }
>> 
>> +void IndirectFieldDecl::anchor() { }
>> +
>> IndirectFieldDecl *
>> IndirectFieldDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
>>                          IdentifierInfo *Id, QualType T, NamedDecl **CH,
>> @@ -2663,12 +2678,16 @@
>>  return SourceRange(getLocation(), End);
>> }
>> 
>> +void TypeDecl::anchor() { }
>> +
>> TypedefDecl *TypedefDecl::Create(ASTContext &C, DeclContext *DC,
>>                                 SourceLocation StartLoc, SourceLocation IdLoc,
>>                                 IdentifierInfo *Id, TypeSourceInfo *TInfo) {
>>  return new (C) TypedefDecl(DC, StartLoc, IdLoc, Id, TInfo);
>> }
>> 
>> +void TypedefNameDecl::anchor() { }
>> +
>> TypeAliasDecl *TypeAliasDecl::Create(ASTContext &C, DeclContext *DC,
>>                                     SourceLocation StartLoc,
>>                                     SourceLocation IdLoc, IdentifierInfo *Id,
>> @@ -2692,6 +2711,8 @@
>>  return SourceRange(getLocStart(), RangeEnd);
>> }
>> 
>> +void FileScopeAsmDecl::anchor() { }
>> +
>> FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C, DeclContext *DC,
>>                                           StringLiteral *Str,
>>                                           SourceLocation AsmLoc,
>> 
>> Modified: cfe/trunk/lib/AST/DeclCXX.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/DeclCXX.cpp (original)
>> +++ cfe/trunk/lib/AST/DeclCXX.cpp Mon Dec 19 20:48:34 2011
>> @@ -28,6 +28,8 @@
>> // Decl Allocation/Deallocation Method Implementations
>> //===----------------------------------------------------------------------===//
>> 
>> +void AccessSpecDecl::anchor() { }
>> +
>> CXXRecordDecl::DefinitionData::DefinitionData(CXXRecordDecl *D)
>>  : UserDeclaredConstructor(false), UserDeclaredCopyConstructor(false),
>>    UserDeclaredMoveConstructor(false), UserDeclaredCopyAssignment(false),
>> @@ -1155,6 +1157,8 @@
>>  return false;
>> }
>> 
>> +void CXXMethodDecl::anchor() { }
>> +
>> CXXMethodDecl *
>> CXXMethodDecl::Create(ASTContext &C, CXXRecordDecl *RD,
>>                      SourceLocation StartLoc,
>> @@ -1404,6 +1408,8 @@
>>  return SourceRange(getSourceLocation(), getRParenLoc());
>> }
>> 
>> +void CXXConstructorDecl::anchor() { }
>> +
>> CXXConstructorDecl *
>> CXXConstructorDecl::Create(ASTContext &C, EmptyShell Empty) {
>>  return new (C) CXXConstructorDecl(0, SourceLocation(), DeclarationNameInfo(),
>> @@ -1548,6 +1554,8 @@
>>  addOverriddenMethod(BaseCtor);
>> }
>> 
>> +void CXXDestructorDecl::anchor() { }
>> +
>> CXXDestructorDecl *
>> CXXDestructorDecl::Create(ASTContext &C, EmptyShell Empty) {
>>  return new (C) CXXDestructorDecl(0, SourceLocation(), DeclarationNameInfo(),
>> @@ -1567,6 +1575,8 @@
>>                                   isImplicitlyDeclared);
>> }
>> 
>> +void CXXConversionDecl::anchor() { }
>> +
>> CXXConversionDecl *
>> CXXConversionDecl::Create(ASTContext &C, EmptyShell Empty) {
>>  return new (C) CXXConversionDecl(0, SourceLocation(), DeclarationNameInfo(),
>> @@ -1589,6 +1599,8 @@
>>                                   EndLocation);
>> }
>> 
>> +void LinkageSpecDecl::anchor() { }
>> +
>> LinkageSpecDecl *LinkageSpecDecl::Create(ASTContext &C,
>>                                         DeclContext *DC,
>>                                         SourceLocation ExternLoc,
>> @@ -1598,6 +1610,8 @@
>>  return new (C) LinkageSpecDecl(DC, ExternLoc, LangLoc, Lang, RBraceLoc);
>> }
>> 
>> +void UsingDirectiveDecl::anchor() { }
>> +
>> UsingDirectiveDecl *UsingDirectiveDecl::Create(ASTContext &C, DeclContext *DC,
>>                                               SourceLocation L,
>>                                               SourceLocation NamespaceLoc,
>> @@ -1618,6 +1632,8 @@
>>  return cast_or_null<NamespaceDecl>(NominatedNamespace);
>> }
>> 
>> +void NamespaceAliasDecl::anchor() { }
>> +
>> NamespaceAliasDecl *NamespaceAliasDecl::Create(ASTContext &C, DeclContext *DC,
>>                                               SourceLocation UsingLoc,
>>                                               SourceLocation AliasLoc,
>> @@ -1631,6 +1647,8 @@
>>                                    QualifierLoc, IdentLoc, Namespace);
>> }
>> 
>> +void UsingShadowDecl::anchor() { }
>> +
>> UsingDecl *UsingShadowDecl::getUsingDecl() const {
>>  const UsingShadowDecl *Shadow = this;
>>  while (const UsingShadowDecl *NextShadow =
>> @@ -1639,6 +1657,8 @@
>>  return cast<UsingDecl>(Shadow->UsingOrNextShadow);
>> }
>> 
>> +void UsingDecl::anchor() { }
>> +
>> void UsingDecl::addShadowDecl(UsingShadowDecl *S) {
>>  assert(std::find(shadow_begin(), shadow_end(), S) == shadow_end() &&
>>         "declaration already in set");
>> @@ -1676,6 +1696,8 @@
>>  return new (C) UsingDecl(DC, UL, QualifierLoc, NameInfo, IsTypeNameArg);
>> }
>> 
>> +void UnresolvedUsingValueDecl::anchor() { }
>> +
>> UnresolvedUsingValueDecl *
>> UnresolvedUsingValueDecl::Create(ASTContext &C, DeclContext *DC,
>>                                 SourceLocation UsingLoc,
>> @@ -1685,6 +1707,8 @@
>>                                          QualifierLoc, NameInfo);
>> }
>> 
>> +void UnresolvedUsingTypenameDecl::anchor() { }
>> +
>> UnresolvedUsingTypenameDecl *
>> UnresolvedUsingTypenameDecl::Create(ASTContext &C, DeclContext *DC,
>>                                    SourceLocation UsingLoc,
>> @@ -1697,6 +1721,8 @@
>>                                             TargetName.getAsIdentifierInfo());
>> }
>> 
>> +void StaticAssertDecl::anchor() { }
>> +
>> StaticAssertDecl *StaticAssertDecl::Create(ASTContext &C, DeclContext *DC,
>>                                           SourceLocation StaticAssertLoc,
>>                                           Expr *AssertExpr,
>> 
>> Modified: cfe/trunk/lib/AST/DeclFriend.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclFriend.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/DeclFriend.cpp (original)
>> +++ cfe/trunk/lib/AST/DeclFriend.cpp Mon Dec 19 20:48:34 2011
>> @@ -16,6 +16,8 @@
>> #include "clang/AST/DeclTemplate.h"
>> using namespace clang;
>> 
>> +void FriendDecl::anchor() { }
>> +
>> FriendDecl *FriendDecl::Create(ASTContext &C, DeclContext *DC,
>>                               SourceLocation L,
>>                               FriendUnion Friend,
>> 
>> Modified: cfe/trunk/lib/AST/DeclObjC.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclObjC.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/DeclObjC.cpp (original)
>> +++ cfe/trunk/lib/AST/DeclObjC.cpp Mon Dec 19 20:48:34 2011
>> @@ -46,6 +46,8 @@
>> // ObjCInterfaceDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCContainerDecl::anchor() { }
>> +
>> /// getIvarDecl - This method looks up an ivar in this ContextDecl.
>> ///
>> ObjCIvarDecl *
>> @@ -147,6 +149,8 @@
>>  return 0;
>> }
>> 
>> +void ObjCInterfaceDecl::anchor() { }
>> +
>> /// FindPropertyVisibleInPrimaryClass - Finds declaration of the property
>> /// with name 'PropertyId' in the primary class; including those in protocols
>> /// (direct or indirect) used by the primary class.
>> @@ -876,6 +880,8 @@
>> // ObjCIvarDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCIvarDecl::anchor() { }
>> +
>> ObjCIvarDecl *ObjCIvarDecl::Create(ASTContext &C, ObjCContainerDecl *DC,
>>                                   SourceLocation StartLoc,
>>                                   SourceLocation IdLoc, IdentifierInfo *Id,
>> @@ -946,6 +952,8 @@
>> // ObjCAtDefsFieldDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCAtDefsFieldDecl::anchor() { }
>> +
>> ObjCAtDefsFieldDecl
>> *ObjCAtDefsFieldDecl::Create(ASTContext &C, DeclContext *DC,
>>                             SourceLocation StartLoc,  SourceLocation IdLoc,
>> @@ -957,6 +965,8 @@
>> // ObjCProtocolDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCProtocolDecl::anchor() { }
>> +
>> ObjCProtocolDecl *ObjCProtocolDecl::Create(ASTContext &C, DeclContext *DC,
>>                                           IdentifierInfo *Id,
>>                                           SourceLocation nameLoc,
>> @@ -1026,6 +1036,8 @@
>> // ObjCForwardProtocolDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCForwardProtocolDecl::anchor() { }
>> +
>> ObjCForwardProtocolDecl::
>> ObjCForwardProtocolDecl(DeclContext *DC, SourceLocation L,
>>                        ObjCProtocolDecl *const *Elts, unsigned nElts,
>> @@ -1048,6 +1060,8 @@
>> // ObjCCategoryDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCCategoryDecl::anchor() { }
>> +
>> ObjCCategoryDecl *ObjCCategoryDecl::Create(ASTContext &C, DeclContext *DC,
>>                                           SourceLocation AtLoc, 
>>                                           SourceLocation ClassNameLoc,
>> @@ -1089,6 +1103,8 @@
>> // ObjCCategoryImplDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCCategoryImplDecl::anchor() { }
>> +
>> ObjCCategoryImplDecl *
>> ObjCCategoryImplDecl::Create(ASTContext &C, DeclContext *DC,
>>                             IdentifierInfo *Id,
>> @@ -1108,6 +1124,8 @@
>> }
>> 
>> 
>> +void ObjCImplDecl::anchor() { }
>> +
>> void ObjCImplDecl::addPropertyImplementation(ObjCPropertyImplDecl *property) {
>>  // FIXME: The context should be correct before we get here.
>>  property->setLexicalDeclContext(this);
>> @@ -1170,6 +1188,8 @@
>> // ObjCImplementationDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCImplementationDecl::anchor() { }
>> +
>> ObjCImplementationDecl *
>> ObjCImplementationDecl::Create(ASTContext &C, DeclContext *DC,
>>                               ObjCInterfaceDecl *ClassInterface,
>> @@ -1203,6 +1223,8 @@
>> // ObjCCompatibleAliasDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCCompatibleAliasDecl::anchor() { }
>> +
>> ObjCCompatibleAliasDecl *
>> ObjCCompatibleAliasDecl::Create(ASTContext &C, DeclContext *DC,
>>                                SourceLocation L,
>> @@ -1215,6 +1237,8 @@
>> // ObjCPropertyDecl
>> //===----------------------------------------------------------------------===//
>> 
>> +void ObjCPropertyDecl::anchor() { }
>> +
>> ObjCPropertyDecl *ObjCPropertyDecl::Create(ASTContext &C, DeclContext *DC,
>>                                           SourceLocation L,
>>                                           IdentifierInfo *Id,
>> 
>> Modified: cfe/trunk/lib/AST/DeclTemplate.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclTemplate.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/DeclTemplate.cpp (original)
>> +++ cfe/trunk/lib/AST/DeclTemplate.cpp Mon Dec 19 20:48:34 2011
>> @@ -537,6 +537,8 @@
>> // TemplateTemplateParmDecl Method Implementations
>> //===----------------------------------------------------------------------===//
>> 
>> +void TemplateTemplateParmDecl::anchor() { }
>> +
>> TemplateTemplateParmDecl *
>> TemplateTemplateParmDecl::Create(const ASTContext &C, DeclContext *DC,
>>                                 SourceLocation L, unsigned D, unsigned P,
>> @@ -582,6 +584,12 @@
>> }
>> 
>> //===----------------------------------------------------------------------===//
>> +// TemplateDecl Implementation
>> +//===----------------------------------------------------------------------===//
>> +
>> +void TemplateDecl::anchor() { }
>> +
>> +//===----------------------------------------------------------------------===//
>> // ClassTemplateSpecializationDecl Implementation
>> //===----------------------------------------------------------------------===//
>> ClassTemplateSpecializationDecl::
>> @@ -682,6 +690,8 @@
>> //===----------------------------------------------------------------------===//
>> // ClassTemplatePartialSpecializationDecl Implementation
>> //===----------------------------------------------------------------------===//
>> +void ClassTemplatePartialSpecializationDecl::anchor() { }
>> +
>> ClassTemplatePartialSpecializationDecl::
>> ClassTemplatePartialSpecializationDecl(ASTContext &Context, TagKind TK,
>>                                       DeclContext *DC,
>> @@ -749,6 +759,8 @@
>> // FriendTemplateDecl Implementation
>> //===----------------------------------------------------------------------===//
>> 
>> +void FriendTemplateDecl::anchor() { }
>> +
>> FriendTemplateDecl *FriendTemplateDecl::Create(ASTContext &Context,
>>                                               DeclContext *DC,
>>                                               SourceLocation L,
>> @@ -796,3 +808,8 @@
>>  return CommonPtr;
>> }
>> 
>> +//===----------------------------------------------------------------------===//
>> +// ClassScopeFunctionSpecializationDecl Implementation
>> +//===----------------------------------------------------------------------===//
>> +
>> +void ClassScopeFunctionSpecializationDecl::anchor() { }
>> 
>> Modified: cfe/trunk/lib/AST/ExprCXX.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprCXX.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/ExprCXX.cpp (original)
>> +++ cfe/trunk/lib/AST/ExprCXX.cpp Mon Dec 19 20:48:34 2011
>> @@ -1023,4 +1023,4 @@
>>  return TemplateArgument(Arguments, NumArguments);
>> }
>> 
>> -
>> +void ArrayTypeTraitExpr::anchor() { }
>> 
>> Modified: cfe/trunk/lib/AST/Mangle.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Mangle.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/Mangle.cpp (original)
>> +++ cfe/trunk/lib/AST/Mangle.cpp Mon Dec 19 20:48:34 2011
>> @@ -59,6 +59,8 @@
>> 
>> }
>> 
>> +void MangleContext::anchor() { }
>> +
>> void MangleContext::mangleGlobalBlock(const BlockDecl *BD,
>>                                      raw_ostream &Out) {
>>  Out << "__block_global_" << getBlockId(BD, false);
>> 
>> Added: cfe/trunk/lib/Analysis/Dominators.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/Dominators.cpp?rev=146959&view=auto
>> ==============================================================================
>> --- cfe/trunk/lib/Analysis/Dominators.cpp (added)
>> +++ cfe/trunk/lib/Analysis/Dominators.cpp Mon Dec 19 20:48:34 2011
>> @@ -0,0 +1,14 @@
>> +//=- Dominators.cpp - Implementation of dominators tree for Clang CFG C++ -*-=//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "clang/Analysis/Analyses/Dominators.h"
>> +
>> +using namespace clang;
>> +
>> +void DominatorTree::anchor() { }
>> 
>> Modified: cfe/trunk/lib/Analysis/LiveVariables.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/LiveVariables.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Analysis/LiveVariables.cpp (original)
>> +++ cfe/trunk/lib/Analysis/LiveVariables.cpp Mon Dec 19 20:48:34 2011
>> @@ -143,6 +143,8 @@
>>  }
>> }
>> 
>> +void LiveVariables::Observer::anchor() { }
>> +
>> LiveVariables::LivenessValues
>> LiveVariablesImpl::merge(LiveVariables::LivenessValues valsA,
>>                         LiveVariables::LivenessValues valsB) {  
>> 
>> Modified: cfe/trunk/lib/Analysis/PostOrderCFGView.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/PostOrderCFGView.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Analysis/PostOrderCFGView.cpp (original)
>> +++ cfe/trunk/lib/Analysis/PostOrderCFGView.cpp Mon Dec 19 20:48:34 2011
>> @@ -15,6 +15,8 @@
>> 
>> using namespace clang;
>> 
>> +void PostOrderCFGView::anchor() { }
>> +
>> PostOrderCFGView::PostOrderCFGView(const CFG *cfg) {
>>  Blocks.reserve(cfg->getNumBlockIDs());
>>  CFGBlockSet BSet(cfg);
>> 
>> Modified: cfe/trunk/lib/Analysis/ReachableCode.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/ReachableCode.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Analysis/ReachableCode.cpp (original)
>> +++ cfe/trunk/lib/Analysis/ReachableCode.cpp Mon Dec 19 20:48:34 2011
>> @@ -251,7 +251,9 @@
>> }
>> 
>> namespace clang { namespace reachable_code {
>> -  
>> +
>> +void Callback::anchor() { }  
>> +
>> unsigned ScanReachableFromBlock(const CFGBlock *Start,
>>                                llvm::BitVector &Reachable) {
>>  unsigned count = 0;
>> 
>> Modified: cfe/trunk/lib/Basic/Diagnostic.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Diagnostic.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Basic/Diagnostic.cpp (original)
>> +++ cfe/trunk/lib/Basic/Diagnostic.cpp Mon Dec 19 20:48:34 2011
>> @@ -825,6 +825,8 @@
>> ///  reported by DiagnosticsEngine.
>> bool DiagnosticConsumer::IncludeInDiagnosticCounts() const { return true; }
>> 
>> +void IgnoringDiagConsumer::anchor() { }
>> +
>> PartialDiagnostic::StorageAllocator::StorageAllocator() {
>>  for (unsigned I = 0; I != NumCached; ++I)
>>    FreeList[I] = Cached + I;
>> 
>> Modified: cfe/trunk/lib/Basic/FileSystemStatCache.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileSystemStatCache.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Basic/FileSystemStatCache.cpp (original)
>> +++ cfe/trunk/lib/Basic/FileSystemStatCache.cpp Mon Dec 19 20:48:34 2011
>> @@ -28,6 +28,8 @@
>> #define S_ISDIR(s) ((_S_IFDIR & s) !=0)
>> #endif
>> 
>> +void FileSystemStatCache::anchor() { }
>> +
>> /// FileSystemStatCache::get - Get the 'stat' information for the specified
>> /// path, using the cache to accelerate it if possible.  This returns true if
>> /// the path does not exist or false if it exists.
>> 
>> Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Mon Dec 19 20:48:34 2011
>> @@ -33,6 +33,7 @@
>> 
>> namespace clang {
>>  class BackendConsumer : public ASTConsumer {
>> +    virtual void anchor();
>>    DiagnosticsEngine &Diags;
>>    BackendAction Action;
>>    const CodeGenOptions &CodeGenOpts;
>> @@ -180,6 +181,8 @@
>>    void InlineAsmDiagHandler2(const llvm::SMDiagnostic &,
>>                               SourceLocation LocCookie);
>>  };
>> +  
>> +  void BackendConsumer::anchor() {}
>> }
>> 
>> /// ConvertBackendLocation - Convert a location in a temporary llvm::SourceMgr
>> @@ -406,20 +409,26 @@
>> 
>> //
>> 
>> +void EmitAssemblyAction::anchor() { }
>> EmitAssemblyAction::EmitAssemblyAction(llvm::LLVMContext *_VMContext)
>>  : CodeGenAction(Backend_EmitAssembly, _VMContext) {}
>> 
>> +void EmitBCAction::anchor() { }
>> EmitBCAction::EmitBCAction(llvm::LLVMContext *_VMContext)
>>  : CodeGenAction(Backend_EmitBC, _VMContext) {}
>> 
>> +void EmitLLVMAction::anchor() { }
>> EmitLLVMAction::EmitLLVMAction(llvm::LLVMContext *_VMContext)
>>  : CodeGenAction(Backend_EmitLL, _VMContext) {}
>> 
>> +void EmitLLVMOnlyAction::anchor() { }
>> EmitLLVMOnlyAction::EmitLLVMOnlyAction(llvm::LLVMContext *_VMContext)
>>  : CodeGenAction(Backend_EmitNothing, _VMContext) {}
>> 
>> +void EmitCodeGenOnlyAction::anchor() { }
>> EmitCodeGenOnlyAction::EmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext)
>>  : CodeGenAction(Backend_EmitMCNull, _VMContext) {}
>> 
>> +void EmitObjAction::anchor() { }
>> EmitObjAction::EmitObjAction(llvm::LLVMContext *_VMContext)
>>  : CodeGenAction(Backend_EmitObj, _VMContext) {}
>> 
>> Modified: cfe/trunk/lib/CodeGen/ModuleBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ModuleBuilder.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/ModuleBuilder.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/ModuleBuilder.cpp Mon Dec 19 20:48:34 2011
>> @@ -113,6 +113,8 @@
>>  };
>> }
>> 
>> +void CodeGenerator::anchor() { }
>> +
>> CodeGenerator *clang::CreateLLVMCodeGen(DiagnosticsEngine &Diags,
>>                                        const std::string& ModuleName,
>>                                        const CodeGenOptions &CGO,
>> 
>> Modified: cfe/trunk/lib/Driver/Action.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Action.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Action.cpp (original)
>> +++ cfe/trunk/lib/Driver/Action.cpp Mon Dec 19 20:48:34 2011
>> @@ -38,14 +38,20 @@
>>  llvm_unreachable("invalid class");
>> }
>> 
>> +void InputAction::anchor() {}
>> +
>> InputAction::InputAction(const Arg &_Input, types::ID _Type)
>>  : Action(InputClass, _Type), Input(_Input) {
>> }
>> 
>> +void BindArchAction::anchor() {}
>> +
>> BindArchAction::BindArchAction(Action *Input, const char *_ArchName)
>>  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
>> }
>> 
>> +void JobAction::anchor() {}
>> +
>> JobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
>>  : Action(Kind, Input, Type) {
>> }
>> @@ -54,38 +60,56 @@
>>  : Action(Kind, Inputs, Type) {
>> }
>> 
>> +void PreprocessJobAction::anchor() {}
>> +
>> PreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
>>  : JobAction(PreprocessJobClass, Input, OutputType) {
>> }
>> 
>> +void PrecompileJobAction::anchor() {}
>> +
>> PrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
>>  : JobAction(PrecompileJobClass, Input, OutputType) {
>> }
>> 
>> +void AnalyzeJobAction::anchor() {}
>> +
>> AnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
>>  : JobAction(AnalyzeJobClass, Input, OutputType) {
>> }
>> 
>> +void CompileJobAction::anchor() {}
>> +
>> CompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
>>  : JobAction(CompileJobClass, Input, OutputType) {
>> }
>> 
>> +void AssembleJobAction::anchor() {}
>> +
>> AssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
>>  : JobAction(AssembleJobClass, Input, OutputType) {
>> }
>> 
>> +void LinkJobAction::anchor() {}
>> +
>> LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
>>  : JobAction(LinkJobClass, Inputs, Type) {
>> }
>> 
>> +void LipoJobAction::anchor() {}
>> +
>> LipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
>>  : JobAction(LipoJobClass, Inputs, Type) {
>> }
>> 
>> +void DsymutilJobAction::anchor() {}
>> +
>> DsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
>>  : JobAction(DsymutilJobClass, Inputs, Type) {
>> }
>> 
>> +void VerifyJobAction::anchor() {}
>> +
>> VerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type)
>>  : JobAction(VerifyJobClass, Inputs, Type) {
>> }
>> 
>> Modified: cfe/trunk/lib/Driver/Job.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Job.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Job.cpp (original)
>> +++ cfe/trunk/lib/Driver/Job.cpp Mon Dec 19 20:48:34 2011
>> @@ -16,6 +16,8 @@
>> 
>> Job::~Job() {}
>> 
>> +void Command::anchor() {}
>> +
>> Command::Command(const Action &_Source, const Tool &_Creator,
>>                 const char *_Executable, const ArgStringList &_Arguments)
>>  : Job(CommandClass), Source(_Source), Creator(_Creator),
>> 
>> Modified: cfe/trunk/lib/Driver/ToolChains.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/ToolChains.cpp (original)
>> +++ cfe/trunk/lib/Driver/ToolChains.cpp Mon Dec 19 20:48:34 2011
>> @@ -192,6 +192,8 @@
>>  return Triple.getTriple();
>> }
>> 
>> +void Generic_ELF::anchor() {}
>> +
>> Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA,
>>                         const ActionList &Inputs) const {
>>  Action::ActionClass Key;
>> 
>> Modified: cfe/trunk/lib/Driver/ToolChains.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/ToolChains.h (original)
>> +++ cfe/trunk/lib/Driver/ToolChains.h Mon Dec 19 20:48:34 2011
>> @@ -423,7 +423,8 @@
>> };
>> 
>> class LLVM_LIBRARY_VISIBILITY Generic_ELF : public Generic_GCC {
>> - public:
>> +  virtual void anchor();
>> +public:
>>  Generic_ELF(const HostInfo &Host, const llvm::Triple& Triple)
>>    : Generic_GCC(Host, Triple) {}
>> 
>> 
>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Dec 19 20:48:34 2011
>> @@ -2865,6 +2865,8 @@
>>  }
>> }
>> 
>> +void darwin::CC1::anchor() {}
>> +
>> const char *darwin::CC1::getBaseInputName(const ArgList &Args,
>>                                          const InputInfoList &Inputs) {
>>  return Args.MakeArgString(
>> @@ -3509,6 +3511,8 @@
>>  C.addCommand(new Command(JA, *this, Exec, CmdArgs));
>> }
>> 
>> +void darwin::DarwinTool::anchor() {}
>> +
>> void darwin::DarwinTool::AddDarwinArch(const ArgList &Args,
>>                                       ArgStringList &CmdArgs) const {
>>  StringRef ArchName = getDarwinToolChain().getDarwinArchName(Args);
>> 
>> Modified: cfe/trunk/lib/Driver/Tools.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Tools.h (original)
>> +++ cfe/trunk/lib/Driver/Tools.h Mon Dec 19 20:48:34 2011
>> @@ -192,6 +192,7 @@
>> 
>> namespace darwin {
>>  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
>> +    virtual void anchor();
>>  protected:
>>    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
>> 
>> @@ -205,6 +206,7 @@
>>  };
>> 
>>  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
>> +    virtual void anchor();
>>  public:
>>    static const char *getBaseInputName(const ArgList &Args,
>>                                 const InputInfoList &Input);
>> 
>> Added: cfe/trunk/lib/Frontend/ChainedDiagnosticConsumer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ChainedDiagnosticConsumer.cpp?rev=146959&view=auto
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/ChainedDiagnosticConsumer.cpp (added)
>> +++ cfe/trunk/lib/Frontend/ChainedDiagnosticConsumer.cpp Mon Dec 19 20:48:34 2011
>> @@ -0,0 +1,14 @@
>> +//===- ChainedDiagnosticConsumer.cpp - Chain Diagnostic Clients -*- C++ -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "clang/Frontend/ChainedDiagnosticConsumer.h"
>> +
>> +using namespace clang;
>> +
>> +void ChainedDiagnosticConsumer::anchor() { }
>> 
>> Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/FrontendAction.cpp (original)
>> +++ cfe/trunk/lib/Frontend/FrontendAction.cpp Mon Dec 19 20:48:34 2011
>> @@ -411,6 +411,8 @@
>>  ParseAST(CI.getSema(), CI.getFrontendOpts().ShowStats);
>> }
>> 
>> +void PluginASTAction::anchor() { }
>> +
>> ASTConsumer *
>> PreprocessorFrontendAction::CreateASTConsumer(CompilerInstance &CI,
>>                                              StringRef InFile) {
>> 
>> Modified: cfe/trunk/lib/Lex/Lexer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/Lexer.cpp (original)
>> +++ cfe/trunk/lib/Lex/Lexer.cpp Mon Dec 19 20:48:34 2011
>> @@ -59,6 +59,8 @@
>> // Lexer Class Implementation
>> //===----------------------------------------------------------------------===//
>> 
>> +void Lexer::anchor() { }
>> +
>> void Lexer::InitLexer(const char *BufStart, const char *BufPtr,
>>                      const char *BufEnd) {
>>  InitCharacterInfo();
>> 
>> Added: cfe/trunk/lib/Lex/PPCallbacks.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPCallbacks.cpp?rev=146959&view=auto
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/PPCallbacks.cpp (added)
>> +++ cfe/trunk/lib/Lex/PPCallbacks.cpp Mon Dec 19 20:48:34 2011
>> @@ -0,0 +1,14 @@
>> +//===--- PPCallbacks.cpp - Callbacks for Preprocessor actions ---*- C++ -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "clang/Lex/PPCallbacks.h"
>> +
>> +using namespace clang;
>> +
>> +void PPChainedCallbacks::anchor() { }
>> 
>> Modified: cfe/trunk/lib/Lex/PreprocessorLexer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PreprocessorLexer.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/PreprocessorLexer.cpp (original)
>> +++ cfe/trunk/lib/Lex/PreprocessorLexer.cpp Mon Dec 19 20:48:34 2011
>> @@ -17,6 +17,8 @@
>> #include "clang/Basic/SourceManager.h"
>> using namespace clang;
>> 
>> +void PreprocessorLexer::anchor() { }
>> +
>> PreprocessorLexer::PreprocessorLexer(Preprocessor *pp, FileID fid)
>>  : PP(pp), FID(fid), InitialNumSLocEntries(0),
>>    ParsingPreprocessorDirective(false),
>> 
>> Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
>> +++ cfe/trunk/lib/Parse/ParseObjc.cpp Mon Dec 19 20:48:34 2011
>> @@ -284,6 +284,9 @@
>> /// The Objective-C property callback.  This should be defined where
>> /// it's used, but instead it's been lifted to here to support VS2005.
>> struct Parser::ObjCPropertyCallback : FieldCallback {
>> +private:
>> +  virtual void anchor();
>> +public:
>>  Parser &P;
>>  SmallVectorImpl<Decl *> &Props;
>>  ObjCDeclSpec &OCDS;
>> @@ -337,6 +340,9 @@
>>  }
>> };
>> 
>> +void Parser::ObjCPropertyCallback::anchor() {
>> +}
>> +
>> ///   objc-interface-decl-list:
>> ///     empty
>> ///     objc-interface-decl-list objc-property-decl [OBJC2]
>> 
>> Modified: cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp (original)
>> +++ cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp Mon Dec 19 20:48:34 2011
>> @@ -634,6 +634,7 @@
>>  }
>> };
>> 
>> +namespace {
>> class ThreadSafetyReporter : public clang::thread_safety::ThreadSafetyHandler {
>>  Sema &S;
>>  DiagList Warnings;
>> @@ -744,6 +745,7 @@
>> };
>> }
>> }
>> +}
>> 
>> //===----------------------------------------------------------------------===//
>> // AnalysisBasedWarnings - Worker object used by Sema to execute analysis-based
>> 
>> Added: cfe/trunk/lib/Sema/SemaConsumer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaConsumer.cpp?rev=146959&view=auto
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaConsumer.cpp (added)
>> +++ cfe/trunk/lib/Sema/SemaConsumer.cpp Mon Dec 19 20:48:34 2011
>> @@ -0,0 +1,14 @@
>> +//===-- SemaConsumer.cpp - Abstract interface for AST semantics -*- C++ -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "clang/Sema/SemaConsumer.h"
>> +
>> +using namespace clang;
>> +
>> +void SemaConsumer::anchor() { }
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/AnalysisManager.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/AnalysisManager.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/AnalysisManager.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/AnalysisManager.cpp Mon Dec 19 20:48:34 2011
>> @@ -14,6 +14,8 @@
>> using namespace clang;
>> using namespace ento;
>> 
>> +void AnalysisManager::anchor() { }
>> +
>> AnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
>>                                 const LangOptions &lang,
>>                                 PathDiagnosticConsumer *pd,
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp Mon Dec 19 20:48:34 2011
>> @@ -34,6 +34,8 @@
>> 
>> BugReporterVisitor::~BugReporterVisitor() {}
>> 
>> +void BugReporterContext::anchor() {}
>> +
>> //===----------------------------------------------------------------------===//
>> // Helper routines for walking the ExplodedGraph and fetching statements.
>> //===----------------------------------------------------------------------===//
>> @@ -1204,10 +1206,14 @@
>> 
>> void BugType::FlushReports(BugReporter &BR) {}
>> 
>> +void BuiltinBug::anchor() {}
>> +
>> //===----------------------------------------------------------------------===//
>> // Methods for BugReport and subclasses.
>> //===----------------------------------------------------------------------===//
>> 
>> +void BugReport::NodeResolver::anchor() {}
>> +
>> void BugReport::addVisitor(BugReporterVisitor* visitor) {
>>  if (!visitor)
>>    return;
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/Checker.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/Checker.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/Checker.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/Checker.cpp Mon Dec 19 20:48:34 2011
>> @@ -20,3 +20,11 @@
>>  // FIXME: We want to return the package + name of the checker here.
>>  return "A Checker";  
>> }
>> +
>> +void Checker<check::_VoidCheck, check::_VoidCheck, check::_VoidCheck,
>> +             check::_VoidCheck, check::_VoidCheck, check::_VoidCheck,
>> +             check::_VoidCheck, check::_VoidCheck, check::_VoidCheck,
>> +             check::_VoidCheck, check::_VoidCheck, check::_VoidCheck,
>> +             check::_VoidCheck, check::_VoidCheck, check::_VoidCheck,
>> +             check::_VoidCheck, check::_VoidCheck, check::_VoidCheck
>> +             >::anchor() { }
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp Mon Dec 19 20:48:34 2011
>> @@ -537,6 +537,8 @@
>> }
>> 
>> 
>> +void NodeBuilder::anchor() { }
>> +
>> ExplodedNode* NodeBuilder::generateNodeImpl(const ProgramPoint &Loc,
>>                                            const ProgramState *State,
>>                                            ExplodedNode *FromN,
>> @@ -556,6 +558,8 @@
>>  return N;
>> }
>> 
>> +void NodeBuilderWithSinks::anchor() { }
>> +
>> StmtNodeBuilder::~StmtNodeBuilder() {
>>  if (EnclosingBldr)
>>    for (ExplodedNodeSet::iterator I = Frontier.begin(),
>> @@ -563,6 +567,8 @@
>>      EnclosingBldr->addNodes(*I);
>> }
>> 
>> +void BranchNodeBuilder::anchor() { }
>> +
>> ExplodedNode *BranchNodeBuilder::generateNode(const ProgramState *State,
>>                                              bool branch,
>>                                              ExplodedNode *NodePred) {
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp Mon Dec 19 20:48:34 2011
>> @@ -379,6 +379,8 @@
>>  return G;
>> }
>> 
>> +void InterExplodedGraphMap::anchor() { }
>> +
>> ExplodedNode*
>> InterExplodedGraphMap::getMappedNode(const ExplodedNode *N) const {
>>  llvm::DenseMap<const ExplodedNode*, ExplodedNode*>::const_iterator I =
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp Mon Dec 19 20:48:34 2011
>> @@ -384,6 +384,20 @@
>> }
>> 
>> //===----------------------------------------------------------------------===//
>> +// Region anchors.
>> +//===----------------------------------------------------------------------===//
>> +
>> +void GlobalsSpaceRegion::anchor() { }
>> +void HeapSpaceRegion::anchor() { }
>> +void UnknownSpaceRegion::anchor() { }
>> +void StackLocalsSpaceRegion::anchor() { }
>> +void StackArgumentsSpaceRegion::anchor() { }
>> +void TypedRegion::anchor() { }
>> +void TypedValueRegion::anchor() { }
>> +void CodeTextRegion::anchor() { }
>> +void SubRegion::anchor() { }
>> +
>> +//===----------------------------------------------------------------------===//
>> // Region pretty-printing.
>> //===----------------------------------------------------------------------===//
>> 
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp Mon Dec 19 20:48:34 2011
>> @@ -82,6 +82,8 @@
>>    Desc(StripTrailingDots(desc)),
>>    Category(StripTrailingDots(category)) {}
>> 
>> +void PathDiagnosticConsumer::anchor() { }
>> +
>> void PathDiagnosticConsumer::HandlePathDiagnostic(const PathDiagnostic *D) {
>>  // For now this simply forwards to HandlePathDiagnosticImpl.  In the future
>>  // we can use this indirection to control for multi-threaded access to
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp Mon Dec 19 20:48:34 2011
>> @@ -536,6 +536,8 @@
>>  return getPersistentState(NewState);
>> }
>> 
>> +void ScanReachableSymbols::anchor() { }
>> +
>> bool ScanReachableSymbols::scan(nonloc::CompoundVal val) {
>>  for (nonloc::CompoundVal::iterator I=val.begin(), E=val.end(); I!=E; ++I)
>>    if (!scan(*I))
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp Mon Dec 19 20:48:34 2011
>> @@ -25,6 +25,8 @@
>> // Basic SVal creation.
>> //===----------------------------------------------------------------------===//
>> 
>> +void SValBuilder::anchor() { }
>> +
>> DefinedOrUnknownSVal SValBuilder::makeZeroVal(QualType type) {
>>  if (Loc::isLocType(type))
>>    return makeNull();
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/Store.cpp Mon Dec 19 20:48:34 2011
>> @@ -331,3 +331,5 @@
>> 
>> StoreManager::BindingsHandler::~BindingsHandler() {}
>> 
>> +void SubRegionMap::anchor() { }
>> +void SubRegionMap::Visitor::anchor() { }
>> 
>> Added: cfe/trunk/lib/StaticAnalyzer/Core/SubEngine.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/SubEngine.cpp?rev=146959&view=auto
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/SubEngine.cpp (added)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/SubEngine.cpp Mon Dec 19 20:48:34 2011
>> @@ -0,0 +1,14 @@
>> +//== SubEngine.cpp - Interface of the subengine of CoreEngine ------*- C++ -*-//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h"
>> +
>> +using namespace clang::ento;
>> +
>> +void SubEngine::anchor() { }
>> 
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/SymbolManager.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/SymbolManager.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/SymbolManager.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/SymbolManager.cpp Mon Dec 19 20:48:34 2011
>> @@ -21,6 +21,8 @@
>> using namespace clang;
>> using namespace ento;
>> 
>> +void SymExpr::anchor() { }
>> +
>> void SymExpr::dump() const {
>>  dumpToStream(llvm::errs());
>> }
>> @@ -99,6 +101,8 @@
>>     << getRegion() << ',' << T.getAsString() << '}';
>> }
>> 
>> +void SymbolData::anchor() { }
>> +
>> void SymbolRegionValue::dumpToStream(raw_ostream &os) const {
>>  os << "reg_$" << getSymbolID() << "<" << R << ">";
>> }
>> 
>> Modified: cfe/trunk/utils/TableGen/TableGen.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/TableGen.cpp?rev=146959&r1=146958&r2=146959&view=diff
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/TableGen.cpp (original)
>> +++ cfe/trunk/utils/TableGen/TableGen.cpp Mon Dec 19 20:48:34 2011
>> @@ -96,7 +96,6 @@
>>  ClangComponent("clang-component",
>>                 cl::desc("Only use warnings from specified component"),
>>                 cl::value_desc("component"), cl::Hidden);
>> -}
>> 
>> class ClangTableGenAction : public TableGenAction {
>> public:
>> @@ -165,6 +164,7 @@
>>    return false;
>>  }
>> };
>> +}
>> 
>> int main(int argc, char **argv) {
>>  sys::PrintStackTraceOnErrorSignal();
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list