[clang] [Clang] [Sema] Support matrix types in pseudo-destructor expressions (PR #117483)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Nov 24 04:50:56 PST 2024
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 <aeternalmail at 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>>();
+}
More information about the cfe-commits
mailing list