summaryrefslogtreecommitdiffstats
path: root/build/clang-plugin/tests/TestTrivialDtor.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /build/clang-plugin/tests/TestTrivialDtor.cpp
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'build/clang-plugin/tests/TestTrivialDtor.cpp')
-rw-r--r--build/clang-plugin/tests/TestTrivialDtor.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/build/clang-plugin/tests/TestTrivialDtor.cpp b/build/clang-plugin/tests/TestTrivialDtor.cpp
new file mode 100644
index 0000000000..f86d41b238
--- /dev/null
+++ b/build/clang-plugin/tests/TestTrivialDtor.cpp
@@ -0,0 +1,52 @@
+#define MOZ_TRIVIAL_DTOR __attribute__((annotate("moz_trivial_dtor")))
+
+struct MOZ_TRIVIAL_DTOR EmptyClass{};
+
+template <class T>
+struct MOZ_TRIVIAL_DTOR TemplateEmptyClass{};
+
+struct MOZ_TRIVIAL_DTOR NonEmptyClass {
+ void *m;
+};
+
+template <class T>
+struct MOZ_TRIVIAL_DTOR TemplateNonEmptyClass {
+ T* m;
+};
+
+struct MOZ_TRIVIAL_DTOR BadUserDefinedDtor { // expected-error {{class 'BadUserDefinedDtor' must have a trivial destructor}}
+ ~BadUserDefinedDtor() {}
+};
+
+struct MOZ_TRIVIAL_DTOR BadVirtualDtor { // expected-error {{class 'BadVirtualDtor' must have a trivial destructor}}
+ virtual ~BadVirtualDtor() {}
+};
+
+struct MOZ_TRIVIAL_DTOR OkVirtualMember {
+ virtual void f();
+};
+
+void foo();
+struct MOZ_TRIVIAL_DTOR BadNonEmptyCtorDtor { // expected-error {{class 'BadNonEmptyCtorDtor' must have a trivial destructor}}
+ BadNonEmptyCtorDtor() { foo(); }
+ ~BadNonEmptyCtorDtor() { foo(); }
+};
+
+struct NonTrivialDtor {
+ ~NonTrivialDtor() { foo(); }
+};
+
+struct VirtualMember {
+ virtual void f();
+};
+
+struct MOZ_TRIVIAL_DTOR BadNonTrivialDtorInBase : NonTrivialDtor { // expected-error {{class 'BadNonTrivialDtorInBase' must have a trivial destructor}}
+};
+
+struct MOZ_TRIVIAL_DTOR BadNonTrivialDtorInMember { // expected-error {{class 'BadNonTrivialDtorInMember' must have a trivial destructor}}
+ NonTrivialDtor m;
+};
+
+struct MOZ_TRIVIAL_DTOR OkVirtualMemberInMember {
+ VirtualMember m;
+};