forked from OSchip/llvm-project
Remove macro guards for extern template instantiations.
This is a C++11 feature that both GCC and MSVC have supported as ane extension long before C++11 was approved. llvm-svn: 242042
This commit is contained in:
parent
e448b5be05
commit
a667d1adb7
|
@ -202,8 +202,8 @@ public:
|
|||
void dump() const;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class DominanceFrontierBase<BasicBlock>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class ForwardDominanceFrontierBase<BasicBlock>);
|
||||
extern template class DominanceFrontierBase<BasicBlock>;
|
||||
extern template class ForwardDominanceFrontierBase<BasicBlock>;
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
|
|
|
@ -347,9 +347,7 @@ raw_ostream& operator<<(raw_ostream &OS, const LoopBase<BlockT, LoopT> &Loop) {
|
|||
}
|
||||
|
||||
// Implementation in LoopInfoImpl.h
|
||||
#ifdef __GNUC__
|
||||
__extension__ extern template class LoopBase<BasicBlock, Loop>;
|
||||
#endif
|
||||
extern template class LoopBase<BasicBlock, Loop>;
|
||||
|
||||
class Loop : public LoopBase<BasicBlock, Loop> {
|
||||
public:
|
||||
|
@ -633,9 +631,7 @@ public:
|
|||
};
|
||||
|
||||
// Implementation in LoopInfoImpl.h
|
||||
#ifdef __GNUC__
|
||||
__extension__ extern template class LoopInfoBase<BasicBlock, Loop>;
|
||||
#endif
|
||||
extern template class LoopInfoBase<BasicBlock, Loop>;
|
||||
|
||||
class LoopInfo : public LoopInfoBase<BasicBlock, Loop> {
|
||||
typedef LoopInfoBase<BasicBlock, Loop> BaseT;
|
||||
|
|
|
@ -902,9 +902,9 @@ inline raw_ostream &operator<<(raw_ostream &OS,
|
|||
return OS << Node.template getNodeAs<BlockT>()->getName();
|
||||
}
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class RegionBase<RegionTraits<Function>>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class RegionNodeBase<RegionTraits<Function>>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class RegionInfoBase<RegionTraits<Function>>);
|
||||
extern template class RegionBase<RegionTraits<Function>>;
|
||||
extern template class RegionNodeBase<RegionTraits<Function>>;
|
||||
extern template class RegionInfoBase<RegionTraits<Function>>;
|
||||
|
||||
} // End llvm namespace
|
||||
#endif
|
||||
|
|
|
@ -29,8 +29,8 @@ inline void DominatorTreeBase<MachineBasicBlock>::addRoot(MachineBasicBlock* MBB
|
|||
this->Roots.push_back(MBB);
|
||||
}
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class DomTreeNodeBase<MachineBasicBlock>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class DominatorTreeBase<MachineBasicBlock>);
|
||||
extern template class DomTreeNodeBase<MachineBasicBlock>;
|
||||
extern template class DominatorTreeBase<MachineBasicBlock>;
|
||||
|
||||
typedef DomTreeNodeBase<MachineBasicBlock> MachineDomTreeNode;
|
||||
|
||||
|
|
|
@ -37,10 +37,8 @@
|
|||
namespace llvm {
|
||||
|
||||
// Implementation in LoopInfoImpl.h
|
||||
#ifdef __GNUC__
|
||||
class MachineLoop;
|
||||
__extension__ extern template class LoopBase<MachineBasicBlock, MachineLoop>;
|
||||
#endif
|
||||
extern template class LoopBase<MachineBasicBlock, MachineLoop>;
|
||||
|
||||
class MachineLoop : public LoopBase<MachineBasicBlock, MachineLoop> {
|
||||
public:
|
||||
|
@ -65,10 +63,7 @@ private:
|
|||
};
|
||||
|
||||
// Implementation in LoopInfoImpl.h
|
||||
#ifdef __GNUC__
|
||||
__extension__ extern template
|
||||
class LoopInfoBase<MachineBasicBlock, MachineLoop>;
|
||||
#endif
|
||||
extern template class LoopInfoBase<MachineBasicBlock, MachineLoop>;
|
||||
|
||||
class MachineLoopInfo : public MachineFunctionPass {
|
||||
LoopInfoBase<MachineBasicBlock, MachineLoop> LI;
|
||||
|
|
|
@ -172,10 +172,9 @@ template <> struct GraphTraits<MachineRegionInfoPass*>
|
|||
}
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class RegionBase<RegionTraits<MachineFunction>>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class RegionNodeBase<RegionTraits<MachineFunction>>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class RegionInfoBase<RegionTraits<MachineFunction>>);
|
||||
|
||||
extern template class RegionBase<RegionTraits<MachineFunction>>;
|
||||
extern template class RegionNodeBase<RegionTraits<MachineFunction>>;
|
||||
extern template class RegionInfoBase<RegionTraits<MachineFunction>>;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -36,18 +36,14 @@ namespace llvm {
|
|||
template <typename IRUnitT> class AnalysisManager;
|
||||
class PreservedAnalyses;
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class DomTreeNodeBase<BasicBlock>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class DominatorTreeBase<BasicBlock>);
|
||||
extern template class DomTreeNodeBase<BasicBlock>;
|
||||
extern template class DominatorTreeBase<BasicBlock>;
|
||||
|
||||
#define LLVM_COMMA ,
|
||||
EXTERN_TEMPLATE_INSTANTIATION(void Calculate<Function LLVM_COMMA BasicBlock *>(
|
||||
DominatorTreeBase<GraphTraits<BasicBlock *>::NodeType> &DT LLVM_COMMA
|
||||
Function &F));
|
||||
EXTERN_TEMPLATE_INSTANTIATION(
|
||||
void Calculate<Function LLVM_COMMA Inverse<BasicBlock *> >(
|
||||
DominatorTreeBase<GraphTraits<Inverse<BasicBlock *> >::NodeType> &DT
|
||||
LLVM_COMMA Function &F));
|
||||
#undef LLVM_COMMA
|
||||
extern template void Calculate<Function, BasicBlock *>(
|
||||
DominatorTreeBase<GraphTraits<BasicBlock *>::NodeType> &DT, Function &F);
|
||||
extern template void Calculate<Function, Inverse<BasicBlock *>>(
|
||||
DominatorTreeBase<GraphTraits<Inverse<BasicBlock *>>::NodeType> &DT,
|
||||
Function &F);
|
||||
|
||||
typedef DomTreeNodeBase<BasicBlock> DomTreeNode;
|
||||
|
||||
|
|
|
@ -790,7 +790,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<bool>);
|
||||
extern template class basic_parser<bool>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<boolOrDefault>
|
||||
|
@ -816,7 +816,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<boolOrDefault>);
|
||||
extern template class basic_parser<boolOrDefault>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<int>
|
||||
|
@ -838,7 +838,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<int>);
|
||||
extern template class basic_parser<int>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<unsigned>
|
||||
|
@ -860,7 +860,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<unsigned>);
|
||||
extern template class basic_parser<unsigned>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<unsigned long long>
|
||||
|
@ -885,7 +885,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<unsigned long long>);
|
||||
extern template class basic_parser<unsigned long long>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<double>
|
||||
|
@ -907,7 +907,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<double>);
|
||||
extern template class basic_parser<double>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<float>
|
||||
|
@ -929,7 +929,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<float>);
|
||||
extern template class basic_parser<float>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<std::string>
|
||||
|
@ -954,7 +954,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<std::string>);
|
||||
extern template class basic_parser<std::string>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// parser<char>
|
||||
|
@ -979,7 +979,7 @@ public:
|
|||
void anchor() override;
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser<char>);
|
||||
extern template class basic_parser<char>;
|
||||
|
||||
//--------------------------------------------------
|
||||
// PrintOptionDiff
|
||||
|
@ -1254,11 +1254,11 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class opt<unsigned>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class opt<int>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class opt<std::string>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class opt<char>);
|
||||
EXTERN_TEMPLATE_INSTANTIATION(class opt<bool>);
|
||||
extern template class opt<unsigned>;
|
||||
extern template class opt<int>;
|
||||
extern template class opt<std::string>;
|
||||
extern template class opt<char>;
|
||||
extern template class opt<bool>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// list_storage class
|
||||
|
|
|
@ -174,19 +174,6 @@
|
|||
#define LLVM_UNLIKELY(EXPR) (EXPR)
|
||||
#endif
|
||||
|
||||
// C++ doesn't support 'extern template' of template specializations. GCC does,
|
||||
// but requires __extension__ before it. In the header, use this:
|
||||
// EXTERN_TEMPLATE_INSTANTIATION(class foo<bar>);
|
||||
// in the .cpp file, use this:
|
||||
// TEMPLATE_INSTANTIATION(class foo<bar>);
|
||||
#ifdef __GNUC__
|
||||
#define EXTERN_TEMPLATE_INSTANTIATION(X) __extension__ extern template X
|
||||
#define TEMPLATE_INSTANTIATION(X) template X
|
||||
#else
|
||||
#define EXTERN_TEMPLATE_INSTANTIATION(X)
|
||||
#define TEMPLATE_INSTANTIATION(X)
|
||||
#endif
|
||||
|
||||
/// LLVM_ATTRIBUTE_NOINLINE - On compilers where we have a directive to do so,
|
||||
/// mark a method "not for inlining".
|
||||
#if __has_attribute(noinline) || LLVM_GNUC_PREREQ(3, 4, 0)
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
using namespace llvm;
|
||||
|
||||
namespace llvm {
|
||||
TEMPLATE_INSTANTIATION(class DomTreeNodeBase<MachineBasicBlock>);
|
||||
TEMPLATE_INSTANTIATION(class DominatorTreeBase<MachineBasicBlock>);
|
||||
template class DomTreeNodeBase<MachineBasicBlock>;
|
||||
template class DominatorTreeBase<MachineBasicBlock>;
|
||||
}
|
||||
|
||||
char MachineDominatorTree::ID = 0;
|
||||
|
|
|
@ -62,18 +62,14 @@ bool BasicBlockEdge::isSingleEdge() const {
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
TEMPLATE_INSTANTIATION(class llvm::DomTreeNodeBase<BasicBlock>);
|
||||
TEMPLATE_INSTANTIATION(class llvm::DominatorTreeBase<BasicBlock>);
|
||||
template class llvm::DomTreeNodeBase<BasicBlock>;
|
||||
template class llvm::DominatorTreeBase<BasicBlock>;
|
||||
|
||||
#define LLVM_COMMA ,
|
||||
TEMPLATE_INSTANTIATION(void llvm::Calculate<Function LLVM_COMMA BasicBlock *>(
|
||||
DominatorTreeBase<GraphTraits<BasicBlock *>::NodeType> &DT LLVM_COMMA
|
||||
Function &F));
|
||||
TEMPLATE_INSTANTIATION(
|
||||
void llvm::Calculate<Function LLVM_COMMA Inverse<BasicBlock *> >(
|
||||
DominatorTreeBase<GraphTraits<Inverse<BasicBlock *> >::NodeType> &DT
|
||||
LLVM_COMMA Function &F));
|
||||
#undef LLVM_COMMA
|
||||
template void llvm::Calculate<Function, BasicBlock *>(
|
||||
DominatorTreeBase<GraphTraits<BasicBlock *>::NodeType> &DT, Function &F);
|
||||
template void llvm::Calculate<Function, Inverse<BasicBlock *>>(
|
||||
DominatorTreeBase<GraphTraits<Inverse<BasicBlock *>>::NodeType> &DT,
|
||||
Function &F);
|
||||
|
||||
// dominates - Return true if Def dominates a use in User. This performs
|
||||
// the special checks necessary if Def and User are in the same basic block.
|
||||
|
|
|
@ -46,21 +46,21 @@ using namespace cl;
|
|||
//
|
||||
namespace llvm {
|
||||
namespace cl {
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<bool>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<boolOrDefault>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<int>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<unsigned>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<unsigned long long>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<double>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<float>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<std::string>);
|
||||
TEMPLATE_INSTANTIATION(class basic_parser<char>);
|
||||
template class basic_parser<bool>;
|
||||
template class basic_parser<boolOrDefault>;
|
||||
template class basic_parser<int>;
|
||||
template class basic_parser<unsigned>;
|
||||
template class basic_parser<unsigned long long>;
|
||||
template class basic_parser<double>;
|
||||
template class basic_parser<float>;
|
||||
template class basic_parser<std::string>;
|
||||
template class basic_parser<char>;
|
||||
|
||||
TEMPLATE_INSTANTIATION(class opt<unsigned>);
|
||||
TEMPLATE_INSTANTIATION(class opt<int>);
|
||||
TEMPLATE_INSTANTIATION(class opt<std::string>);
|
||||
TEMPLATE_INSTANTIATION(class opt<char>);
|
||||
TEMPLATE_INSTANTIATION(class opt<bool>);
|
||||
template class opt<unsigned>;
|
||||
template class opt<int>;
|
||||
template class opt<std::string>;
|
||||
template class opt<char>;
|
||||
template class opt<bool>;
|
||||
}
|
||||
} // end namespace llvm::cl
|
||||
|
||||
|
|
Loading…
Reference in New Issue