diff options
author | Ted Kremenek <kremenek@apple.com> | 2013-01-19 04:33:14 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2013-01-19 04:33:14 +0000 |
commit | a83b407c511f7670bda5cad3b3c4dcc56f91f549 (patch) | |
tree | c53fa2cb8c4a6cf473a0f7a754a8dd790c28d834 /clang/lib | |
parent | 4c781fd78a6477cb648ddff5f81cee9decf04950 (diff) | |
download | llvm-a83b407c511f7670bda5cad3b3c4dcc56f91f549.zip llvm-a83b407c511f7670bda5cad3b3c4dcc56f91f549.tar.gz llvm-a83b407c511f7670bda5cad3b3c4dcc56f91f549.tar.bz2 |
Reapply r172878 with test case.
llvm-svn: 172888
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 29d3176..dbdbc3d 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -6685,9 +6685,15 @@ namespace { void HandleDeclRefExpr(DeclRefExpr *DRE) { 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() |