xref: /llvm-project/compiler-rt/test/tsan/virtual_inheritance_compile_bug.cpp (revision c0fa632236308100e1031fc86edfde13ddc4bcef)
1bcaeed49SFangrui Song // Regression test for https://github.com/google/sanitizers/issues/410.
2bcaeed49SFangrui Song // The C++ variant is much more compact that the LLVM IR equivalent.
3bcaeed49SFangrui Song 
4bcaeed49SFangrui Song // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
5bcaeed49SFangrui Song #include <stdio.h>
6*c0fa6322SVitaly Buka struct AAA {
aaaAAA7*c0fa6322SVitaly Buka   virtual long aaa() { return 0; }
8*c0fa6322SVitaly Buka };
9*c0fa6322SVitaly Buka struct BBB : virtual AAA {
10*c0fa6322SVitaly Buka   unsigned long bbb;
11*c0fa6322SVitaly Buka };
12bcaeed49SFangrui Song struct CCC: virtual AAA { };
13*c0fa6322SVitaly Buka struct DDD : CCC, BBB {
14*c0fa6322SVitaly Buka   DDD();
15*c0fa6322SVitaly Buka };
DDD()16bcaeed49SFangrui Song DDD::DDD()  { }
main()17bcaeed49SFangrui Song int main() {
18bcaeed49SFangrui Song   DDD d;
19bcaeed49SFangrui Song   fprintf(stderr, "OK\n");
20bcaeed49SFangrui Song }
21bcaeed49SFangrui Song // CHECK: OK
22