mirror-llvm-project/clang
Peter Rong 14192adddc
[clang][Sema] Fix ObjC file-scope literal diagnostic (#209688)
A non-constant ObjC collection literal used as a file-scope initializer
should get the targeted err_objc_literal_nonconstant_at_file_scope
pointing at the offending element. CheckForConstantInitializer instead
inspected the wrapped Init/Culprit, so under -fobjc-arc, for id-typed
variables, or with parentheses it skipped the per-element loop and fell
back to the generic "initializer element is not a compile-time constant"
on the whole @{...}/@[...] -- or blamed the wrong element (e.g. a valid
string key rather than the non-constant value).

Unwrap the culprit with IgnoreParenImpCasts and drive classification and
per-element reporting off it, mirroring BuildObjC{Array,Dictionary}Literal
(unwrap before each isa<>; keys must be string literals, values/elements
constant object literals). Also treat CK_ARCReclaimReturnedObject as
transparent in Expr::isConstantInitializer so ARC-wrapped literals are
recognized and the reported culprit is the literal itself.

Add objc-constant-literal-dict-key-restrictions.m (macOS no-ARC, iOS ARC,
ObjC++), with each culprit on its own line so -verify checks the caret.

[Assisted-by](https://t.ly/Dkjjk): Opus 4.8
2026-07-30 23:01:34 -07: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 [CIR] Pointer and vptr width from a CIR-native data-layout entry (#204185) 2026-07-30 16:50:13 -07:00
lib [clang][Sema] Fix ObjC file-scope literal diagnostic (#209688) 2026-07-30 23:01:34 -07:00
runtime
test [clang][Sema] Fix ObjC file-scope literal diagnostic (#209688) 2026-07-30 23:01:34 -07:00
tools [CIR] Pointer and vptr width from a CIR-native data-layout entry (#204185) 2026-07-30 16:50:13 -07:00
unittests [clang-format] Prevent re-assigning type on finalized tokens (#210763) 2026-07-30 21:28:08 +00: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 Nominate Joshua Cranmer as floating-point maintainer (#198287) 2026-05-18 10:53:29 -04: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: