David Blaikie
7a30dc53c5
Use None rather than Optional<T>() where possible.
...
llvm-svn: 175705
2013-02-21 01:47:18 +00:00
David Blaikie
05785d1622
Include llvm::Optional in clang/Basic/LLVM.h
...
Post-commit CR feedback from Jordan Rose regarding r175594.
llvm-svn: 175679
2013-02-20 22:23:23 +00:00
Richard Smith
2bf7fdb723
s/CPlusPlus0x/CPlusPlus11/g
...
llvm-svn: 171367
2013-01-02 11:42:31 +00:00
Jordan Rose
4c266aa371
Format strings: offer a fixit for Darwin's %D/%U/%O to ISO %d/%u/%o.
...
<rdar://problem/12061922>
llvm-svn: 163772
2012-09-13 02:11:15 +00:00
Jordan Rose
510260c2bf
Format strings: %D, %U, and %O are valid on Darwin (same as %d, %u, %o).
...
These will warn under -Wformat-non-iso, and will still be rejected
outright on other platforms.
<rdar://problem/12061922>
llvm-svn: 163771
2012-09-13 02:11:03 +00:00
Jordan Rose
2f9cc04251
Format strings: suggest %lld instead of %qd and %Ld with -Wformat-non-iso.
...
As a corollary to the previous commit, even when an extension is
available, we can still offer a fixit to the standard modifier.
llvm-svn: 163453
2012-09-08 04:00:12 +00:00
Jordan Rose
92303592c3
Format strings: %Ld isn't available on Darwin or Windows.
...
This seems to be a GNU libc extension; we offer a fixit to %lld on
these platforms.
<rdar://problem/11518237>
llvm-svn: 163452
2012-09-08 04:00:03 +00:00
Hans Wennborg
b1ab2a84f0
Remove ScanfArgType and bake that logic into ArgType.
...
This is useful for example for %n in printf, which expects
a pointer to int with the same logic for checking as %d
would have in scanf.
llvm-svn: 161407
2012-08-07 08:59:46 +00:00
Hans Wennborg
c3b3da0bb2
Rename analyze_format_string::ArgTypeResult to ArgType
...
Also remove redundant constructors and unused member functions.
llvm-svn: 161403
2012-08-07 08:11:26 +00:00
Hans Wennborg
16250c7c18
-Wformat: better handling of qualifiers on pointer arguments
...
Warn about using pointers to const-qualified types as arguments to
scanf. Ignore the volatile qualifier when checking if types match.
llvm-svn: 161052
2012-07-31 16:37:47 +00:00
Hans Wennborg
08574d3559
Make -Wformat walk the typedef chain when looking for size_t, etc.
...
Clang's -Wformat fix-its currently suggest using "%zu" for values of
type size_t (in C99 or C++11 mode). However, for a type such as
std::vector<T>::size_type, it does not notice that type is actually
typedeffed to size_t, and instead suggests a format for the underlying
type, such as "%lu" or "%u".
This commit makes the format string fix mechanism walk the typedef chain
so that it notices if the type is size_t, even if that isn't "at the
top".
llvm-svn: 160886
2012-07-27 19:17:46 +00:00
Jordan Rose
98709985a6
Teach printf/scanf about enums with fixed underlying types.
...
llvm-svn: 157961
2012-06-04 22:48:57 +00:00
Hans Wennborg
967b9cec23
Make -Wformat accept printf("%hhx", c); with -funsigned-char
...
For "%hhx", printf expects an unsigned char. This makes Clang
accept a 'char' argument for that also when using -funsigned-char.
This fixes PR12761.
llvm-svn: 156388
2012-05-08 17:21:31 +00:00
James Molloy
3636554b63
Fix handling of wint_t - we can't assume wint_t is purely an integer promotion of wchar_t - they may differ in signedness.
...
Teach ASTContext about WIntType, and have it taken from TargetInfo like WCharType. Should fix test/Sema/format-strings.c for ARM, with the exception of one subtest which will fail if wint_t and wchar_t are the same size and wint_t is signed, wchar_t is unsigned.
There'll be a followup commit to fix that.
Reviewed by Chandler and Hans at http://llvm.org/reviews/r/8
llvm-svn: 156165
2012-05-04 10:55:22 +00:00
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