mirror-llvm-project/clang
Balázs Benics 55923bf5df
[analyzer] Don't fold wide string literals in CStringChecker (#213281)
`getStringRefAtRegion()` read literal contents via
`StringLiteral::getBytes()`, which returns the literal's raw trailing
storage. For wide literals (`u""`, `U""`, `L""`) that storage holds the
code units in *host* byte order: `LiteralSupport` writes them through
`reinterpret_cast<UTF16*>/<UTF32*>`, and `StringLiteral::getCodeUnit()`
reads them back the same way. Interpreting those bytes as a target byte
string made the strchr-family constant folding depend on the endianness
of the machine running the analyzer.

Bail out on `getCharByteWidth() != 1`, matching the contract the rest of
the checker already relies on -- `evalStrcmpCommon()` uses
`getString()`, which asserts it. Wide literals now fall back to the
symbolic-offset path and keep both branches.

Fixes up #212124
Inspired from:
https://github.com/llvm/llvm-project/pull/212124#issuecomment-5143598098

Supersedes #213279
2026-07-31 15:01:14 +00:00
..
bindings [libclang/python] Remove CompletionString.AvailabilityKindCompat (#210682) 2026-07-25 12:38:13 +09:00
cmake [CMake][Fuchsia] Compile runtimes with -ffuchsia-api-level (#211753) 2026-07-29 10:59:32 -07:00
docs [Sema] Fix crash in __builtin_dump_struct with -Werror -Wformat-pedantic (#212377) 2026-07-30 21:19:01 -07:00
examples [PassManager] Make passes inherit from RequiredPassInfoMixin/OptionalPassInfoMixin (#192120) 2026-05-06 10:00:07 -07:00
include [clang][Analysis] Add argument accessors to clang::AnyCall (#212934) 2026-07-31 13:06:52 +01:00
lib [analyzer] Don't fold wide string literals in CStringChecker (#213281) 2026-07-31 15:01:14 +00:00
runtime
test [analyzer] Don't fold wide string literals in CStringChecker (#213281) 2026-07-31 15:01:14 +00:00
tools [ClangLinkerWrapper][SPIRV] Fix embed bitcode option (#213137) 2026-07-31 14:49:09 +00:00
unittests [clang][Analysis] Add argument accessors to clang::AnyCall (#212934) 2026-07-31 13:06:52 +01:00
utils [clang] perf_helper.py ignore clang warning/note when parsing cc1 command (#212401) 2026-07-30 20:41:19 -07:00
www [Clang] Implement P3658R1 (#212131) 2026-07-28 07:46:23 +02:00
.clang-format
.clang-tidy
.gitignore
AreaTeamMembers.txt
CMakeLists.txt Add build option CLANG_INCLUDE_EXAMPLES (#187317) 2026-07-11 04:27:34 +02:00
INSTALL.txt
LICENSE.TXT
Maintainers.md [clang][doc] Use my private email for now (#213058) 2026-07-31 06:24:07 +00:00
NOTES.txt
README.md

C language Family Front-end

Welcome to Clang.

This is a compiler front-end for the C family of languages (C, C++ and Objective-C) which is built as part of the LLVM compiler infrastructure project.

Unlike many other compiler frontends, Clang is useful for a number of things beyond just compiling code: we intend for Clang to be host to a number of different source-level tools. One example of this is the Clang Static Analyzer.

If you're interested in more (including how to build Clang) it is best to read the relevant websites. Here are some pointers: