================
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple=x86_64-linux -disable-llvm-passes -emit-llvm \
+// RUN:            -debug-info-kind=constructor -dwarf-version=5 -O1 %s \
+// RUN: -o - | FileCheck %s -check-prefix CHECK-BASE
+
+// Simple class with only virtual methods: inlined and not-inlined
+// We check for a generated 'call_target' for:
+// - 'f1', 'f2' and 'f3'.
+
+struct CBase {
+  virtual void f1();
+  virtual void f2();
+  virtual void f3() {}
+};
+void CBase::f1() {}
+
+void bar(CBase *Base) {
+  Base->f1();
+  Base->f2();
+  Base->f3();
+
+  CBase B;
+  B.f1();
+}
+
----------------
dwblaikie wrote:

I'd include a few more comments - about the fact that this is testing three 
scenarios (out-of-line defined virtual member function, 
declared-but-not-defined virtual member function, and inline defined virtual 
member function) but also about whether it's intended that CBase is defined or 
declared - in this case because it instantiate's the ctor, (at `CBase B`) it 
should cause the CBase type to be defined. I guess you could turn on standalone 
debug as a maybe more direct way to say "the type should be defined in this 
test" (or an explicit out of line ctor would be OK too - with a comment 
explaining why it's load bearing - or even just a comment on the `CBase B` line 
to explain what it'll do)

https://github.com/llvm/llvm-project/pull/167666
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to