[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