summaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaChecking.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index a248a6b53b0d..ce846ae88c38 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -5320,9 +5320,11 @@ bool Sema::BuiltinAssumeAligned(CallExpr *TheCall) {
{
ExprResult FirstArgResult =
DefaultFunctionArrayLvalueConversion(FirstArg);
- if (checkBuiltinArgument(*this, TheCall, 0))
+ if (!FirstArgResult.get()->getType()->isPointerType()) {
+ Diag(TheCall->getBeginLoc(), diag::err_builtin_assume_aligned_invalid_arg)
+ << TheCall->getSourceRange();
return true;
- /// In-place updation of FirstArg by checkBuiltinArgument is ignored.
+ }
TheCall->setArg(0, FirstArgResult.get());
}
@@ -6589,27 +6591,33 @@ void CheckFormatHandler::HandleNonStandardConversionSpecifier(
void CheckFormatHandler::HandlePosition(const char *startPos,
unsigned posLen) {
- EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg),
- getLocationOfByte(startPos),
- /*IsStringLocation*/true,
- getSpecifierRange(startPos, posLen));
+ if (!S.getDiagnostics().isIgnored(
+ diag::warn_format_non_standard_positional_arg, SourceLocation()))
+ EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg),
+ getLocationOfByte(startPos),
+ /*IsStringLocation*/ true,
+ getSpecifierRange(startPos, posLen));
}
void CheckFormatHandler::HandleInvalidPosition(
const char *startSpecifier, unsigned specifierLen,
analyze_format_string::PositionContext p) {
- EmitFormatDiagnostic(
- S.PDiag(diag::warn_format_invalid_positional_specifier) << (unsigned)p,
- getLocationOfByte(startSpecifier), /*IsStringLocation*/ true,
- getSpecifierRange(startSpecifier, specifierLen));
+ if (!S.getDiagnostics().isIgnored(
+ diag::warn_format_invalid_positional_specifier, SourceLocation()))
+ EmitFormatDiagnostic(
+ S.PDiag(diag::warn_format_invalid_positional_specifier) << (unsigned)p,
+ getLocationOfByte(startSpecifier), /*IsStringLocation*/ true,
+ getSpecifierRange(startSpecifier, specifierLen));
}
void CheckFormatHandler::HandleZeroPosition(const char *startPos,
unsigned posLen) {
- EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier),
- getLocationOfByte(startPos),
- /*IsStringLocation*/true,
- getSpecifierRange(startPos, posLen));
+ if (!S.getDiagnostics().isIgnored(diag::warn_format_zero_positional_specifier,
+ SourceLocation()))
+ EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier),
+ getLocationOfByte(startPos),
+ /*IsStringLocation*/ true,
+ getSpecifierRange(startPos, posLen));
}
void CheckFormatHandler::HandleNullChar(const char *nullCharacter) {
@@ -8080,8 +8088,9 @@ static void CheckFormatString(
}
if (Type == Sema::FST_Printf || Type == Sema::FST_NSString ||
- Type == Sema::FST_FreeBSDKPrintf || Type == Sema::FST_OSLog ||
- Type == Sema::FST_OSTrace || Type == Sema::FST_Syslog) {
+ Type == Sema::FST_Kprintf || Type == Sema::FST_FreeBSDKPrintf ||
+ Type == Sema::FST_OSLog || Type == Sema::FST_OSTrace ||
+ Type == Sema::FST_Syslog) {
CheckPrintfHandler H(
S, FExpr, OrigFormatExpr, Type, firstDataArg, numDataArgs,
(Type == Sema::FST_NSString || Type == Sema::FST_OSTrace), Str, APK,
@@ -8090,7 +8099,7 @@ static void CheckFormatString(
if (!analyze_format_string::ParsePrintfString(
H, Str, Str + StrLen, S.getLangOpts(), S.Context.getTargetInfo(),
- Type == Sema::FST_FreeBSDKPrintf))
+ Type == Sema::FST_Kprintf || Type == Sema::FST_FreeBSDKPrintf))
H.DoneProcessing();
} else if (Type == Sema::FST_Scanf) {
CheckScanfHandler H(S, FExpr, OrigFormatExpr, Type, firstDataArg,