[clang] c9edf84 - Error instead of assert when making a _BitInt vector

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 3 11:06:39 PDT 2022


Author: Aaron Ballman
Date: 2022-08-03T14:05:09-04:00
New Revision: c9edf843fcf954132271214445857498fb47bb72

URL: https://github.com/llvm/llvm-project/commit/c9edf843fcf954132271214445857498fb47bb72
DIFF: https://github.com/llvm/llvm-project/commit/c9edf843fcf954132271214445857498fb47bb72.diff

LOG: Error instead of assert when making a _BitInt vector

We already correctly rejected:
typedef __attribute__((vector_size(16))) _BitInt(4) Ty;

but we would assert with:
typedef __attribute__((ext_vector_type(4))) _BitInt(4) Ty;

Now we issue the same error in both cases.

Added: 
    

Modified: 
    clang/docs/ReleaseNotes.rst
    clang/lib/Sema/SemaType.cpp
    clang/test/SemaCXX/ext-int.cpp

Removed: 
    


################################################################################
diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 4af8ebec3a97..e42ed9dd025b 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -57,6 +57,9 @@ Bug Fixes
 - Improve compile-times with large dynamic array allocations with trivial
   constructors. This fixes
   `Issue 56774 <https://github.com/llvm/llvm-project/issues/56774>`_.
+- No longer assert/miscompile when trying to make a vectorized ``_BitInt`` type
+  using the ``ext_vector_type`` attribute (the ``vector_size`` attribute was
+  already properly diagnosing this case).
 
 Improvements to Clang's diagnostics
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

diff  --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 398006e88cd0..ee5f203f7049 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -2691,7 +2691,7 @@ QualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize,
   // We explictly allow bool elements in ext_vector_type for C/C++.
   bool IsNoBoolVecLang = getLangOpts().OpenCL || getLangOpts().OpenCLCPlusPlus;
   if ((!T->isDependentType() && !T->isIntegerType() &&
-       !T->isRealFloatingType()) ||
+       !T->isRealFloatingType()) || T->isBitIntType() ||
       (IsNoBoolVecLang && T->isBooleanType())) {
     Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << T;
     return QualType();

diff  --git a/clang/test/SemaCXX/ext-int.cpp b/clang/test/SemaCXX/ext-int.cpp
index 5d4d8966cde2..72bbae65ace7 100644
--- a/clang/test/SemaCXX/ext-int.cpp
+++ b/clang/test/SemaCXX/ext-int.cpp
@@ -86,6 +86,8 @@ struct is_same<T,T> {
 // Reject vector types:
 // expected-error at +1{{invalid vector element type '_BitInt(32)'}}
 typedef _BitInt(32) __attribute__((vector_size(16))) VecTy;
+// expected-error at +1{{invalid vector element type '_BitInt(32)'}}
+typedef _BitInt(32) __attribute__((ext_vector_type(32))) OtherVecTy;
 
 // Allow _Complex:
 _Complex _BitInt(3) Cmplx;


        


More information about the cfe-commits mailing list