diff options
Diffstat (limited to 'lib/Transforms')
46 files changed, 146 insertions, 97 deletions
diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp index 8e51e77b86..3c57649f4e 100644 --- a/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -44,6 +44,7 @@ #include "llvm/ADT/DepthFirstIterator.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/Support/Compiler.h" #include <set> using namespace llvm; @@ -54,7 +55,7 @@ STATISTIC(NumArgumentsDead , "Number of dead pointer args eliminated"); namespace { /// ArgPromotion - The 'by reference' to 'by value' argument promotion pass. /// - struct ArgPromotion : public CallGraphSCCPass { + struct VISIBILITY_HIDDEN ArgPromotion : public CallGraphSCCPass { virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired<AliasAnalysis>(); AU.addRequired<TargetData>(); diff --git a/lib/Transforms/IPO/ConstantMerge.cpp b/lib/Transforms/IPO/ConstantMerge.cpp index 291653376e..11ec09ab2e 100644 --- a/lib/Transforms/IPO/ConstantMerge.cpp +++ b/lib/Transforms/IPO/ConstantMerge.cpp @@ -22,12 +22,13 @@ #include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Support/Compiler.h" using namespace llvm; STATISTIC(NumMerged, "Number of global constants merged"); namespace { - struct ConstantMerge : public ModulePass { + struct VISIBILITY_HIDDEN ConstantMerge : public ModulePass { // run - For this pass, process all of the globals in the module, // eliminating duplicate constants. // diff --git a/lib/Transforms/IPO/DeadArgumentElimination.cpp b/lib/Transforms/IPO/DeadArgumentElimination.cpp index fd1be4dda2..149043d05c 100644 --- a/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -29,6 +29,7 @@ #include "llvm/Support/CallSite.h" #include "llvm/Support/Debug.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Support/Compiler.h" #include <set> using namespace llvm; @@ -38,7 +39,7 @@ STATISTIC(NumRetValsEliminated , "Number of unused return values removed"); namespace { /// DAE - The dead argument elimination pass. /// - class DAE : public ModulePass { + class VISIBILITY_HIDDEN DAE : public ModulePass { /// Liveness enum - During our initial pass over the program, we determine /// that things are either definately alive, definately dead, or in need of /// interprocedural analysis (MaybeLive). diff --git a/lib/Transforms/IPO/DeadTypeElimination.cpp b/lib/Transforms/IPO/DeadTypeElimination.cpp index 18724bb9db..a72a48cc63 100644 --- a/lib/Transforms/IPO/DeadTypeElimination.cpp +++ b/lib/Transforms/IPO/DeadTypeElimination.cpp @@ -19,12 +19,13 @@ #include "llvm/TypeSymbolTable.h" #include "llvm/DerivedTypes.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Support/Compiler.h" using namespace llvm; STATISTIC(NumKilled, "Number of unused typenames removed from symtab"); namespace { - struct DTE : public ModulePass { + struct VISIBILITY_HIDDEN DTE : public ModulePass { // doPassInitialization - For this pass, it removes global symbol table // entries for primitive types. These are never used for linking in GCC and // they make the output uglier to look at, so we nuke them. diff --git a/lib/Transforms/IPO/ExtractFunction.cpp b/lib/Transforms/IPO/ExtractFunction.cpp index f8771845a6..ae1eb22478 100644 --- a/lib/Transforms/IPO/ExtractFunction.cpp +++ b/lib/Transforms/IPO/ExtractFunction.cpp @@ -15,10 +15,12 @@ #include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Transforms/IPO.h" +#include "llvm/Support/Compiler.h" using namespace llvm; namespace { - class FunctionExtractorPass : public ModulePass { + /// @brief A pass to extract specific functions and their dependencies. + class VISIBILITY_HIDDEN FunctionExtractorPass : public ModulePass { Function *Named; bool deleteFunc; bool reLink; diff --git a/lib/Transforms/IPO/GlobalDCE.cpp b/lib/Transforms/IPO/GlobalDCE.cpp index 0f868f976b..7fd110208f 100644 --- a/lib/Transforms/IPO/GlobalDCE.cpp +++ b/lib/Transforms/IPO/GlobalDCE.cpp @@ -21,6 +21,7 @@ #include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Support/Compiler.h" #include <set> using namespace llvm; @@ -28,7 +29,7 @@ STATISTIC(NumFunctions, "Number of functions removed"); STATISTIC(NumVariables, "Number of global variables removed"); namespace { - struct GlobalDCE : public ModulePass { + struct VISIBILITY_HIDDEN GlobalDCE : public ModulePass { // run - Do the GlobalDCE pass on the specified module, optionally updating // the specified callgraph to reflect the changes. // diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index d57047bc32..5be5ace315 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -24,6 +24,7 @@ #include "llvm/Pass.h" #include "llvm/Analysis/ConstantFolding.h" #include "llvm/Target/TargetData.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" @@ -45,7 +46,7 @@ STATISTIC(NumFastCallFns , "Number of functions converted to fastcc"); STATISTIC(NumCtorsEvaluated, "Number of static ctors evaluated"); namespace { - struct GlobalOpt : public ModulePass { + struct VISIBILITY_HIDDEN GlobalOpt : public ModulePass { virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired<TargetData>(); } @@ -68,7 +69,7 @@ ModulePass *llvm::createGlobalOptimizerPass() { return new GlobalOpt(); } /// GlobalStatus - As we analyze each global, keep track of some information /// about it. If we find out that the address of the global is taken, none of /// this info will be accurate. -struct GlobalStatus { +struct VISIBILITY_HIDDEN GlobalStatus { /// isLoaded - True if the global is ever loaded. If the global isn't ever /// loaded it can be deleted. bool isLoaded; diff --git a/lib/Transforms/IPO/IPConstantPropagation.cpp b/lib/Transforms/IPO/IPConstantPropagation.cpp index daaa5a7121..af4fb69c82 100644 --- a/lib/Transforms/IPO/IPConstantPropagation.cpp +++ b/lib/Transforms/IPO/IPConstantPropagation.cpp @@ -22,6 +22,7 @@ #include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Support/CallSite.h" +#include "llvm/Support/Compiler.h" #include "llvm/ADT/Statistic.h" using namespace llvm; @@ -31,7 +32,7 @@ STATISTIC(NumReturnValProped, "Number of return values turned into constants"); namespace { /// IPCP - The interprocedural constant propagation pass /// - struct IPCP : public ModulePass { + struct VISIBILITY_HIDDEN IPCP : public ModulePass { bool runOnModule(Module &M); private: bool PropagateConstantsIntoArguments(Function &F); diff --git a/lib/Transforms/IPO/IndMemRemoval.cpp b/lib/Transforms/IPO/IndMemRemoval.cpp index 343fadb637..6c80aca148 100644 --- a/lib/Transforms/IPO/IndMemRemoval.cpp +++ b/lib/Transforms/IPO/IndMemRemoval.cpp @@ -23,13 +23,14 @@ #include "llvm/Type.h" #include "llvm/DerivedTypes.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Support/Compiler.h" using namespace llvm; STATISTIC(NumBounceSites, "Number of sites modified"); STATISTIC(NumBounce , "Number of bounce functions created"); namespace { - class IndMemRemPass : public ModulePass { + class VISIBILITY_HIDDEN IndMemRemPass : public ModulePass { public: virtual bool runOnModule(Module &M); }; diff --git a/lib/Transforms/IPO/InlineSimple.cpp b/lib/Transforms/IPO/InlineSimple.cpp index 9ee69d92b5..64de9c395e 100644 --- a/lib/Transforms/IPO/InlineSimple.cpp +++ b/lib/Transforms/IPO/InlineSimple.cpp @@ -18,11 +18,12 @@ #include "llvm/Function.h" #include "llvm/Type.h" #include "llvm/Support/CallSite.h" +#include "llvm/Support/Compiler.h" #include "llvm/Transforms/IPO.h" using namespace llvm; namespace { - struct ArgInfo { + struct VISIBILITY_HIDDEN ArgInfo { unsigned ConstantWeight; unsigned AllocaWeight; @@ -32,7 +33,7 @@ namespace { // FunctionInfo - For each function, calculate the size of it in blocks and // instructions. - struct FunctionInfo { + struct VISIBILITY_HIDDEN FunctionInfo { // NumInsts, NumBlocks - Keep track of how large each function is, which is // used to estimate the code size cost of inlining it. unsigned NumInsts, NumBlocks; @@ -50,7 +51,7 @@ namespace { void analyzeFunction(Function *F); }; - class SimpleInliner : public Inliner { + class VISIBILITY_HIDDEN SimpleInliner : public Inliner { std::map<const Function*, FunctionInfo> CachedFunctionInfo; public: int getInlineCost(CallSite CS); diff --git a/lib/Transforms/IPO/Internalize.cpp b/lib/Transforms/IPO/Internalize.cpp index eebc70a47f..a1ebe956e5 100644 --- a/lib/Transforms/IPO/Internalize.cpp +++ b/lib/Transforms/IPO/Internalize.cpp @@ -18,6 +18,7 @@ #include "llvm/Pass.h" #include "llvm/Module.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" #include "llvm/ADT/Statistic.h" #include <fstream> @@ -41,7 +42,7 @@ namespace { cl::desc("A list of symbol names to preserve"), cl::CommaSeparated); - class InternalizePass : public ModulePass { + class VISIBILITY_HIDDEN InternalizePass : public ModulePass { std::set<std::string> ExternalNames; bool DontInternalize; public: diff --git a/lib/Transforms/IPO/LoopExtractor.cpp b/lib/Transforms/IPO/LoopExtractor.cpp index 7169b503b2..e99fa78a7d 100644 --- a/lib/Transforms/IPO/LoopExtractor.cpp +++ b/lib/Transforms/IPO/LoopExtractor.cpp @@ -21,6 +21,7 @@ #include "llvm/Pass.h" #include "llvm/Analysis/Dominators.h" #include "llvm/Analysis/LoopInfo.h" +#include "llvm/Support/Compiler.h" #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Utils/FunctionUtils.h" #include "llvm/ADT/Statistic.h" @@ -32,7 +33,7 @@ namespace { // FIXME: This is not a function pass, but the PassManager doesn't allow // Module passes to require FunctionPasses, so we can't get loop info if we're // not a function pass. - struct LoopExtractor : public FunctionPass { + struct VISIBILITY_HIDDEN LoopExtractor : public FunctionPass { unsigned NumLoops; LoopExtractor(unsigned numLoops = ~0) : NumLoops(numLoops) {} diff --git a/lib/Transforms/IPO/LowerSetJmp.cpp b/lib/Transforms/IPO/LowerSetJmp.cpp index 8941c8b7b7..fcaa4e8ac5 100644 --- a/lib/Transforms/IPO/LowerSetJmp.cpp +++ b/lib/Transforms/IPO/LowerSetJmp.cpp @@ -42,6 +42,7 @@ #include "llvm/Module.h" #include "llvm/Pass.h" #include "llvm/Support/CFG.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/InstVisitor.h" #include "llvm/Transforms/Utils/Local.h" #include "llvm/ADT/DepthFirstIterator.h" @@ -58,7 +59,7 @@ STATISTIC(InvokesTransformed , "Number of invokes modified"); namespace { //===--------------------------------------------------------------------===// // LowerSetJmp pass implementation. - class LowerSetJmp : public ModulePass, + class VISIBILITY_HIDDEN LowerSetJmp : public ModulePass, public InstVisitor<LowerSetJmp> { // LLVM library functions... Constant *InitSJMap; // __llvm_sjljeh_init_setjmpmap diff --git a/lib/Transforms/IPO/PruneEH.cpp b/lib/Transforms/IPO/PruneEH.cpp index c92f428914..d6043a1df5 100644 --- a/lib/Transforms/IPO/PruneEH.cpp +++ b/lib/Transforms/IPO/PruneEH.cpp @@ -24,6 +24,7 @@ #include "llvm/Analysis/CallGraph.h" #include "llvm/ADT/Statistic.h" #include "llvm/Support/CFG.h" +#include "llvm/Support/Compiler.h" #include <set> #include <algorithm> using namespace llvm; @@ -32,7 +33,7 @@ STATISTIC(NumRemoved, "Number of invokes removed"); STATISTIC(NumUnreach, "Number of noreturn calls optimized"); namespace { - struct PruneEH : public CallGraphSCCPass { + struct VISIBILITY_HIDDEN PruneEH : public CallGraphSCCPass { /// DoesNotUnwind - This set contains all of the functions which we have /// determined cannot unwind. std::set<CallGraphNode*> DoesNotUnwind; diff --git a/lib/Transforms/IPO/RaiseAllocations.cpp b/lib/Transforms/IPO/RaiseAllocations.cpp index c5a9cbf447..b689de7083 100644 --- a/lib/Transforms/IPO/RaiseAllocations.cpp +++ b/lib/Transforms/IPO/RaiseAllocations.cpp @@ -20,6 +20,7 @@ #include "llvm/Instructions.h" #include "llvm/Pass.h" #include "llvm/Support/CallSite.h" +#include "llvm/Support/Compiler.h" #include "llvm/ADT/Statistic.h" using namespace llvm; @@ -29,7 +30,7 @@ namespace { // RaiseAllocations - Turn %malloc and %free calls into the appropriate // instruction. // - class RaiseAllocations : public ModulePass { + class VISIBILITY_HIDDEN RaiseAllocations : public ModulePass { Function *MallocFunc; // Functions in the module we are processing Function *FreeFunc; // Initialized by doPassInitializationVirt public: diff --git a/lib/Transforms/IPO/SimplifyLibCalls.cpp b/lib/Transforms/IPO/SimplifyLibCalls.cpp index 3ace4b365f..51d70b1dac 100644 --- a/lib/Transforms/IPO/SimplifyLibCalls.cpp +++ b/lib/Transforms/IPO/SimplifyLibCalls.cpp @@ -26,6 +26,7 @@ #include "llvm/ADT/hash_map" #include "llvm/ADT/Statistic.h" #include "llvm/Config/config.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" #include "llvm/Target/TargetData.h" #include "llvm/Transforms/IPO.h" @@ -62,7 +63,7 @@ static LibCallOptimization *OptList = 0; /// generally short-circuit actually calling the function if there's a simpler /// way (e.g. strlen(X) can be reduced to a constant if X is a constant global). /// @brief Base class for library call optimizations -class LibCallOptimization { +class VISIBILITY_HIDDEN LibCallOptimization { LibCallOptimization **Prev, *Next; const char *FunctionName; ///< Name of the library call we optimize #ifndef NDEBUG @@ -142,7 +143,7 @@ public: /// validate the call (ValidateLibraryCall). If it is validated, then /// the OptimizeCall method is also called. /// @brief A ModulePass for optimizing well-known function calls. -class SimplifyLibCalls : public ModulePass { +class VISIBILITY_HIDDEN SimplifyLibCalls : public ModulePass { public: /// We need some target data for accurate signature details that are /// target dependent. So we require target data in our AnalysisUsage. @@ -383,15 +384,16 @@ ModulePass *llvm::createSimplifyLibCallsPass() { namespace { // Forward declare utility functions. -bool getConstantStringLength(Value* V, uint64_t& len, ConstantArray** A = 0 ); -Value *CastToCStr(Value *V, Instruction &IP); +static bool getConstantStringLength(Value* V, uint64_t& len, + ConstantArray** A = 0 ); +static Value *CastToCStr(Value *V, Instruction &IP); /// This LibCallOptimization will find instances of a call to "exit" that occurs /// within the "main" function and change it to a simple "ret" instruction with /// the same value passed to the exit function. When this is done, it splits the /// basic block at the exit(3) call and deletes the call instruction. /// @brief Replace calls to exit in main with a simple return -struct ExitInMainOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN ExitInMainOptimization : public LibCallOptimization { ExitInMainOptimization() : LibCallOptimization("exit", "Number of 'exit' calls simplified") {} @@ -447,7 +449,7 @@ struct ExitInMainOptimization : public LibCallOptimization { /// of the constant string. Both of these calls are further reduced, if possible /// on subsequent passes. /// @brief Simplify the strcat library function. -struct StrCatOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN StrCatOptimization : public LibCallOptimization { public: /// @brief Default constructor StrCatOptimization() : LibCallOptimization("strcat", @@ -530,7 +532,7 @@ public: /// function. It optimizes out cases where the arguments are both constant /// and the result can be determined statically. /// @brief Simplify the strcmp library function. -struct StrChrOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN StrChrOptimization : public LibCallOptimization { public: StrChrOptimization() : LibCallOptimization("strchr", "Number of 'strchr' calls simplified") {} @@ -611,7 +613,7 @@ public: /// function. It optimizes out cases where one or both arguments are constant /// and the result can be determined statically. /// @brief Simplify the strcmp library function. -struct StrCmpOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN StrCmpOptimization : public LibCallOptimization { public: StrCmpOptimization() : LibCallOptimization("strcmp", "Number of 'strcmp' calls simplified") {} @@ -688,7 +690,7 @@ public: /// function. It optimizes out cases where one or both arguments are constant /// and the result can be determined statically. /// @brief Simplify the strncmp library function. -struct StrNCmpOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN StrNCmpOptimization : public LibCallOptimization { public: StrNCmpOptimization() : LibCallOptimization("strncmp", "Number of 'strncmp' calls simplified") {} @@ -781,7 +783,7 @@ public: /// (1) If src and dest are the same and not volatile, just return dest /// (2) If the src is a constant then we can convert to llvm.memmove /// @brief Simplify the strcpy library function. -struct StrCpyOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN StrCpyOptimization : public LibCallOptimization { public: StrCpyOptimization() : LibCallOptimization("strcpy", "Number of 'strcpy' calls simplified") {} @@ -859,7 +861,7 @@ public: /// function by replacing it with a constant value if the string provided to /// it is a constant array. /// @brief Simplify the strlen library function. -struct StrLenOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN StrLenOptimization : public LibCallOptimization { StrLenOptimization() : LibCallOptimization("strlen", "Number of 'strlen' calls simplified") {} @@ -947,7 +949,7 @@ static bool IsOnlyUsedInEqualsZeroComparison(Instruction *I) { /// This memcmpOptimization will simplify a call to the memcmp library /// function. -struct memcmpOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN memcmpOptimization : public LibCallOptimization { /// @brief Default Constructor memcmpOptimization() : LibCallOptimization("memcmp", "Number of 'memcmp' calls simplified") {} @@ -1052,7 +1054,7 @@ struct memcmpOptimization : public LibCallOptimization { /// bytes depending on the length of the string and the alignment. Additional /// optimizations are possible in code generation (sequence of immediate store) /// @brief Simplify the memcpy library function. -struct LLVMMemCpyMoveOptzn : public LibCallOptimization { +struct VISIBILITY_HIDDEN LLVMMemCpyMoveOptzn : public LibCallOptimization { LLVMMemCpyMoveOptzn(const char* fname, const char* desc) : LibCallOptimization(fname, desc) {} @@ -1129,7 +1131,7 @@ LLVMMemCpyMoveOptzn LLVMMemMoveOptimizer64("llvm.memmove.i64", /// This LibCallOptimization will simplify a call to the memset library /// function by expanding it out to a single store of size 0, 1, 2, 4, or 8 /// bytes depending on the length argument. -struct LLVMMemSetOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN LLVMMemSetOptimization : public LibCallOptimization { /// @brief Default Constructor LLVMMemSetOptimization(const char *Name) : LibCallOptimization(Name, "Number of 'llvm.memset' calls simplified") {} @@ -1232,7 +1234,7 @@ LLVMMemSetOptimization MemSet64Optimizer("llvm.memset.i64"); /// function. It looks for cases where the result of pow is well known and /// substitutes the appropriate value. /// @brief Simplify the pow library function. -struct PowOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN PowOptimization : public LibCallOptimization { public: /// @brief Default Constructor PowOptimization() : LibCallOptimization("pow", @@ -1293,7 +1295,7 @@ public: /// function. It looks for cases where the result of printf is not used and the /// operation can be reduced to something simpler. /// @brief Simplify the printf library function. -struct PrintfOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN PrintfOptimization : public LibCallOptimization { public: /// @brief Default Constructor PrintfOptimization() : LibCallOptimization("printf", @@ -1371,7 +1373,7 @@ public: /// function. It looks for cases where the result of fprintf is not used and the /// operation can be reduced to something simpler. /// @brief Simplify the fprintf library function. -struct FPrintFOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN FPrintFOptimization : public LibCallOptimization { public: /// @brief Default Constructor FPrintFOptimization() : LibCallOptimization("fprintf", @@ -1491,7 +1493,7 @@ public: /// function. It looks for cases where the result of sprintf is not used and the /// operation can be reduced to something simpler. /// @brief Simplify the sprintf library function. -struct SPrintFOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN SPrintFOptimization : public LibCallOptimization { public: /// @brief Default Constructor SPrintFOptimization() : LibCallOptimization("sprintf", @@ -1614,7 +1616,7 @@ public: /// function. It looks for cases where the result of fputs is not used and the /// operation can be reduced to something simpler. /// @brief Simplify the puts library function. -struct PutsOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN PutsOptimization : public LibCallOptimization { public: /// @brief Default Constructor PutsOptimization() : LibCallOptimization("fputs", @@ -1675,7 +1677,7 @@ public: /// This LibCallOptimization will simplify calls to the "isdigit" library /// function. It simply does range checks the parameter explicitly. /// @brief Simplify the isdigit library function. -struct isdigitOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN isdigitOptimization : public LibCallOptimization { public: isdigitOptimization() : LibCallOptimization("isdigit", "Number of 'isdigit' calls simplified") {} @@ -1716,7 +1718,7 @@ public: } } isdigitOptimizer; -struct isasciiOptimization : public LibCallOptimization { +struct VISIBILITY_HIDDEN isasciiOptimization : public LibCallOptimization { public: isasciiOptimization() : LibCallOptimization("isascii", "Number of 'isascii' calls simplified") {} @@ -1746,7 +1748,7 @@ public: |