[clang] cf7b3f8 - Fix double-quotes in diagnostic when attempting to access a ext_vector of bools (#118186)

via cfe-commits cfe-commits at lists.llvm.org
Fri Dec 20 04:40:22 PST 2024


Author: William Tran-Viet
Date: 2024-12-20T13:40:17+01:00
New Revision: cf7b3f8d827abba49930202e51702714349c716d

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

LOG: Fix double-quotes in diagnostic when attempting to access a ext_vector of bools (#118186)

Fixes #116932 

- Remove the quotation marks in the diagnostic message for
err_ext_vector_component_name_illegal
- Pass in the quotation marks directly when reporting an illegal vector
component name inside `CheckExtVectorComponent`
- Add an offset to the `OpLoc` passed into `S.Diag` so the error message
arrow points directly to the offending illegal component rather than to
the '.' at the start of the component identifier.
- Modify the `vector-bool.cpp` element-wise access test case so it
(correctly) now only expects a single set of quotes.

Added: 
    

Modified: 
    clang/include/clang/Basic/DiagnosticSemaKinds.td
    clang/lib/Sema/SemaExprMember.cpp
    clang/test/SemaCXX/vector-bool.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 8d19e9030ac2e3..491bc83c1e1297 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -3423,7 +3423,7 @@ def warn_typecheck_vector_element_sizes_not_equal : Warning<
 def err_ext_vector_component_exceeds_length : Error<
   "vector component access exceeds type %0">;
 def err_ext_vector_component_name_illegal : Error<
-  "illegal vector component name '%0'">;
+  "illegal vector component name %0">;
 def err_attribute_address_space_negative : Error<
   "address space is negative">;
 def err_attribute_address_space_too_high : Error<

diff  --git a/clang/lib/Sema/SemaExprMember.cpp b/clang/lib/Sema/SemaExprMember.cpp
index bcc1b92ffdec73..d130e8b86bc56d 100644
--- a/clang/lib/Sema/SemaExprMember.cpp
+++ b/clang/lib/Sema/SemaExprMember.cpp
@@ -434,8 +434,11 @@ CheckExtVectorComponent(Sema &S, QualType baseType, ExprValueKind &VK,
   if (!HalvingSwizzle && *compStr) {
     // We didn't get to the end of the string. This means the component names
     // didn't come from the same set *or* we encountered an illegal name.
-    S.Diag(OpLoc, diag::err_ext_vector_component_name_illegal)
-      << StringRef(compStr, 1) << SourceRange(CompLoc);
+    size_t Offset = compStr - CompName->getNameStart() + 1;
+    char Fmt[3] = {'\'', *compStr, '\''};
+    S.Diag(OpLoc.getLocWithOffset(Offset),
+           diag::err_ext_vector_component_name_illegal)
+        << StringRef(Fmt, 3) << SourceRange(CompLoc);
     return QualType();
   }
 

diff  --git a/clang/test/SemaCXX/vector-bool.cpp b/clang/test/SemaCXX/vector-bool.cpp
index e99d420e73fab2..cd638056f348b0 100644
--- a/clang/test/SemaCXX/vector-bool.cpp
+++ b/clang/test/SemaCXX/vector-bool.cpp
@@ -85,10 +85,10 @@ void foo(const bool& X);
 
 // Disallow element-wise access.
 bool* ElementRefs() {
-  eight_bools.y = false; // expected-error at 88 {{illegal vector component name ''y''}}
-  &eight_bools.z;        // expected-error at 89 {{illegal vector component name ''z''}}
-  foo(eight_bools.w);    // expected-error at 90 {{illegal vector component name ''w''}}
-  foo(eight_bools.wyx);  // expected-error at 91 {{illegal vector component name ''wyx''}}
+  eight_bools.y = false; // expected-error at 88 {{illegal vector component name 'y'}}
+  &eight_bools.z;        // expected-error at 89 {{illegal vector component name 'z'}}
+  foo(eight_bools.w);    // expected-error at 90 {{illegal vector component name 'w'}}
+  foo(eight_bools.wyx);  // expected-error at 91 {{illegal vector component name 'wyx'}}
 }
 
 void Sizeof() {


        


More information about the cfe-commits mailing list