Benjamin Kramer
f3b323debc
[Sema] Don't crash on scanf on forward-declared enums.
...
This is valid in GNU C, which allows pointers to incomplete enums. GCC
just pretends that the underlying type is 'int' in those cases, follow
that behavior.
llvm-svn: 279374
2016-08-20 16:51:33 +00:00
Bruno Cardoso Lopes
0c18d03d91
[Sema] Handle UTF-8 invalid format string specifiers
...
Improve invalid format string specifier handling by printing out
invalid specifiers characters with \x, \u and \U. Previously clang
would print gargabe whenever the character is unprintable.
Example, before:
NSLog(@"%\u25B9"); => warning: invalid conversion specifier ' [-Wformat-invalid-specifier]
after:
NSLog(@"%\u25B9"); => warning: invalid conversion specifier '\u25b9' [-Wformat-invalid-specifier]
Differential Revision: http://reviews.llvm.org/D18296
rdar://problem/24672159
llvm-svn: 264752
2016-03-29 17:35:02 +00:00
Hans Wennborg
1b23158ce4
MS format strings: allow the 'h' length modifier with C, C, s and S (PR20808)
...
llvm-svn: 217196
2014-09-04 21:39:52 +00:00
Hans Wennborg
68f42b9515
MS format strings: support the 'w' length modifier (PR20808)
...
llvm-svn: 217195
2014-09-04 21:39:46 +00:00
Craig Topper
2554294321
[C++11] Use 'nullptr'. Analysis edition.
...
llvm-svn: 209191
2014-05-20 04:30:07 +00:00
Hans Wennborg
802df13e4d
Fix bad comment from r207573.
...
llvm-svn: 207854
2014-05-02 18:12:30 +00:00
Hans Wennborg
df51ee6c50
scanf analysis: handle scanlists that start with ^] (PR19559)
...
llvm-svn: 207573
2014-04-29 19:42:27 +00:00
Jordan Rose
177b0a3600
scanf format checking: include the buffer length in the fix-it for %s.
...
Patch by Zach Davis!
llvm-svn: 204300
2014-03-20 03:32:39 +00:00
David Majnemer
3cba495abc
Analysis: Add support for MS specific printf format specifiers
...
Summary: Adds support for %I, %I32 and %I64.
Reviewers: hans, jordan_rose, rnk, majnemer
Reviewed By: majnemer
CC: cfe-commits, cdavis5x
Differential Revision: http://llvm-reviews.chandlerc.com/D1456
llvm-svn: 188937
2013-08-21 21:54:46 +00:00
Hans Wennborg
0d81e01916
Add support for __wchar_t in -fms-extensions mode.
...
MSVC provides __wchar_t. This is the same as the built-in wchar_t type
from C++, but it is also available with -fno-wchar and in C.
The commit changes ASTContext to have two different types for this:
- WCharTy is the built-in type used for wchar_t in C++ and __wchar_t.
- WideCharTy is the type of a wide character literal. In C++ this is
the same as WCharTy, and in C it is an integer type compatible with
the type in <stddef.h>.
This fixes PR15815.
llvm-svn: 181587
2013-05-10 10:08:40 +00:00
Richard Smith
2bf7fdb723
s/CPlusPlus0x/CPlusPlus11/g
...
llvm-svn: 171367
2013-01-02 11:42:31 +00:00
Chandler Carruth
3a02247dc9
Sort all of Clang's files under 'lib', and fix up the broken headers
...
uncovered.
This required manually correcting all of the incorrect main-module
headers I could find, and running the new llvm/utils/sort_includes.py
script over the files.
I also manually added quite a few missing headers that were uncovered by
shuffling the order or moving headers up to be main-module-headers.
llvm-svn: 169237
2012-12-04 09:13:33 +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
Dmitri Gribenko
76bb5cabfa
Remove redundant semicolons which are null statements.
...
llvm-svn: 163546
2012-09-10 21:20:09 +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
abc1e22d65
Properly check length modfiers for %n in format strings.
...
llvm-svn: 161408
2012-08-07 09:13:19 +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
ebcd1c7ca2
Make -Wformat check the argument type for %n.
...
This makes Clang check that the corresponding argument for "%n" in a
format string is a pointer to int.
llvm-svn: 160966
2012-07-30 17:11:32 +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
614e72bec7
Make suggestions for mismatched enum arguments to printf/scanf.
...
llvm-svn: 157962
2012-06-04 22:49:02 +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
Hans Wennborg
d99d688358
Make -Wformat fix-its preserve original conversion specifiers.
...
This commit makes PrintfSpecifier::fixType() and ScanfSpecifier::fixType()
only fix a conversion specification enough that Clang wouldn't warn about it,
as opposed to always changing it to use the "canonical" conversion specifier.
(PR11975)
This preserves the user's choice of conversion specifier in cases like:
printf("%a", (long double)1);
where we previously suggested "%Lf", we now suggest "%La"
printf("%x", (long)1);
where we previously suggested "%ld", we now suggest "%lx".
llvm-svn: 150578
2012-02-15 09:59:46 +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
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
32f115f9c1
scanf analysis: don't bail out after successful parse of scanlist
...
llvm-svn: 148025
2012-01-12 14:44:54 +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
b1a5e09f6f
Check that arguments to a scanf call match the format specifier,
...
and offer fixits when there is a mismatch.
llvm-svn: 146326
2011-12-10 13:20:11 +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
Dan Gohman
28ade550f4
Fix namespace polution.
...
llvm-svn: 109440
2010-07-26 21:25:24 +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
4407ea4948
Hookup checking for invalid length modifiers in scanf format strings.
...
llvm-svn: 108907
2010-07-20 20:04:47 +00:00
Ted Kremenek
f03e6d85a1
Add 'ConversionSpecifier' root class in 'analyze_format_string' namespace and
...
derived 'PrintfConversionSpecifier' from this class. We will do the same for
'ScanfConversionSpecifier'.
llvm-svn: 108903
2010-07-20 20:04:27 +00:00
Ted Kremenek
516ef222ba
Rename 'ConsumedSoFarArg' -> 'nArg' and 'OutIntPtrArg' to 'nArg' (scanf and printf checking).
...
llvm-svn: 108900
2010-07-20 20:04:10 +00:00
Ted Kremenek
5c3e1b9a54
Add missing conversion specifier parsing for 'u', 'x', 'o', and 's'. Fixes <rdar://problem/8204052>.
...
llvm-svn: 108742
2010-07-19 19:47:40 +00:00
Ted Kremenek
d7b31cc60d
Hook up warning for an incomplete scanlist in scanf format strings.
...
llvm-svn: 108542
2010-07-16 18:28:03 +00:00
Ted Kremenek
a1ef09407d
Add the main scanf-parsing logic that I meant to include in my previous commit.
...
llvm-svn: 108502
2010-07-16 02:11:31 +00:00