зеркало из https://github.com/microsoft/clang-1.git
Fix crasher caused by setting a bit in a possibly empty bitvector while
doing printf format string checking. This is a recent regression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97318 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
dab10acd56
Коммит
e3fc547902
|
@ -1283,7 +1283,12 @@ CheckPrintfHandler::HandleFormatSpecifier(const analyze_printf::FormatSpecifier
|
||||||
|
|
||||||
// Consume the argument.
|
// Consume the argument.
|
||||||
unsigned argIndex = FS.getArgIndex();
|
unsigned argIndex = FS.getArgIndex();
|
||||||
|
if (argIndex < NumDataArgs) {
|
||||||
|
// The check to see if the argIndex is valid will come later.
|
||||||
|
// We set the bit here because we may exit early from this
|
||||||
|
// function if we encounter some other error.
|
||||||
CoveredArgs.set(argIndex);
|
CoveredArgs.set(argIndex);
|
||||||
|
}
|
||||||
|
|
||||||
// Check for using an Objective-C specific conversion specifier
|
// Check for using an Objective-C specific conversion specifier
|
||||||
// in a non-ObjC literal.
|
// in a non-ObjC literal.
|
||||||
|
|
|
@ -145,6 +145,7 @@ void torture(va_list v8) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void test10(int x, float f, int i, long long lli) {
|
void test10(int x, float f, int i, long long lli) {
|
||||||
|
printf("%s"); // expected-warning{{more '%' conversions than data arguments}}
|
||||||
printf("%@", 12); // expected-warning{{invalid conversion specifier '@'}}
|
printf("%@", 12); // expected-warning{{invalid conversion specifier '@'}}
|
||||||
printf("\0"); // expected-warning{{format string contains '\0' within the string body}}
|
printf("\0"); // expected-warning{{format string contains '\0' within the string body}}
|
||||||
printf("xs\0"); // expected-warning{{format string contains '\0' within the string body}}
|
printf("xs\0"); // expected-warning{{format string contains '\0' within the string body}}
|
||||||
|
|
|
@ -50,3 +50,8 @@ void rdar_7068334() {
|
||||||
printf("%i ",test); // expected-warning{{conversion specifies type 'int' but the argument has type 'long long'}}
|
printf("%i ",test); // expected-warning{{conversion specifies type 'int' but the argument has type 'long long'}}
|
||||||
NSLog(@"%i ",test); // expected-warning{{conversion specifies type 'int' but the argument has type 'long long'}}
|
NSLog(@"%i ",test); // expected-warning{{conversion specifies type 'int' but the argument has type 'long long'}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <rdar://problem/7697748>
|
||||||
|
void rdar_7697748() {
|
||||||
|
NSLog(@"%@!"); // expected-warning{{more '%' conversions than data arguments}}
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче