[cfe-commits] r172878 - in /cfe/trunk: include/clang/Basic/DiagnosticGroups.td include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDecl.cpp
Ted Kremenek
kremenek at apple.com
Fri Jan 18 20:31:40 PST 2013
Looks like I accidentally didn't check in the test changes. Thanks.
On Jan 18, 2013, at 5:49 PM, NAKAMURA Takumi <geek4civic at gmail.com> wrote:
> Ted, I have reverted it in r172879, excuse me.
> SemaCXX/uninitialized.cpp failed;
> http://bb.pgr.jp/builders/cmake-clang-x86_64-linux/builds/2861
>
> Could you reproduce?
>
> ...Takumi
>
> 2013/1/19 Ted Kremenek <kremenek at apple.com>:
>> Author: kremenek
>> Date: Fri Jan 18 18:49:00 2013
>> New Revision: 172878
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=172878&view=rev
>> Log:
>> 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.
>>
>> Modified:
>> cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> cfe/trunk/lib/Sema/SemaDecl.cpp
>>
>> Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=172878&r1=172877&r2=172878&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
>> +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Fri Jan 18 18:49:00 2013
>> @@ -259,7 +259,9 @@
>> def Unicode : DiagGroup<"unicode">;
>> def UninitializedMaybe : DiagGroup<"conditional-uninitialized">;
>> def UninitializedSometimes : DiagGroup<"sometimes-uninitialized">;
>> -def Uninitialized : DiagGroup<"uninitialized", [UninitializedSometimes]>;
>> +def UninitializedStaticSelfInit : DiagGroup<"static-self-init">;
>> +def Uninitialized : DiagGroup<"uninitialized", [UninitializedSometimes,
>> + UninitializedStaticSelfInit]>;
>> def UnknownPragmas : DiagGroup<"unknown-pragmas">;
>> def UnknownWarningOption : DiagGroup<"unknown-warning-option">;
>> def NSobjectAttribute : DiagGroup<"NSObject-attribute">;
>>
>> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=172878&r1=172877&r2=172878&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
>> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Jan 18 18:49:00 2013
>> @@ -1292,6 +1292,9 @@
>> def warn_reference_field_is_uninit : Warning<
>> "reference %0 is not yet bound to a value when used here">,
>> InGroup<Uninitialized>;
>> +def warn_static_self_reference_in_init : Warning<
>> + "static variable %0 is suspiciously used within its own initialization">,
>> + InGroup<UninitializedStaticSelfInit>;
>> def warn_uninit_self_reference_in_init : Warning<
>> "variable %0 is uninitialized when used within its own initialization">,
>> InGroup<Uninitialized>;
>>
>> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=172878&r1=172877&r2=172878&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Jan 18 18:49:00 2013
>> @@ -6683,11 +6683,17 @@
>> 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()
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list