remove another old-school Diag method.

llvm-svn: 59712
This commit is contained in:
Chris Lattner 2008-11-20 06:06:08 +00:00
parent ec7f7732f1
commit 29e812b905
11 changed files with 109 additions and 125 deletions

View File

@ -173,12 +173,6 @@ bool Sema::Diag(SourceLocation Loc, unsigned DiagID, const std::string &Msg1,
return true;
}
bool Sema::Diag(SourceLocation Loc, unsigned DiagID, const std::string &Msg,
const SourceRange& Range) {
PP.getDiagnostics().Report(PP.getFullLoc(Loc), DiagID) << Msg << Range;
return true;
}
const LangOptions &Sema::getLangOptions() const {
return PP.getLangOptions();
}

View File

@ -232,10 +232,6 @@ public:
bool Diag(SourceLocation Loc, unsigned DiagID, const std::string &Msg1,
const std::string &Msg2);
/// More expressive diagnostic helpers for expressions (say that 6 times:-)
bool Diag(SourceLocation Loc, unsigned DiagID, const std::string &Msg,
const SourceRange& R1);
virtual void DeleteExpr(ExprTy *E);
virtual void DeleteStmt(StmtTy *S);

View File

@ -632,10 +632,10 @@ Sema::CheckPrintfArguments(CallExpr *TheCall, bool HasVAListArg,
SourceLocation Loc = PP.AdvanceToTokenCharacter(FExpr->getLocStart(),
LastConversionIdx+1);
Diag(Loc, diag::warn_printf_invalid_conversion,
std::string(Str+LastConversionIdx,
Str+std::min(LastConversionIdx+2, StrLen)),
OrigFormatExpr->getSourceRange());
Diag(Loc, diag::warn_printf_invalid_conversion)
<< std::string(Str+LastConversionIdx,
Str+std::min(LastConversionIdx+2, StrLen))
<< OrigFormatExpr->getSourceRange();
}
++numConversions;
break;
@ -653,9 +653,9 @@ Sema::CheckPrintfArguments(CallExpr *TheCall, bool HasVAListArg,
SourceLocation Loc = PP.AdvanceToTokenCharacter(FExpr->getLocStart(),
LastConversionIdx+1);
Diag(Loc, diag::warn_printf_invalid_conversion,
std::string(Str+LastConversionIdx, Str+StrIdx),
OrigFormatExpr->getSourceRange());
Diag(Loc, diag::warn_printf_invalid_conversion)
<< std::string(Str+LastConversionIdx, Str+StrIdx)
<< OrigFormatExpr->getSourceRange();
// This conversion is broken. Advance to the next format
// conversion.
@ -676,10 +676,10 @@ Sema::CheckPrintfArguments(CallExpr *TheCall, bool HasVAListArg,
SourceLocation Loc = PP.AdvanceToTokenCharacter(FExpr->getLocStart(),
LastConversionIdx+1);
Diag(Loc, diag::warn_printf_invalid_conversion,
std::string(Str+LastConversionIdx,
Str+std::min(LastConversionIdx+2, StrLen)),
OrigFormatExpr->getSourceRange());
Diag(Loc, diag::warn_printf_invalid_conversion)
<< std::string(Str+LastConversionIdx,
Str+std::min(LastConversionIdx+2, StrLen))
<< OrigFormatExpr->getSourceRange();
return;
}

View File

@ -841,16 +841,16 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
//
if (PrevDecl == 0) {
// No previous declaration in the qualifying scope.
Diag(D.getIdentifierLoc(), diag::err_typecheck_no_member,
Name.getAsString(), D.getCXXScopeSpec().getRange());
Diag(D.getIdentifierLoc(), diag::err_typecheck_no_member)
<< Name.getAsString() << D.getCXXScopeSpec().getRange();
} else if (!CurContext->Encloses(DC)) {
// The qualifying scope doesn't enclose the original declaration.
// Emit diagnostic based on current scope.
SourceLocation L = D.getIdentifierLoc();
SourceRange R = D.getCXXScopeSpec().getRange();
if (isa<FunctionDecl>(CurContext)) {
Diag(L, diag::err_invalid_declarator_in_function, Name.getAsString(),
R);
Diag(L, diag::err_invalid_declarator_in_function)
<< Name.getAsString() << R;
} else {
Diag(L, diag::err_invalid_declarator_scope)
<< Name.getAsString() << cast<NamedDecl>(DC)->getName() << R;
@ -1808,10 +1808,8 @@ void Sema::ActOnUninitializedDecl(DeclTy *dcl) {
// within its class declaration (9.2), and where the extern
// specifier is explicitly used.
if (Type->isReferenceType() && Var->getStorageClass() != VarDecl::Extern) {
Diag(Var->getLocation(),
diag::err_reference_var_requires_init,
Var->getName(),
SourceRange(Var->getLocation(), Var->getLocation()));
Diag(Var->getLocation(), diag::err_reference_var_requires_init)
<< Var->getName() << SourceRange(Var->getLocation(), Var->getLocation());
Var->setInvalidDecl();
return;
}

View File

@ -576,15 +576,15 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
} else {
// not const integral.
Diag(Loc, diag::err_member_initialization,
Name.getAsString(), Init->getSourceRange());
Diag(Loc, diag::err_member_initialization)
<< Name.getAsString() << Init->getSourceRange();
InvalidDecl = true;
}
} else {
// not static member.
Diag(Loc, diag::err_member_initialization,
Name.getAsString(), Init->getSourceRange());
Diag(Loc, diag::err_member_initialization)
<< Name.getAsString() << Init->getSourceRange();
InvalidDecl = true;
}
}
@ -1442,18 +1442,16 @@ Sema::PerformInitializationByConstructor(QualType ClassType,
case OR_No_Viable_Function:
if (CandidateSet.empty())
Diag(Loc, diag::err_ovl_no_viable_function_in_init,
InitEntity, Range);
Diag(Loc, diag::err_ovl_no_viable_function_in_init) << InitEntity, Range;
else {
Diag(Loc, diag::err_ovl_no_viable_function_in_init_with_cands,
InitEntity, Range);
Diag(Loc, diag::err_ovl_no_viable_function_in_init_with_cands)
<< InitEntity << Range;
PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
}
return 0;
case OR_Ambiguous:
Diag(Loc, diag::err_ovl_ambiguous_init,
InitEntity, Range);
Diag(Loc, diag::err_ovl_ambiguous_init) << InitEntity << Range;
PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
return 0;
}
@ -1848,8 +1846,8 @@ bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
Param != FnDecl->param_end(); ++Param) {
if (Expr *DefArg = (*Param)->getDefaultArg())
return Diag((*Param)->getLocation(),
diag::err_operator_overload_default_arg,
FnDecl->getName(), DefArg->getSourceRange());
diag::err_operator_overload_default_arg)
<< FnDecl->getName() << DefArg->getSourceRange();
}
}

View File

@ -581,7 +581,7 @@ void Sema::WarnUndefinedMethod(SourceLocation ImpLoc, ObjCMethodDecl *method,
Diag(ImpLoc, diag::warn_incomplete_impl);
IncompleteImpl = true;
}
Diag(ImpLoc, diag::warn_undef_method_impl, method->getSelector().getName());
Diag(ImpLoc, diag::warn_undef_method_impl) << method->getSelector().getName();
}
/// FIXME: Type hierarchies in Objective-C can be deep. We could most
@ -824,7 +824,7 @@ ObjCMethodDecl *Sema::LookupInstanceMethodInGlobalPool(Selector Sel,
issueWarning = true;
}
if (issueWarning && (MethList.Method && MethList.Next)) {
Diag(R.getBegin(), diag::warn_multiple_method_decl, Sel.getName(), R);
Diag(R.getBegin(), diag::warn_multiple_method_decl) << Sel.getName() << R;
Diag(MethList.Method->getLocStart(), diag::warn_using_decl)
<< MethList.Method->getSourceRange();
for (ObjCMethodList *Next = MethList.Next; Next; Next = Next->Next)

View File

@ -416,8 +416,8 @@ Sema::ExprResult Sema::ActOnDeclarationNameExpr(Scope *S, SourceLocation Loc,
// If this name wasn't predeclared and if this is not a function call,
// diagnose the problem.
if (SS && !SS->isEmpty())
return Diag(Loc, diag::err_typecheck_no_member,
Name.getAsString(), SS->getRange());
return Diag(Loc, diag::err_typecheck_no_member)
<< Name.getAsString() << SS->getRange();
else if (Name.getNameKind() == DeclarationName::CXXOperatorName ||
Name.getNameKind() == DeclarationName::CXXConversionFunctionName)
return Diag(Loc, diag::err_undeclared_use) << Name.getAsString();
@ -2598,9 +2598,9 @@ QualType Sema::CheckAssignmentOperands(Expr *LHS, Expr *&RHS,
Loc.isFileID() && UO->getOperatorLoc().isFileID() &&
// Only if the two operators are exactly adjacent.
Loc.getFileLocWithOffset(1) == UO->getOperatorLoc())
Diag(Loc, diag::warn_not_compound_assign,
UO->getOpcode() == UnaryOperator::Plus ? "+" : "-",
SourceRange(UO->getOperatorLoc(), UO->getOperatorLoc()));
Diag(Loc, diag::warn_not_compound_assign)
<< (UO->getOpcode() == UnaryOperator::Plus ? "+" : "-")
<< SourceRange(UO->getOperatorLoc(), UO->getOperatorLoc());
}
} else {
// Compound assignment "x += y"
@ -2776,23 +2776,23 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
}
} else if (MemberExpr *MemExpr = dyn_cast<MemberExpr>(op)) { // C99 6.5.3.2p1
if (MemExpr->getMemberDecl()->isBitField()) {
Diag(OpLoc, diag::err_typecheck_address_of,
std::string("bit-field"), op->getSourceRange());
Diag(OpLoc, diag::err_typecheck_address_of)
<< "bit-field" << op->getSourceRange();
return QualType();
}
// Check for Apple extension for accessing vector components.
} else if (isa<ArraySubscriptExpr>(op) &&
cast<ArraySubscriptExpr>(op)->getBase()->getType()->isVectorType()) {
Diag(OpLoc, diag::err_typecheck_address_of,
std::string("vector"), op->getSourceRange());
Diag(OpLoc, diag::err_typecheck_address_of)
<< "vector" << op->getSourceRange();
return QualType();
} else if (dcl) { // C99 6.5.3.2p1
// We have an lvalue with a decl. Make sure the decl is not declared
// with the register storage-class specifier.
if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {
if (vd->getStorageClass() == VarDecl::Register) {
Diag(OpLoc, diag::err_typecheck_address_of,
std::string("register variable"), op->getSourceRange());
Diag(OpLoc, diag::err_typecheck_address_of)
<< "register variable" << op->getSourceRange();
return QualType();
}
} else if (isa<OverloadedFunctionDecl>(dcl))
@ -2817,8 +2817,8 @@ QualType Sema::CheckIndirectionOperand(Expr *op, SourceLocation OpLoc) {
// and such a warning is unlikely to catch any mistakes.
return PT->getPointeeType();
}
Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer,
qType.getAsString(), op->getSourceRange());
Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer)
<< qType.getAsString() << op->getSourceRange();
return QualType();
}
@ -3223,27 +3223,27 @@ Action::ExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
resultType->isPointerType())
break;
return Diag(OpLoc, diag::err_typecheck_unary_expr,
resultType.getAsString());
return Diag(OpLoc, diag::err_typecheck_unary_expr)
<< resultType.getAsString();
case UnaryOperator::Not: // bitwise complement
UsualUnaryConversions(Input);
resultType = Input->getType();
// C99 6.5.3.3p1. We allow complex int and float as a GCC extension.
if (resultType->isComplexType() || resultType->isComplexIntegerType())
// C99 does not support '~' for complex conjugation.
Diag(OpLoc, diag::ext_integer_complement_complex,
resultType.getAsString(), Input->getSourceRange());
Diag(OpLoc, diag::ext_integer_complement_complex)
<< resultType.getAsString() << Input->getSourceRange();
else if (!resultType->isIntegerType())
return Diag(OpLoc, diag::err_typecheck_unary_expr,
resultType.getAsString(), Input->getSourceRange());
return Diag(OpLoc, diag::err_typecheck_unary_expr)
<< resultType.getAsString() << Input->getSourceRange();
break;
case UnaryOperator::LNot: // logical negation
// Unlike +/-/~, integer promotions aren't done here (C99 6.5.3.3p5).
DefaultFunctionArrayConversion(Input);
resultType = Input->getType();
if (!resultType->isScalarType()) // C99 6.5.3.3p1
return Diag(OpLoc, diag::err_typecheck_unary_expr,
resultType.getAsString());
return Diag(OpLoc, diag::err_typecheck_unary_expr)
<< resultType.getAsString();
// LNot always has type int. C99 6.5.3.3p5.
resultType = Context.IntTy;
break;
@ -3320,7 +3320,7 @@ Sema::ExprResult Sema::ActOnBuiltinOffsetOf(SourceLocation BuiltinLoc,
// one is known to be a field designator. Verify that the ArgTy represents
// a struct/union/class.
if (!ArgTy->isRecordType())
return Diag(TypeLoc, diag::err_offsetof_record_type,ArgTy.getAsString());
return Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy.getAsString();
// Otherwise, create a compound literal expression as the base, and
// iteratively process the offsetof designators.
@ -3339,8 +3339,8 @@ Sema::ExprResult Sema::ActOnBuiltinOffsetOf(SourceLocation BuiltinLoc,
const ArrayType *AT = Context.getAsArrayType(Res->getType());
if (!AT) {
delete Res;
return Diag(OC.LocEnd, diag::err_offsetof_array_type,
Res->getType().getAsString());
return Diag(OC.LocEnd, diag::err_offsetof_array_type)
<< Res->getType().getAsString();
}
// FIXME: C++: Verify that operator[] isn't overloaded.
@ -3358,8 +3358,8 @@ Sema::ExprResult Sema::ActOnBuiltinOffsetOf(SourceLocation BuiltinLoc,
const RecordType *RC = Res->getType()->getAsRecordType();
if (!RC) {
delete Res;
return Diag(OC.LocEnd, diag::err_offsetof_record_type,
Res->getType().getAsString());
return Diag(OC.LocEnd, diag::err_offsetof_record_type)
<< Res->getType().getAsString();
}
// Get the decl corresponding to this.
@ -3604,8 +3604,8 @@ Sema::ExprResult Sema::ActOnOverloadExpr(ExprTy **args, unsigned NumArgs,
typeNames += Args[i+1]->getType().getAsString();
}
return Diag(BuiltinLoc, diag::err_overload_no_match, typeNames,
SourceRange(BuiltinLoc, RParenLoc));
return Diag(BuiltinLoc, diag::err_overload_no_match)
<< typeNames << SourceRange(BuiltinLoc, RParenLoc);
}
Sema::ExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc,
@ -3628,9 +3628,8 @@ Sema::ExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc,
if (CheckAssignmentConstraints(VaListType, E->getType()) != Compatible)
return Diag(E->getLocStart(),
diag::err_first_argument_to_va_arg_not_of_type_va_list,
E->getType().getAsString(),
E->getSourceRange());
diag::err_first_argument_to_va_arg_not_of_type_va_list)
<< E->getType().getAsString() << E->getSourceRange();
// FIXME: Warn if a non-POD type is passed in.

View File

@ -125,8 +125,8 @@ Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep,
// be complete.
//
if (!RT->getDecl()->isDefinition())
return Diag(TyBeginLoc, diag::err_invalid_incomplete_type_use,
Ty.getAsString(), FullRange);
return Diag(TyBeginLoc, diag::err_invalid_incomplete_type_use)
<< Ty.getAsString() << FullRange;
unsigned DiagID = PP.getDiagnostics().getCustomDiagID(Diagnostic::Error,
"class constructors are not supported yet");
@ -233,8 +233,8 @@ bool Sema::CheckCXXBooleanCondition(Expr *&CondExpr) {
AssignConvertType
ConvTy = CheckSingleAssignmentConstraints(Context.BoolTy, CondExpr);
if (ConvTy == Incompatible)
return Diag(CondExpr->getLocStart(), diag::err_typecheck_bool_condition,
Ty.getAsString(), CondExpr->getSourceRange());
return Diag(CondExpr->getLocStart(), diag::err_typecheck_bool_condition)
<< Ty.getAsString() << CondExpr->getSourceRange();
return false;
}

View File

@ -730,9 +730,9 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
return;
}
} else {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class,
SrcPointee.getUnqualifiedType().getAsString(),
SrcExpr->getSourceRange());
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
<< SrcPointee.getUnqualifiedType().getAsString()
<< SrcExpr->getSourceRange();
return;
}
@ -769,8 +769,9 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
const RecordDecl *SrcDecl = SrcRecord->getDecl()->getDefinition(Self.Context);
assert(SrcDecl && "Definition missing");
if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic,
SrcPointee.getUnqualifiedType().getAsString(), SrcExpr->getSourceRange());
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic)
<< SrcPointee.getUnqualifiedType().getAsString()
<< SrcExpr->getSourceRange();
}
// Done. Everything else is run-time checks.

View File

@ -210,8 +210,8 @@ Sema::ActOnIfStmt(SourceLocation IfLoc, ExprTy *CondVal,
if (CheckCXXBooleanCondition(condExpr)) // C++ 6.4p4
return true;
} else if (!condType->isScalarType()) // C99 6.8.4.1p1
return Diag(IfLoc, diag::err_typecheck_statement_requires_scalar,
condType.getAsString(), condExpr->getSourceRange());
return Diag(IfLoc, diag::err_typecheck_statement_requires_scalar)
<< condType.getAsString() << condExpr->getSourceRange();
// Warn if the if block has a null body without an else value.
// this helps prevent bugs due to typos, such as
@ -275,7 +275,7 @@ void Sema::ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &Val,
// If the input was signed and negative and the output is unsigned,
// warn.
if (!NewSign && OldVal.isSigned() && OldVal.isNegative())
Diag(Loc, DiagID, OldVal.toString(10), Val.toString(10));
Diag(Loc, DiagID) << OldVal.toString(10) << Val.toString(10);
Val.setIsSigned(NewSign);
} else if (NewWidth < Val.getBitWidth()) {
@ -286,7 +286,7 @@ void Sema::ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &Val,
ConvVal.extend(Val.getBitWidth());
ConvVal.setIsSigned(Val.isSigned());
if (ConvVal != Val)
Diag(Loc, DiagID, Val.toString(10), ConvVal.toString(10));
Diag(Loc, DiagID) << Val.toString(10) << ConvVal.toString(10);
// Regardless of whether a diagnostic was emitted, really do the
// truncation.
@ -299,7 +299,7 @@ void Sema::ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &Val,
Val.setIsSigned(NewSign);
if (Val.isNegative()) // Sign bit changes meaning.
Diag(Loc, DiagID, OldVal.toString(10), Val.toString(10));
Diag(Loc, DiagID) << OldVal.toString(10) << Val.toString(10);
}
}
@ -349,8 +349,8 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtTy *Switch,
QualType CondType = CondExpr->getType();
if (!CondType->isIntegerType()) { // C99 6.8.4.2p1
Diag(SwitchLoc, diag::err_typecheck_statement_requires_integer,
CondType.getAsString(), CondExpr->getSourceRange());
Diag(SwitchLoc, diag::err_typecheck_statement_requires_integer)
<< CondType.getAsString() << CondExpr->getSourceRange();
return true;
}
@ -422,7 +422,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtTy *Switch,
if (CaseVals[i].first == CaseVals[i+1].first) {
// If we have a duplicate, report it.
Diag(CaseVals[i+1].second->getLHS()->getLocStart(),
diag::err_duplicate_case, CaseVals[i].first.toString(10));
diag::err_duplicate_case) << CaseVals[i].first.toString(10);
Diag(CaseVals[i].second->getLHS()->getLocStart(),
diag::err_duplicate_case_prev);
// FIXME: We really want to remove the bogus case stmt from the substmt,
@ -505,8 +505,8 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtTy *Switch,
if (OverlapStmt) {
// If we have a duplicate, report it.
Diag(CR->getLHS()->getLocStart(),
diag::err_duplicate_case, OverlapVal.toString(10));
Diag(CR->getLHS()->getLocStart(), diag::err_duplicate_case)
<< OverlapVal.toString(10);
Diag(OverlapStmt->getLHS()->getLocStart(),
diag::err_duplicate_case_prev);
// FIXME: We really want to remove the bogus case stmt from the substmt,
@ -536,8 +536,8 @@ Sema::ActOnWhileStmt(SourceLocation WhileLoc, ExprTy *Cond, StmtTy *Body) {
if (CheckCXXBooleanCondition(condExpr)) // C++ 6.4p4
return true;
} else if (!condType->isScalarType()) // C99 6.8.5p2
return Diag(WhileLoc, diag::err_typecheck_statement_requires_scalar,
condType.getAsString(), condExpr->getSourceRange());
return Diag(WhileLoc, diag::err_typecheck_statement_requires_scalar)
<< condType.getAsString() << condExpr->getSourceRange();
return new WhileStmt(condExpr, (Stmt*)Body, WhileLoc);
}
@ -555,8 +555,8 @@ Sema::ActOnDoStmt(SourceLocation DoLoc, StmtTy *Body,
if (CheckCXXBooleanCondition(condExpr)) // C++ 6.4p4
return true;
} else if (!condType->isScalarType()) // C99 6.8.5p2
return Diag(DoLoc, diag::err_typecheck_statement_requires_scalar,
condType.getAsString(), condExpr->getSourceRange());
return Diag(DoLoc, diag::err_typecheck_statement_requires_scalar)
<< condType.getAsString() << condExpr->getSourceRange();
return new DoStmt((Stmt*)Body, condExpr, DoLoc);
}
@ -593,8 +593,8 @@ Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc,
if (CheckCXXBooleanCondition(Second)) // C++ 6.4p4
return true;
} else if (!SecondType->isScalarType()) // C99 6.8.5p2
return Diag(ForLoc, diag::err_typecheck_statement_requires_scalar,
SecondType.getAsString(), Second->getSourceRange());
return Diag(ForLoc, diag::err_typecheck_statement_requires_scalar)
<< SecondType.getAsString() << Second->getSourceRange();
}
return new ForStmt(First, Second, Third, Body, ForLoc);
}

View File

@ -203,14 +203,14 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) {
// incomplete type.
if (!EltTy->isIncompleteOrObjectType()) {
Diag(DS.getRestrictSpecLoc(),
diag::err_typecheck_invalid_restrict_invalid_pointee,
EltTy.getAsString(), DS.getSourceRange());
diag::err_typecheck_invalid_restrict_invalid_pointee)
<< EltTy.getAsString() << DS.getSourceRange();
TypeQuals &= ~QualType::Restrict; // Remove the restrict qualifier.
}
} else {
Diag(DS.getRestrictSpecLoc(),
diag::err_typecheck_invalid_restrict_not_pointer,
Result.getAsString(), DS.getSourceRange());
diag::err_typecheck_invalid_restrict_not_pointer)
<< Result.getAsString() << DS.getSourceRange();
TypeQuals &= ~QualType::Restrict; // Remove the restrict qualifier.
}
}
@ -228,8 +228,8 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) {
"Has CV quals but not C or V?");
Loc = DS.getVolatileSpecLoc();
}
Diag(Loc, diag::warn_typecheck_function_qualifiers,
Result.getAsString(), DS.getSourceRange());
Diag(Loc, diag::warn_typecheck_function_qualifiers)
<< Result.getAsString() << DS.getSourceRange();
}
// C++ [dcl.ref]p1:
@ -275,8 +275,8 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) {
case DeclaratorChunk::Pointer:
if (T->isReferenceType()) {
// C++ 8.3.2p4: There shall be no ... pointers to references ...
Diag(DeclType.Loc, diag::err_illegal_decl_pointer_to_reference,
D.getIdentifier() ? D.getIdentifier()->getName() : "type name");
Diag(DeclType.Loc, diag::err_illegal_decl_pointer_to_reference)
<< (D.getIdentifier() ? D.getIdentifier()->getName() : "type name");
D.setInvalidType(true);
T = Context.IntTy;
}
@ -285,9 +285,8 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) {
// object or incomplete types shall not be restrict-qualified."
if ((DeclType.Ptr.TypeQuals & QualType::Restrict) &&
!T->isIncompleteOrObjectType()) {
Diag(DeclType.Loc,
diag::err_typecheck_invalid_restrict_invalid_pointee,
T.getAsString());
Diag(DeclType.Loc, diag::err_typecheck_invalid_restrict_invalid_pointee)
<< T.getAsString();
DeclType.Ptr.TypeQuals &= QualType::Restrict;
}
@ -327,9 +326,8 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) {
// object or incomplete types shall not be restrict-qualified."
if (DeclType.Ref.HasRestrict &&
!T->isIncompleteOrObjectType()) {
Diag(DeclType.Loc,
diag::err_typecheck_invalid_restrict_invalid_pointee,
T.getAsString());
Diag(DeclType.Loc, diag::err_typecheck_invalid_restrict_invalid_pointee)
<< T.getAsString();
DeclType.Ref.HasRestrict = false;
}
@ -355,39 +353,39 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) {
// C99 6.7.5.2p1: If the element type is an incomplete or function type,
// reject it (e.g. void ary[7], struct foo ary[7], void ary[7]())
if (T->isIncompleteType()) {
Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_incomplete_type,
T.getAsString());
Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_incomplete_type)
<< T.getAsString();
T = Context.IntTy;
D.setInvalidType(true);
} else if (T->isFunctionType()) {
Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_functions,
D.getIdentifier() ? D.getIdentifier()->getName() : "type name");
Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_functions)
<< (D.getIdentifier() ? D.getIdentifier()->getName() : "type name");
T = Context.getPointerType(T);
D.setInvalidType(true);
} else if (const ReferenceType *RT = T->getAsReferenceType()) {
// C++ 8.3.2p4: There shall be no ... arrays of references ...
Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_references,
D.getIdentifier() ? D.getIdentifier()->getName() : "type name");
Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_references)
<< (D.getIdentifier() ? D.getIdentifier()->getName() : "type name");
T = RT->getPointeeType();
D.setInvalidType(true);
} else if (const RecordType *EltTy = T->getAsRecordType()) {
// If the element type is a struct or union that contains a variadic
// array, reject it: C99 6.7.2.1p2.
if (EltTy->getDecl()->hasFlexibleArrayMember()) {
Diag(DeclType.Loc, diag::err_flexible_array_in_array,
T.getAsString());
Diag(DeclType.Loc, diag::err_flexible_array_in_array)
<< T.getAsString();
T = Context.IntTy;
D.setInvalidType(true);
}
} else if (T->isObjCInterfaceType()) {
Diag(DeclType.Loc, diag::warn_objc_array_of_interfaces,
T.getAsString());
Diag(DeclType.Loc, diag::warn_objc_array_of_interfaces)
<< T.getAsString();
}
// C99 6.7.5.2p1: The size expression shall have integer type.
if (ArraySize && !ArraySize->getType()->isIntegerType()) {
Diag(ArraySize->getLocStart(), diag::err_array_size_non_int,
ArraySize->getType().getAsString(), ArraySize->getSourceRange());
Diag(ArraySize->getLocStart(), diag::err_array_size_non_int)
<< ArraySize->getType().getAsString() << ArraySize->getSourceRange();
D.setInvalidType(true);
delete ArraySize;
ATI.NumElts = ArraySize = 0;