<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hi all!<br>
<br>
This patch fixes the following problem:<br>
struct first {<br>
virtual void asdf() {}<br>
virtual void g(){}<br>
};<br>
<br>
struct second : virtual first {<br>
int q;<br>
virtual void asdf() { q = 90; }<br>
virtual void g(){ q = 12; }<br>
};<br>
<br>
struct third : virtual second {};<br>
void test2() { third *t; }<br>
<br>
In clang "second" has vtordisp for "first", but MSVC doesn`t
generate vtordisp for "first".<br>
According msdn " If a derived class overrides a virtual function
that it inherits from a virtual base class,<b> and if a constructor
or destructor for the derived class calls that function using a
pointer to the virtual base class</b>, the compiler may introduce
additional hidden "vtordisp" fields into classes with virtual bases.
".<br>
So in in this example "second" will not have vtordisp for "first".
But if we add constructor or destructor in "second" then MSVC add
vtordisp.<br>
<br>
- Dmitry Sokolov.<br>
</body>
</html>