diff options
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 14 | 
1 files changed, 11 insertions, 3 deletions
| diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 8846c25724e..2887a50d527 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1701,9 +1701,17 @@ bool CheckScanfHandler::HandleScanfSpecifier(      CoveredArgs.set(argIndex);    } -  // FIXME: Check that the length modifier is valid with the given -  // conversion specifier. -   +  // Check the length modifier is valid with the given conversion specifier. +  const LengthModifier &LM = FS.getLengthModifier(); +  if (!FS.hasValidLengthModifier()) { +    S.Diag(getLocationOfByte(LM.getStart()), +           diag::warn_format_nonsensical_length) +      << LM.toString() << CS.toString() +      << getSpecifierRange(startSpecifier, specifierLen) +      << FixItHint::CreateRemoval(getSpecifierRange(LM.getStart(), +                                                    LM.getLength())); +  } +    // The remaining checks depend on the data arguments.    if (HasVAListArg)      return true; | 

