[all-commits] [llvm/llvm-project] 180f80: [clang] Fix ASTWriter crash after merging named en...
Michael Jabbour via All-commits
all-commits at lists.llvm.org
Fri Mar 7 02:02:41 PST 2025
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 180f8032f0f67faf2a73791ee37a87cb8560135c
https://github.com/llvm/llvm-project/commit/180f8032f0f67faf2a73791ee37a87cb8560135c
Author: Michael Jabbour <117195239+michael-jabbour-sonarsource at users.noreply.github.com>
Date: 2025-03-07 (Fri, 07 Mar 2025)
Changed paths:
M clang/docs/ReleaseNotes.rst
M clang/include/clang/Sema/Sema.h
M clang/lib/Parse/ParseDecl.cpp
M clang/lib/Parse/ParseDeclCXX.cpp
M clang/lib/Sema/SemaDecl.cpp
A clang/test/Modules/modules-merge-enum.m
Log Message:
-----------
[clang] Fix ASTWriter crash after merging named enums (#114240)
Clang already removes parsed enumerators when merging typedefs to
anonymous enums. This is why the following example decl used to be
handled correctly while merging, and ASTWriter behaves as expected:
```c
typedef enum { Val } AnonEnum;
```
However, the mentioned mechanism didn't handle named enums. This leads
to stale declarations in `IdResolver`, causing an assertion violation in
ASTWriter ``Assertion `DeclIDs.contains(D) && "Declaration not
emitted!"' failed`` when a module is being serialized with the following
example merged enums:
```c
typedef enum Enum1 { Val_A } Enum1;
enum Enum2 { Val_B };
```
The PR applies the same mechanism in the named enums case.
Additionally, I dropped the call to
`getLexicalDeclContext()->removeDecl` as it was causing a wrong
odr-violation diagnostic with anonymous enums.
Might be easier to to review commit by commit. Any feedback is
appreciated.
### Context
This fixes frontend crashes that were encountered when certain
Objective-C modules are included on Xcode 16. For example, by running
`CC=/path/to/clang-19 xcodebuild clean build` on a project that contains
the following Objective-C file:
```c
#include <os/atomic.h>
int main() {
return memory_order_relaxed;
}
```
This crashes the parser in release, when ASTReader tries to load the
enumerator declaration.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list