Ted Kremenek
c08c475fe0
Support '%p' format specifier with block pointers.
...
llvm-svn: 152839
2012-03-15 21:22:27 +00:00
Hans Wennborg
aa8c61cf94
-Wformat-non-iso: warn about positional arguments (pr12017)
...
This renames the -Wformat-non-standard flag to -Wformat-non-iso,
rewords the current warnings a bit (pointing out that a format string
is not supported by ISO C rather than being "non standard"),
and adds a warning about positional arguments.
llvm-svn: 152403
2012-03-09 10:10:54 +00:00
Hans Wennborg
c9dd946852
Warn about non-standard format strings (pr12017)
...
This adds the -Wformat-non-standard flag (off by default,
enabled by -pedantic), which warns about non-standard
things in format strings (such as the 'q' length modifier,
the 'S' conversion specifier, etc.)
llvm-svn: 151154
2012-02-22 10:17:01 +00:00
Hans Wennborg
9bc9bcc247
Format string analysis: give 'q' its own enumerator.
...
This is in preparation for being able to warn about 'q' and other
non-standard format string features.
It also allows us to print its name correctly.
llvm-svn: 150697
2012-02-16 16:34:54 +00:00
Ted Kremenek
d22b98aad2
Tweak format string checking to work with %@ and ObjC toll-free bridging. <rdar://problem/10814120>
...
llvm-svn: 149907
2012-02-06 21:45:29 +00:00
Hans Wennborg
27a59958bd
Format string warnings: don't a.k.a. wchar_t with wchar_t.
...
This fixes the case where Clang would output:
error: format specifies type 'wchar_t *' (aka 'wchar_t *')
ArgTypeResult::getRepresentativeTypeName needs to take into account
that wchar_t can be a built-in type (as opposed to in C, where it is a
typedef).
llvm-svn: 149387
2012-01-31 14:59:59 +00:00
Ted Kremenek
9b1f3d46d0
Fix NSLog format string checking for %@.
...
llvm-svn: 148885
2012-01-25 00:04:09 +00:00
Ted Kremenek
6fa5727939
Teach scanf/printf checking about '%Ld' and friends (a GNU extension). Fixes PR 9466.
...
llvm-svn: 148859
2012-01-24 21:29:54 +00:00
Ted Kremenek
9139892728
The 'l' length modifier makes sense with the scanlist conversion specifier.
...
llvm-svn: 148586
2012-01-20 22:11:52 +00:00
David Blaikie
e4d798f078
More dead code removal (using -Wunreachable-code)
...
llvm-svn: 148577
2012-01-20 21:50:17 +00:00
Hans Wennborg
6073e31baa
scanf: parse the 'm' length modifier, and check that the right arguments
...
are used with that and the 'a' length modifier.
llvm-svn: 148029
2012-01-12 17:11:12 +00:00
Hans Wennborg
fd950878fa
scanf analysis: the 'a' length modifier is valid with a scanlist
...
Before r148025 we (accidentally) didn't check whether a length modifier is
appropriate for a scanlist, but now we do.
llvm-svn: 148026
2012-01-12 15:07:16 +00:00
Hans Wennborg
e5f554ac48
Support the 'a' scanf length modifier as an extension in C++.
...
It should not be supported in C++11, since that uses the C99 standard
library, in which 'a' is a format specifier.
llvm-svn: 147310
2011-12-28 13:10:50 +00:00
Hans Wennborg
23926bd2d7
Support the 'a' length modifier in scanf format strings as a C90
...
extension.
This fixes gcc.dg/format/c90-scanf-3.c and ext-4.c (test for excess
errors).
llvm-svn: 146649
2011-12-15 10:25:47 +00:00
Hans Wennborg
a5b1aa99c7
Make printf warnings refer to wint_t and wchar_t by name
...
in addition to underlying type.
llvm-svn: 146254
2011-12-09 12:22:12 +00:00
Hans Wennborg
a8b042d31a
Move definition of ConversionSpecifier::toString() to FormatString.cpp
...
It's declared in FormatString.h, so it shouldn't be defined in
PrintfFormatString.cpp.
llvm-svn: 146253
2011-12-09 11:11:07 +00:00
Hans Wennborg
772e9270f6
Make printf warnings refer to intmax_t et al. by name
...
in addition to underlying type.
For example, the warning for printf("%zu", 42.0);
changes from "conversion specifies type 'unsigned long'" to "conversion
specifies type 'size_t' (aka 'unsigned long')"
(This is a second attempt after r145697, which got reverted.)
llvm-svn: 146032
2011-12-07 10:33:11 +00:00
Nick Lewycky
45ccba64ab
Revert r145697 and dependent patch r145702. It added a dependency from
...
lib/Analysis to lib/Sema which is cyclical.
llvm-svn: 145724
2011-12-02 23:21:43 +00:00
Hans Wennborg
70f7213d2c
Make conversion specifier warning refer to typedef if possible.
...
For example, the warning for printf("%zu", 42.0);
changes from "conversion specifies type 'unsigned long'" to "conversion
specifies type 'size_t' (aka 'unsigned long')"
llvm-svn: 145697
2011-12-02 19:22:15 +00:00
Ted Kremenek
74e82bd190
Tweak printf format string parsing to accept 'hh' conversion specifier to accept any char, not just signed char. Fixes <rdar://problem/10303638>.
...
llvm-svn: 142908
2011-10-25 04:20:41 +00:00
David Blaikie
aa347f9392
Removing a bunch of dead returns/breaks after llvm_unreachables.
...
llvm-svn: 140407
2011-09-23 20:26:49 +00:00
David Blaikie
83d382b1ca
Switch assert(0/false) llvm_unreachable.
...
llvm-svn: 140367
2011-09-23 05:06:16 +00:00
Chris Lattner
0e62c1cc0b
remove unneeded llvm:: namespace qualifiers on some core types now that LLVM.h imports
...
them into the clang namespace.
llvm-svn: 135852
2011-07-23 10:55:15 +00:00
Ted Kremenek
d0c2afd2c3
Revert r135147 and r135075. The consensus was that this wasn't the right thing to do.
...
llvm-svn: 135152
2011-07-14 17:05:32 +00:00
Ted Kremenek
2df6485d51
Add extra sanity checking in FormatString::matchesType() that we are comparing integers to integers. This happens not to be an issue now, but the extra check helps future proof in case of future refactorings.
...
llvm-svn: 135147
2011-07-14 15:43:21 +00:00
Ted Kremenek
ba84cf53bc
Reapply r135075, but modify format-strings.c and format-strings-fixit.c test cases to be more portable with an explicit target triple.
...
llvm-svn: 135134
2011-07-14 06:49:52 +00:00
NAKAMURA Takumi
91d831bc2d
Revert r135075, "format string checking: long and int have the same widths on 32-bit, so we shouldn't warn about using"
...
It fails on freebsd, mingw and msvc10.
llvm-svn: 135129
2011-07-14 05:16:18 +00:00
Ted Kremenek
60654d697a
format string checking: long and int have the same widths on 32-bit, so we shouldn't warn about using
...
an "int" format specifier with a "long" type in 32-bit.
llvm-svn: 135075
2011-07-13 20:20:58 +00:00
Ted Kremenek
cc47e0fad1
Re-relax conversion specifier checking for printf format strings and conversion specifiers. My recent change was a mistake.
...
llvm-svn: 135048
2011-07-13 17:35:14 +00:00
Ted Kremenek
1d3fb8af68
Fix inversion in argument type checking for format strings with conversion specifiers for character types.
...
llvm-svn: 135046
2011-07-13 17:25:47 +00:00
Daniel Dunbar
421bb42c9f
Revert r133024, "[format strings] correctly suggest correct type for '%@'
...
specifiers. Fixes <rdar://problem/9607158>." because it causes false positives
on some code that uses CF toll free bridging.
- I'll let Doug or Ted figure out the right fix here, possibly just to accept
any pointer type.
llvm-svn: 134041
2011-06-28 23:33:55 +00:00
Ted Kremenek
192ed0b7ee
[format strings] correctly suggest correct type for '%@' specifiers. Fixes <rdar://problem/9607158>.
...
llvm-svn: 133024
2011-06-14 22:56:51 +00:00
Anders Carlsson
3fd50319d3
Don't warn when matching %p to nullptr.
...
llvm-svn: 118344
2010-11-06 14:58:53 +00:00
Ted Kremenek
5f0c066062
Fix printf format string checking for '%lc' (which expects a wint_t or compatible argument). Fixes PR 7981.
...
llvm-svn: 111978
2010-08-24 22:24:51 +00:00
Eli Friedman
04831926ec
Detabify.
...
llvm-svn: 111768
2010-08-22 01:00:03 +00:00
Michael J. Spencer
2c35bc1232
Revert r109428 "Hoist argument type checking into CheckFormatHandler. This is prep for scanf format"
...
Got errors about ASTContext being undefined with Visual Studio 2010.
llvm-svn: 109491
2010-07-27 04:46:02 +00:00
Ted Kremenek
df4472bca0
Hoist argument type checking into CheckFormatHandler. This is prep for scanf format
...
string argument type checking.
llvm-svn: 109428
2010-07-26 19:45:54 +00:00
Ted Kremenek
ea28f83a5f
Move 'hasValidLengthModifier' from PrintfFormatSpecifier to FormatSpecifier.
...
llvm-svn: 108906
2010-07-20 20:04:42 +00:00
Ted Kremenek
0208793e41
Add most of the boilerplate support for scanf format string checking. This includes
...
handling the parsing of scanf format strings and hooking the checking into Sema.
Most of this checking logic piggybacks on what was already there for checking printf format
strings, but the checking logic has been refactored to support both.
What is left to be done is to support argument type checking in format strings and of course
fix the usual tail of bugs that will follow.
llvm-svn: 108500
2010-07-16 02:11:22 +00:00