summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2012-01-12 14:44:54 +0000
committerHans Wennborg <hans@hanshq.net>2012-01-12 14:44:54 +0000
commit32f115f9c1cc594400542e5883593938e1166421 (patch)
tree94aa7839248dbc181db541ef28cc73f4348a2555
parent5b3aa60b447a77742a77a53d22c54cfcc0cad87f (diff)
downloadbcm5719-llvm-32f115f9c1cc594400542e5883593938e1166421.tar.gz
bcm5719-llvm-32f115f9c1cc594400542e5883593938e1166421.zip
scanf analysis: don't bail out after successful parse of scanlist
llvm-svn: 148025
-rw-r--r--clang/lib/Analysis/ScanfFormatString.cpp2
-rw-r--r--clang/test/Sema/format-strings-scanf.c4
2 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/Analysis/ScanfFormatString.cpp b/clang/lib/Analysis/ScanfFormatString.cpp
index e8bd0d0e246..d248476e47f 100644
--- a/clang/lib/Analysis/ScanfFormatString.cpp
+++ b/clang/lib/Analysis/ScanfFormatString.cpp
@@ -176,7 +176,7 @@ static ScanfSpecifierResult ParseScanfSpecifier(FormatStringHandler &H,
}
ScanfConversionSpecifier CS(conversionPosition, k);
if (k == ScanfConversionSpecifier::ScanListArg) {
- if (!ParseScanList(H, CS, I, E))
+ if (ParseScanList(H, CS, I, E))
return true;
}
FS.setConversionSpecifier(CS);
diff --git a/clang/test/Sema/format-strings-scanf.c b/clang/test/Sema/format-strings-scanf.c
index d1374d4bf96..2e32a26ac5c 100644
--- a/clang/test/Sema/format-strings-scanf.c
+++ b/clang/test/Sema/format-strings-scanf.c
@@ -68,6 +68,10 @@ 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) {
+ scanf("%[abc]", ip); // expected-warning{{conversion specifies type 'char *' but the argument has type 'int *'}}
+}
+
void test_alloc_extension(char **sp, wchar_t **lsp) {
/* Make sure "%a" gets parsed as a conversion specifier for float,
* even when followed by an 's', 'S' or '[', which would cause it to be
OpenPOWER on IntegriCloud