diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2013-06-10 20:45:12 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2013-06-10 20:45:12 +0000 | 
| commit | 6a0372513edbc473b538d2f724efac50405d6fef (patch) | |
| tree | 8f7776b7310bebaf415ac5b69e46e9f928c37144 /lib/Sema/SemaChecking.cpp | |
| parent | 809500fc2c13c8173a16b052304d983864e4a1e1 (diff) | |
Notes
Diffstat (limited to 'lib/Sema/SemaChecking.cpp')
| -rw-r--r-- | lib/Sema/SemaChecking.cpp | 21 | 
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 4e11b3aa7920..a0998a46c666 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -586,12 +586,11 @@ bool Sema::CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,  }  bool Sema::CheckObjCMethodCall(ObjCMethodDecl *Method, SourceLocation lbrac,  -                               Expr **Args, unsigned NumArgs) { +                               ArrayRef<const Expr *> Args) {    VariadicCallType CallType =        Method->isVariadic() ? VariadicMethod : VariadicDoesNotApply; -  checkCall(Method, llvm::makeArrayRef<const Expr *>(Args, NumArgs), -            Method->param_size(), +  checkCall(Method, Args, Method->param_size(),              /*IsMemberFunction=*/false,              lbrac, Method->getSourceRange(), CallType); @@ -2009,7 +2008,7 @@ public:                                     PartialDiagnostic PDiag,                                     SourceLocation StringLoc,                                     bool IsStringLocation, Range StringRange, -                            ArrayRef<FixItHint> Fixit = ArrayRef<FixItHint>()); +                                   ArrayRef<FixItHint> Fixit = None);  protected:    bool HandleInvalidConversionSpecifier(unsigned argIndex, SourceLocation Loc, @@ -2036,7 +2035,7 @@ protected:    template <typename Range>    void EmitFormatDiagnostic(PartialDiagnostic PDiag, SourceLocation StringLoc,                              bool IsStringLocation, Range StringRange, -                            ArrayRef<FixItHint> Fixit = ArrayRef<FixItHint>()); +                            ArrayRef<FixItHint> Fixit = None);    void CheckPositionalAndNonpositionalArgs(        const analyze_format_string::FormatSpecifier *FS); @@ -2744,6 +2743,10 @@ CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS,      return true;    QualType ExprTy = E->getType(); +  while (const TypeOfExprType *TET = dyn_cast<TypeOfExprType>(ExprTy)) { +    ExprTy = TET->getUnderlyingExpr()->getType(); +  } +    if (AT.matchesType(S.Context, ExprTy))      return true; @@ -4308,7 +4311,7 @@ static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {      IntRange::forValueOfType(C, E->getType());    } -  if (FieldDecl *BitField = E->getBitField()) +  if (FieldDecl *BitField = E->getSourceBitField())      return IntRange(BitField->getBitWidthValue(C),                      BitField->getType()->isUnsignedIntegerOrEnumerationType()); @@ -4685,7 +4688,7 @@ static void AnalyzeAssignment(Sema &S, BinaryOperator *E) {    // We want to recurse on the RHS as normal unless we're assigning to    // a bitfield. -  if (FieldDecl *Bitfield = E->getLHS()->getBitField()) { +  if (FieldDecl *Bitfield = E->getLHS()->getSourceBitField()) {      if (AnalyzeBitFieldAssignment(S, Bitfield, E->getRHS(),                                    E->getOperatorLoc())) {        // Recurse, ignoring any implicit conversions on the RHS. @@ -5699,12 +5702,14 @@ bool Sema::CheckParmsForFunctionDef(ParmVarDecl **P, ParmVarDecl **PEnd,      //   notation in their sequences of declarator specifiers to specify      //   variable length array types.      QualType PType = Param->getOriginalType(); -    if (const ArrayType *AT = Context.getAsArrayType(PType)) { +    while (const ArrayType *AT = Context.getAsArrayType(PType)) {        if (AT->getSizeModifier() == ArrayType::Star) {          // FIXME: This diagnostic should point the '[*]' if source-location          // information is added for it.          Diag(Param->getLocation(), diag::err_array_star_in_function_definition); +        break;        } +      PType= AT->getElementType();      }    }  | 
