зеркало из https://github.com/microsoft/clang-1.git
The 'l' length modifier makes sense with the scanlist conversion specifier.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148586 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
c4f4d5d570
Коммит
ef1440b6ec
|
@ -531,6 +531,7 @@ bool FormatSpecifier::hasValidLengthModifier() const {
|
|||
case ConversionSpecifier::nArg:
|
||||
case ConversionSpecifier::cArg:
|
||||
case ConversionSpecifier::sArg:
|
||||
case ConversionSpecifier::ScanListArg:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
|
|
@ -71,9 +71,11 @@ void test_variants(int *i, const char *s, ...) {
|
|||
vsscanf(buf, "%[abc", ap); // expected-warning{{no closing ']' for '%[' in scanf format string}}
|
||||
}
|
||||
|
||||
void test_scanlist(int *ip, char *sp) {
|
||||
void test_scanlist(int *ip, char *sp, wchar_t *ls) {
|
||||
scanf("%[abc]", ip); // expected-warning{{format specifies type 'char *' but the argument has type 'int *'}}
|
||||
scanf("%h[abc]", sp); // expected-warning{{length modifier 'h' results in undefined behavior or no effect with '[' conversion specifier}}
|
||||
scanf("%l[xyx]", ls); // no-warning
|
||||
scanf("%ll[xyx]", ls); // expected-warning {{length modifier 'll' results in undefined behavior or no effect with '[' conversion specifier}}
|
||||
}
|
||||
|
||||
void test_alloc_extension(char **sp, wchar_t **lsp, float *fp) {
|
||||
|
@ -100,3 +102,4 @@ void test_alloc_extension(char **sp, wchar_t **lsp, float *fp) {
|
|||
scanf("%mC", fp); // expected-warning{{format specifies type 'wchar_t **' (aka 'int **') but the argument has type 'float *'}}
|
||||
scanf("%m[abc]", fp); // expected-warning{{format specifies type 'char **' but the argument has type 'float *'}}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче