[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