summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaChecking.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Revert r158887. This fixes pr13168.Rafael Espindola2012-06-211-271/+120
| | | | | | | | Revert "If an object (such as a std::string) with an appropriate c_str() member function" This reverts commit 7d96f6106bfbd85b1af06f34fdbf2834aad0e47e. llvm-svn: 158949
* PR13165: False positive when initializing member data pointers with NULL.David Blaikie2012-06-211-2/+1
| | | | | | | | | This now correctly covers, I believe, all the pointer types: * 'any' pointers (both function and data normal pointers and ObjC object pointers) * member pointers (both function and data) * block pointers llvm-svn: 158931
* If an object (such as a std::string) with an appropriate c_str() member functionRichard Smith2012-06-211-120/+271
| | | | | | | | | | | | | | | is passed to a variadic function in a position where a format string indicates that c_str()'s return type is desired, provide a note suggesting that the user may have intended to call the c_str() member. Factor the non-POD-vararg checking out of DefaultVariadicArgumentPromotion and move it to SemaChecking in order to facilitate this. Factor the call checking out of function call checking and block call checking, and extend it to cover constructor calls too. Patch by Sam Panzer! llvm-svn: 158887
* Enable -Wnull-conversion for non-integral target types (eg: double).David Blaikie2012-06-191-5/+6
| | | | llvm-svn: 158744
* Fix Sema and IRGen for atomic compound assignment so it has the right ↵Eli Friedman2012-06-161-1/+1
| | | | | | | | semantics when promotions are involved. (As far as I can tell, this only affects some edge cases.) llvm-svn: 158591
* PR13099: Teach -Wformat about raw string literals, UTF-8 strings and Unicode ↵Richard Smith2012-06-131-1/+1
| | | | | | escape sequences. llvm-svn: 158390
* Teach format string checking about compile-time CFString constants.Jordan Rose2012-06-041-20/+24
| | | | | | | | | | | | | Within the guts of CheckFormatHandler, the IsObjCLiteral flag was being used in two ways: to see if null bytes were allowed, and to see if the '%@' specifier is allowed.* The former usage has been changed to an explicit test and the latter pushed down to CheckPrintfHandler and renamed ObjCContext, since it applies to CFStrings as well. * This also changes how wide chars are interpreted; in OS X Foundation, the wide character type is 'unichar', a typedef for short, rather than wchar_t. llvm-svn: 157968
* Teach printf/scanf about enums with fixed underlying types.Jordan Rose2012-06-041-10/+19
| | | | llvm-svn: 157961
* Change wording of 'memcpy' type mismatch warning and remove fixit.Anna Zaks2012-05-301-16/+10
| | | | | | As per comments following r157659. llvm-svn: 157722
* Add fixits for memory access warnings.Anna Zaks2012-05-301-5/+35
| | | | | | | Also, do not display the builtin name and macro expansion when the function is a builtin. llvm-svn: 157659
* Use the argument location instead of the format string location when warningMatt Beaumont-Gay2012-05-171-8/+8
| | | | | | | | | | | | | | | | | | about argument type mismatch. This gives a nicer diagnostic in cases like printf(fmt, i); where previously the snippet just pointed at 'fmt' (with a note at the definition of fmt). It's a wash for cases like printf("%f", i); where previously we snippeted the offending portion of the format string, but didn't indicate which argument was at fault. llvm-svn: 156968
* Don't warn when NULL is used within a macro but its conversion is outside a ↵David Blaikie2012-05-151-9/+10
| | | | | | | | | | | | | | | | | | macro. This fixes the included test case & was reported by Nico Weber. It's a little bit nasty using the difference in the conversion context, but seems to me like a not unreasonable solution. I did have to fix up the conversion context for conditional operators (it seems correct to me to include the context for which we're actually doing the comparison - across all the nested conditionals, rather than the innermost conditional which might not actually have the problematic implicit conversion at all) and template default arguments (this is a bit of a hack, since we don't have the source location of the '=' anymore, so I just used the start of the parameter - open to suggestions there) llvm-svn: 156861
* Changing std::string to SmallString for r156826.David Blaikie2012-05-151-2/+2
| | | | | | Based on code review feedback by Jordan Rose. llvm-svn: 156827
* Improve some of the conversion warnings to fire on conversion to bool.David Blaikie2012-05-151-3/+17
| | | | | | | | | | | Moves the bool bail-out down a little in SemaChecking - so now -Wnull-conversion and -Wliteral-conversion can fire when the target type is bool. Also improve the wording/details in the -Wliteral-conversion warning to match the -Wconstant-conversion. llvm-svn: 156826
* Merge branch 'format-string-braced-init'Matt Beaumont-Gay2012-05-111-1/+7
| | | | llvm-svn: 156653
* Teach IsTailPaddedMemberArray() (used by -Warray-bounds) that a FieldDecl ↵Ted Kremenek2012-05-091-4/+12
| | | | | | | | may have a Typedef type, and not always a ConstantArrayType. Fixes <rdar://problem/11387038>. llvm-svn: 156464
* Inhibit ObjC format warning only in system headers (NSLocalizedString).Jean-Daniel Dupas2012-05-041-1/+2
| | | | | | Add a test case for the related NSAssert workaround. llvm-svn: 156205
* IsTailPaddedMemberArray uses a FieldDecl'sSean Callanan2012-05-041-5/+9
| | | | | | | | | | | | | getTypeSourceInfo() without checking for NULL. FieldDecls may have NULL TypeSourceInfo, and in fact some FieldDecls generated by Clang -- and all FieldDecls generated by LLDB -- have no TypeSourceInfo. This patch makes IsTailPaddedMemberArray check for NULL. llvm-svn: 156186
* Move Sema::RequireCompleteType() and Sema::RequireCompleteExprType()Douglas Gregor2012-05-041-1/+1
| | | | | | | | | | | off PartialDiagnostic. PartialDiagnostic is rather heavyweight for something that is in the critical path and is rarely used. So, switch over to an abstract-class-based callback mechanism that delays most of the work until a diagnostic is actually produced. Good for ~11k code size reduction in the compiler and 1% speedup in -fsyntax-only on the code in <rdar://problem/11004361>. llvm-svn: 156176
* Fix handling of wint_t - we can't assume wint_t is purely an integer ↵James Molloy2012-05-041-1/+2
| | | | | | | | | | | | 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
* Disable -Wformat-extra-args for arguments defined in system headers.Bob Wilson2012-05-031-3/+6
| | | | | | | | | | | | | Some of the NSAssert macros in OS X 10.7 are implemented in a way that adds extra arguments that trigger the -Wformat-extra-args warning. Earlier versions of clang failed to detect those -Wformat issues, but now that clang is reporting those problems, we need to quiet them since there's nothing to be done to fix them. <rdar://problem/11317765> I don't know how to write a testcase for this. Suggestions welcome. Patch by Ted Kremenek! llvm-svn: 156092
* Turn the mixed-sign-comparison diagnostic into a runtime behaviorDouglas Gregor2012-05-011-3/+4
| | | | | | diagnostic, from Eitan Adler! llvm-svn: 155876
* When going through references to check if the function returns the addressArgyrios Kyrtzidis2012-04-301-24/+34
| | | | | | | | | | | | | | | | of a local variable, make sure we don't infinitely recurse when the reference binds to itself. e.g: int* func() { int& i = i; // assign non-exist variable to a reference which has same name. return &i; // return pointer } rdar://11345441 llvm-svn: 155856
* Add FixItHint for -Wnull-conversion to initialize with an appropriate literal.David Blaikie2012-04-301-1/+2
| | | | | | Reviewed by Doug Gregor. llvm-svn: 155839
* Currently __builtin_annotation() only annotates an i32.Julien Lerouge2012-04-281-8/+23
| | | | | | | | | | | | | | | | | | | | | | | | i32 __builtin_annotation(i32, string); Applying it to i64 (e.g., long long) generates the following IR. trunc i64 {{.*}} to i32 call i32 @llvm.annotation.i32 zext i32 {{.*}} to i64 The redundant truncation and extension make the result difficult to use. This patch makes __builtin_annotation() generic. type __builtin_annotation(type, string); For the i64 example, it simplifies the generated IR to: call i64 @llvm.annotation.i64 Patch by Xi Wang! llvm-svn: 155764
* Implement __atomic_fetch_nand and __atomic_nand_fetch to complete our set ofRichard Smith2012-04-131-0/+2
| | | | | | GNU __atomic builtins. llvm-svn: 154659
* Warn on 64-to-32 for source value of x bits where 64 >= x > 32.David Blaikie2012-04-121-1/+1
| | | | | | | | | The codepath already only works for source bits > target bits, it's just that it was testing for the source expr bits to be exactly 64. This meant simple cases (int i = x_long / 2) were missed & ended up under the general -Wconversion warning, which a user might not have enabled. llvm-svn: 154626
* Implement support for 18 of the GNU-compatible __atomic builtins.Richard Smith2012-04-121-98/+212
| | | | | | | | | | | | This is not quite sufficient for libstdc++'s <atomic>: we still need __atomic_test_and_set and __atomic_clear, and may need a more complete __atomic_is_lock_free implementation. We are also missing an implementation of __atomic_always_lock_free, __atomic_nand_fetch, and __atomic_fetch_nand, but those aren't needed for libstdc++. llvm-svn: 154579
* Provide, and document, a set of __c11_atomic_* intrinsics to implement C11'sRichard Smith2012-04-111-5/+16
| | | | | | | | | <stdatomic.h> header. In passing, fix LanguageExtensions to note that C11 and C++11 are no longer "upcoming standards" but are now actually standardized. llvm-svn: 154513
* Remove dead assignment to local variable.Ted Kremenek2012-04-041-1/+0
| | | | llvm-svn: 153985
* Pass parameters in the correct order when assembling an AtomicExpr.David Chisnall2012-03-291-1/+1
| | | | llvm-svn: 153665
* Suppress macro expansion of NULL in NULL warnings.David Blaikie2012-03-161-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For "int i = NULL;" we would produce: null.cpp:5:11: warning: implicit conversion of NULL constant to integer [-Wconversion] int i = NULL; ~ ^~~~ null.cpp:1:14: note: expanded from macro 'NULL' \#define NULL __null ^~~~~~ But we really shouldn't trace that macro expansion back into the header, yet we still want macro back traces for code like this: \#define FOO NULL int i = FOO; or \#define FOO int i = NULL; FOO While providing appropriate tagging at different levels of the expansion, etc. The included test case exercises these cases & does some basic validation (to ensure we don't have macro expansion notes where we shouldn't, and do where we should) - but doesn't go as far as to validate the source location/ranges used in those notes and warnings. llvm-svn: 152940
* Provide the specific target type in the -Wnull-conversion warning.David Blaikie2012-03-151-1/+1
| | | | llvm-svn: 152835
* Unify naming of LangOptions variable/get function across the Clang stack ↵David Blaikie2012-03-111-10/+10
| | | | | | | | | | (Lex to AST). The member variable is always "LangOpts" and the member function is always "getLangOpts". Reviewed by Chris Lattner llvm-svn: 152536
* Remove BlockDeclRefExpr and introduce a bit on DeclRefExpr toJohn McCall2012-03-101-11/+1
| | | | | | | | track whether the referenced declaration comes from an enclosing local context. I'm amenable to suggestions about the exact meaning of this bit. llvm-svn: 152491
* -Wformat-non-iso: warn about positional arguments (pr12017)Hans Wennborg2012-03-091-2/+12
| | | | | | | | | 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
* Fix a couple bugs in the way we handle array indexes in array bounds ↵Eli Friedman2012-02-271-4/+4
| | | | | | checking. Specifically, make sure we don't ignore explicit casts in indexes, and make sure we use unsigned extension/comparisons on indexes. Fixes <rdar://problem/10916006>. llvm-svn: 151569
* Modernize some code which processes CastExprs to use CastKinds. No intended ↵Eli Friedman2012-02-231-29/+21
| | | | | | functional change. llvm-svn: 151298
* Warn about non-standard format strings (pr12017)Hans Wennborg2012-02-221-2/+60
| | | | | | | | | 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
* Generate an AST for the conversion from a lambda closure type to aDouglas Gregor2012-02-221-3/+5
| | | | | | | | | | | | | | | block pointer that returns a block literal which captures (by copy) the lambda closure itself. Some aspects of the block literal are left unspecified, namely the capture variable (which doesn't actually exist) and the body (which will be filled in by IRgen because it can't be written as an AST). Because we're switching to this model, this patch also eliminates tracking the copy-initialization expression for the block capture of the conversion function, since that information is now embedded in the synthesized block literal. -1 side tables FTW. llvm-svn: 151131
* When calling a non variadic format function(vprintf, vscanf, NSLogv, …), ↵Jean-Daniel Dupas2012-02-211-7/+21
| | | | | | warn if the format string argument is a parameter that is not itself declared as a format string with compatible format. llvm-svn: 151080
* Make -Wformat fix-its preserve original conversion specifiers.Hans Wennborg2012-02-151-2/+4
| | | | | | | | | | | | | | | | | 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
* Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)Dmitri Gribenko2012-02-141-0/+127
| | | | | | | | | | | | | | * if, switch, range-based for: warn if semicolon is on the same line. * for, while: warn if semicolon is on the same line and either next statement is compound statement or next statement has more indentation. Replacing the semicolon with {} or moving the semicolon to the next line will always silence the warning. Tests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp. llvm-svn: 150515
* Support all null pointer literals in format strings.David Blaikie2012-02-101-8/+7
| | | | llvm-svn: 150276
* Enhance checking for null format string literal to take into account __null. ↵Ted Kremenek2012-02-101-0/+1
| | | | | | Fixes <rdar://problem/8269537>. llvm-svn: 150260
* Implement return type deduction for lambdas per C++11Douglas Gregor2012-02-091-1/+1
| | | | | | | | | [expr.prim.lambda]p4, including the current suggested resolution of core isue 975, which allows multiple return statements so long as the types match. ExtWarn when user code is actually making use of this extension. llvm-svn: 150168
* Various interrelated cleanups for lambdas:Douglas Gregor2012-02-091-1/+4
| | | | | | | | | | | | | | - Complete the lambda class when we finish the lambda expression (previously, it was left in the "being completed" state) - Actually return the LambdaExpr object and bind to the resulting temporary when needed. - Detect when cleanups are needed while capturing a variable into a lambda (e.g., due to default arguments in the copy constructor), and make sure those cleanups apply for the whole of the lambda expression. llvm-svn: 150123
* non-literal strftime format string is not unsafe.Jean-Daniel Dupas2012-02-071-0/+5
| | | | llvm-svn: 150009
* Implements support of format_arg attribute on C++ member.Jean-Daniel Dupas2012-02-071-19/+14
| | | | llvm-svn: 149998
* Basic: import SmallString<> into clang namespaceDylan Noblesmith2012-02-051-4/+4
| | | | | | | (I was going to fix the TODO about DenseMap too, but that would break self-host right now. See PR11922.) llvm-svn: 149799
OpenPOWER on IntegriCloud