https://github.com/Sirraide created https://github.com/llvm/llvm-project/pull/117483
We already support vector types, and since matrix element types have to be scalar types, there should be no problem w/ just enabling this. This now also allows matrix types to be stored in STL containers. >From 4eff78b4f8404217cecf254227bc79dcc11d2f36 Mon Sep 17 00:00:00 2001 From: Sirraide <aeternalm...@gmail.com> Date: Sun, 24 Nov 2024 13:43:02 +0100 Subject: [PATCH] [Clang] [Sema] Support matrix types in pseudo-destructor expressions --- clang/docs/ReleaseNotes.rst | 3 +++ clang/lib/Sema/SemaExprCXX.cpp | 2 +- .../matrix-types-pseudo-destructor.cpp | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 clang/test/SemaCXX/matrix-types-pseudo-destructor.cpp diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 8bd06fadfdc984..ad3c0d3e67f031 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -371,6 +371,9 @@ Non-comprehensive list of changes in this release - ``__builtin_reduce_and`` function can now be used in constant expressions. - ``__builtin_reduce_or`` and ``__builtin_reduce_xor`` functions can now be used in constant expressions. +- Matrix types (a Clang extension) can now be used in pseudo-destructor expressions, + which allows them to be stored in STL containers. + New Compiler Flags ------------------ diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index d85819b21c8265..d440755ee70665 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -8189,7 +8189,7 @@ ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, return ExprError(); if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && - !ObjectType->isVectorType()) { + !ObjectType->isVectorType() && !ObjectType->isMatrixType()) { if (getLangOpts().MSVCCompat && ObjectType->isVoidType()) Diag(OpLoc, diag::ext_pseudo_dtor_on_void) << Base->getSourceRange(); else { diff --git a/clang/test/SemaCXX/matrix-types-pseudo-destructor.cpp b/clang/test/SemaCXX/matrix-types-pseudo-destructor.cpp new file mode 100644 index 00000000000000..f0ee953ad2557c --- /dev/null +++ b/clang/test/SemaCXX/matrix-types-pseudo-destructor.cpp @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -fsyntax-only -fenable-matrix -std=c++11 -verify %s +// expected-no-diagnostics + +template <typename T> +void f() { + T().~T(); +} + +using mat4 = float __attribute__((matrix_type(4, 4))); +using mat4i = int __attribute__((matrix_type(4, 4))); + +template <typename T> +using mat4_t = T __attribute__((matrix_type(4, 4))); + +void g() { + f<mat4>(); + f<mat4i>(); + f<mat4_t<double>>(); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits