http://llvm.org/bugs/show_bug.cgi?id=18967

            Bug ID: 18967
           Summary: MS ABI: Bad this adjustment for virtual methods in a
                    diamond virtual inheritance hierarchy
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected], [email protected],
                    [email protected]
            Blocks: 12477, 18887
    Classification: Unclassified

Semi-reduced test case:

$ cat t.cpp
struct A {
  virtual int foo() { return a; }
  int a;
};
struct B : virtual A {
  B() : b(1) {}
  virtual int bar() { return b; }
  int b;
};
struct C : virtual A {
  C() : c(2) {}
  virtual int foo() { return c; }
  int c;
};
struct D : B, C {
  D() : d(3) {}
  virtual int bar() { return d; }
  int d;
};
int main() {
  D d;
  return d.foo();
}

$ clang-cl -GR- t.cpp && ./t.exe ; echo $?
3

This should return 2, not 3.  It's accessing 'd' instead of 'c'.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to