[clang] [Clang] Avoid assertion failure for initialized extern aliases (PR #223124)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 22 06:00:38 PDT 2026
================
@@ -8907,6 +8907,20 @@ void Sema::ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD) {
// Look for API notes that map to attributes.
ProcessAPINotes(D);
+
+ // An initializer makes a variable declaration incompatible with an alias
+ // attribute. Attributes are processed before the initializer is attached to
+ // the VarDecl, so an extern variable with an initializer still appears to be
+ // a declaration in handleAliasAttr(). Use the information recorded by the
+ // parser and do not let the AliasAttr escape attribute processing.
+ if (auto *VD = dyn_cast<VarDecl>(D)) {
----------------
AaronBallman wrote:
This is definitely not the right way to solve this -- `ProcessDeclAttributes()` should be a general function. Per-attribute logic should not be implemented here. Usually, this would be done from `handleAliasAttr()`, except that doesn't have access to `PD` and we should not thread that through (again, because attributes should be generalized). So I think this should probably be handled when attaching the initializer to the declaration, with a comment explaining why it's happening there.
https://github.com/llvm/llvm-project/pull/223124
More information about the cfe-commits
mailing list