diff options
author | Ted Kremenek <kremenek@apple.com> | 2013-01-19 00:49:00 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2013-01-19 00:49:00 +0000 |
commit | e07d167a50165c85c4f440714bd2178e788f24b8 (patch) | |
tree | 3ffece1f1df363336f9aa6814bcd7953e5b19ec7 /clang/lib/Sema/SemaDecl.cpp | |
parent | cc99c421308046e3e5d7f78d45c57e1994a7ddb1 (diff) | |
download | bcm5719-llvm-e07d167a50165c85c4f440714bd2178e788f24b8.tar.gz bcm5719-llvm-e07d167a50165c85c4f440714bd2178e788f24b8.zip |
Reword warning about using a *static* variable within its own initialization.
The warning is still under -Wuninitialized (although technically this
is defined behavior), but under a subgroup -Wstatic-self-init.
This addresses PR 10265.
llvm-svn: 172878
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 9cf5e73665a..dbdbc3d6a2c 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -6683,11 +6683,17 @@ namespace { void VisitObjCMessageExpr(ObjCMessageExpr *E) { return; } void HandleDeclRefExpr(DeclRefExpr *DRE) { - Decl* ReferenceDecl = DRE->getDecl(); + Decl* ReferenceDecl = DRE->getDecl(); if (OrigDecl != ReferenceDecl) return; - unsigned diag = isReferenceType - ? diag::warn_uninit_self_reference_in_reference_init - : diag::warn_uninit_self_reference_in_init; + unsigned diag; + if (isReferenceType) { + diag = diag::warn_uninit_self_reference_in_reference_init; + } else if (cast<VarDecl>(OrigDecl)->isStaticLocal()) { + diag = diag::warn_static_self_reference_in_init; + } else { + diag = diag::warn_uninit_self_reference_in_init; + } + S.DiagRuntimeBehavior(DRE->getLocStart(), DRE, S.PDiag(diag) << DRE->getNameInfo().getName() |