From c6824883cc9de7e46b2417d58463f9c4e02da195 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 3 Mar 2020 11:27:57 +0000 Subject: [PATCH] [AST][SVE] Treat built-in SVE types as trivial Built-in SVE types are trivial, since they're trivially copyable and support default construction. Differential Revision: https://reviews.llvm.org/D76692 --- clang/lib/AST/Type.cpp | 3 +++ clang/test/SemaCXX/sizeless-1.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index 44d3dbc..99005a3 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -2249,6 +2249,9 @@ bool QualType::isTrivialType(const ASTContext &Context) const { if ((*this)->isArrayType()) return Context.getBaseElementType(*this).isTrivialType(Context); + if ((*this)->isSizelessBuiltinType()) + return true; + // Return false for incomplete types after skipping any incomplete array // types which are expressly allowed by the standard and thus our API. if ((*this)->isIncompleteType()) diff --git a/clang/test/SemaCXX/sizeless-1.cpp b/clang/test/SemaCXX/sizeless-1.cpp index 3d0f07c..a7c0234 100644 --- a/clang/test/SemaCXX/sizeless-1.cpp +++ b/clang/test/SemaCXX/sizeless-1.cpp @@ -516,6 +516,7 @@ void cxx_only(int sel) { _Static_assert(!__is_literal(svint8_t), ""); _Static_assert(__is_pod(svint8_t), ""); _Static_assert(!__is_polymorphic(svint8_t), ""); + _Static_assert(__is_trivial(svint8_t), ""); _Static_assert(__is_object(svint8_t), ""); _Static_assert(!__is_arithmetic(svint8_t), ""); _Static_assert(!__is_floating_point(svint8_t), ""); -- 2.7.4