17 const auto GlobalVarDecl =
18 varDecl(hasGlobalStorage(),
19 hasDeclContext(anyOf(translationUnitDecl(),
22 unless(isConstexpr()), unless(isConstinit()));
24 const auto ReferencesUndefinedGlobalVar = declRefExpr(hasDeclaration(
25 varDecl(GlobalVarDecl, unless(isDefinition())).bind(
"referencee")));
28 traverse(TK_AsIs, varDecl(GlobalVarDecl, isDefinition(),
29 hasInitializer(expr(hasDescendant(
30 ReferencesUndefinedGlobalVar))))
36 const auto *
const Var = Result.Nodes.getNodeAs<VarDecl>(
"var");
38 if (Var->getLocation().isMacroID())
40 const auto *
const Referencee = Result.Nodes.getNodeAs<VarDecl>(
"referencee");
42 const auto *
const ReferenceeDef = Referencee->getDefinition();
43 if (ReferenceeDef !=
nullptr &&
44 Result.SourceManager->isBeforeInTranslationUnit(
45 ReferenceeDef->getLocation(), Var->getLocation())) {
48 diag(Var->getLocation(),
49 "initializing non-local variable with non-const expression depending on "
50 "uninitialized non-local variable %0")