[cfe-dev] More windows breakage
AlisdairM(public)
public at alisdairm.net
Wed Jul 1 07:55:30 PDT 2009
Sorry - I'm in the middle of subscribing to the cfe-commits list so can't reply directly to the actual commit:
Commit r74539 by Edwin Torok breaks at link time with MSVC.
The cause is the following:
+template<typename TargetInfo>
+class OSTargetInfo : public TargetInfo {
+protected:
+ virtual void getOSDefines(const LangOptions &Opts, const char *Triple,
+ std::vector<char> &Defines) const=0;
+public:
+ OSTargetInfo(const std::string& triple) : TargetInfo(triple) {}
+ virtual void getTargetDefines(const LangOptions &Opts,
+ std::vector<char> &Defines) const {
+ TargetInfo::getTargetDefines(Opts, Defines);
+ getOSDefines(Opts, TargetInfo::getTargetTriple(), Defines);
}
-}
Here, TargetInfo is used as a template parameter name, but it is also the name of the fundamental base class of types that will be used to instantiate the template. Therefore, the line
TargetInfo::getTargetDefines(Opts, Defines);
is being dispatched to the base class called TargetInfo, rather than the type referred to by the template parameter name TargetInfo. As this is a pure abstract method, I presumed static dispatch should have been a compile-time rather than link-time error, but apparently not with MSVC.
Patch attached.
AlisdairM
-------------- next part --------------
A non-text attachment was scrubbed...
Name: TargetInfo.patch
Type: application/octet-stream
Size: 1141 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20090701/55688be2/attachment.obj>
More information about the cfe-dev
mailing list