From: Douglas Gregor Date: Wed, 14 Mar 2012 16:55:17 +0000 (+0000) Subject: Minor cleanup in attribute-related diagnostics, from Alexander Kornienko! X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f6b8b585596f6cf7924fecc5b7a741d4b45809dc;p=clang Minor cleanup in attribute-related diagnostics, from Alexander Kornienko! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152725 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index d859f37ad0..f6540ef278 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -1569,16 +1569,15 @@ def err_alias_not_supported_on_darwin : Error < def warn_attribute_wrong_decl_type : Warning< "%0 attribute only applies to %select{functions|unions|" "variables and functions|functions and methods|parameters|" - "parameters and methods|functions, methods and blocks|" - "classes and virtual methods|functions, methods, and parameters|" - "classes|virtual methods|class members|variables|methods|" - "variables, functions and labels|fields and global variables}1">; + "functions, methods and blocks|functions, methods, and parameters|" + "classes|variables|methods|variables, functions and labels|" + "fields and global variables|structs}1">; def err_attribute_wrong_decl_type : Error< "%0 attribute only applies to %select{functions|unions|" "variables and functions|functions and methods|parameters|" - "parameters and methods|functions, methods and blocks|" - "classes and virtual methods|functions, methods, and parameters|" - "classes|virtual methods|class members|variables|methods|structs}1">; + "functions, methods and blocks|functions, methods, and parameters|" + "classes|variables|methods|variables, functions and labels|" + "fields and global variables|structs}1">; def warn_function_attribute_wrong_type : Warning< "'%0' only applies to function types; type here is %1">; def warn_pointer_attribute_wrong_type : Warning< @@ -3032,7 +3031,7 @@ def err_anon_bitfield_width_exceeds_type_size : Error< "size of anonymous bit-field (%0 bits) exceeds size of its type (%1 bits)">; def err_incorrect_number_of_vector_initializers : Error< "number of elements must be either one or match the size of the vector">; - + // Used by C++ which allows bit-fields that are wider than the type. def warn_bitfield_width_exceeds_type_size: Warning< "size of bit-field %0 (%1 bits) exceeds the size of its type; value will be " @@ -5096,7 +5095,7 @@ def warn_unreachable_default : Warning< "default label in switch which covers all enumeration values">, InGroup, DefaultIgnore; def warn_not_in_enum : Warning<"case value not in enumerated type %0">, - InGroup; + InGroup; def err_typecheck_statement_requires_scalar : Error< "statement requires expression of scalar type (%0 invalid)">; def err_typecheck_statement_requires_integer : Error< diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index b288559cdd..081c93f8c2 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -35,17 +35,14 @@ enum AttributeDeclKind { ExpectedVariableOrFunction, ExpectedFunctionOrMethod, ExpectedParameter, - ExpectedParameterOrMethod, ExpectedFunctionMethodOrBlock, - ExpectedClassOrVirtualMethod, ExpectedFunctionMethodOrParameter, ExpectedClass, - ExpectedVirtualMethod, - ExpectedClassMember, ExpectedVariable, ExpectedMethod, ExpectedVariableFunctionOrLabel, - ExpectedFieldOrGlobalVar + ExpectedFieldOrGlobalVar, + ExpectedStruct }; //===----------------------------------------------------------------------===// @@ -787,7 +784,7 @@ static bool checkIBOutletCommon(Sema &S, Decl *D, const AttributeList &Attr) { } else if (const ObjCPropertyDecl *PD = dyn_cast(D)) { if (!PD->getType()->getAs()) { - S.Diag(Attr.getLoc(), diag::warn_iboutlet_object_type) + S.Diag(Attr.getLoc(), diag::warn_iboutlet_object_type) << Attr.getName() << PD->getType() << 1; return false; } @@ -796,7 +793,7 @@ static bool checkIBOutletCommon(Sema &S, Decl *D, const AttributeList &Attr) { S.Diag(Attr.getLoc(), diag::warn_attribute_iboutlet) << Attr.getName(); return false; } - + return true; } @@ -3329,7 +3326,7 @@ static void handleObjCReturnsInnerPointerAttr(Sema &S, Decl *D, if (!isa(method)) { S.Diag(method->getLocStart(), diag::err_attribute_wrong_decl_type) - << SourceRange(loc, loc) << attr.getName() << 13 /* methods */; + << SourceRange(loc, loc) << attr.getName() << ExpectedMethod; return; } @@ -3354,7 +3351,7 @@ static void handleObjCReturnsInnerPointerAttr(Sema &S, Decl *D, static void handleCFTransferAttr(Sema &S, Decl *D, const AttributeList &A) { if (!isa(D)) { S.Diag(D->getLocStart(), diag::err_attribute_wrong_decl_type) - << A.getRange() << A.getName() << 0 /*function*/; + << A.getRange() << A.getName() << ExpectedFunction; return; } @@ -3390,7 +3387,7 @@ static void handleNSBridgedAttr(Sema &S, Scope *Sc, Decl *D, RecordDecl *RD = dyn_cast(D); if (!RD || RD->isUnion()) { S.Diag(D->getLocStart(), diag::err_attribute_wrong_decl_type) - << Attr.getRange() << Attr.getName() << 14 /*struct */; + << Attr.getRange() << Attr.getName() << ExpectedStruct; } IdentifierInfo *ParmName = Attr.getParameterName(); @@ -3420,14 +3417,14 @@ static void handleObjCOwnershipAttr(Sema &S, Decl *D, if (hasDeclarator(D)) return; S.Diag(D->getLocStart(), diag::err_attribute_wrong_decl_type) - << Attr.getRange() << Attr.getName() << 12 /* variable */; + << Attr.getRange() << Attr.getName() << ExpectedVariable; } static void handleObjCPreciseLifetimeAttr(Sema &S, Decl *D, const AttributeList &Attr) { if (!isa(D) && !isa(D)) { S.Diag(D->getLocStart(), diag::err_attribute_wrong_decl_type) - << Attr.getRange() << Attr.getName() << 12 /* variable */; + << Attr.getRange() << Attr.getName() << ExpectedVariable; return; } @@ -3507,7 +3504,7 @@ static void handleUuidAttr(Sema &S, Decl *D, const AttributeList &Attr) { bool IsCurly = StrRef.size() > 1 && StrRef.front() == '{' && StrRef.back() == '}'; - + // Validate GUID length. if (IsCurly && StrRef.size() != 38) { S.Diag(Attr.getLoc(), diag::err_attribute_uuid_malformed_guid); @@ -3518,7 +3515,7 @@ static void handleUuidAttr(Sema &S, Decl *D, const AttributeList &Attr) { return; } - // GUID format is "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" or + // GUID format is "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" or // "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" StringRef::iterator I = StrRef.begin(); if (IsCurly) // Skip the optional '{'