aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2011-06-15Eliminate a 'default' case in template argument deduction, where weDouglas Gregor
were just punting on template argument deduction for a number of type nodes. Most of them, obviously, didn't matter. As a consequence of this, make extended vector types (via the ext_vector_type attribute) actually work properly for several important cases: - If the attribute appears in a type-id (i.e, not attached to a typedef), actually build a proper vector type - Build ExtVectorType whenever the size is constant; previously, we were building DependentSizedExtVectorType when the size was constant but the type was dependent, which makes no sense at all. - Teach template argument deduction to handle ExtVectorType/DependentSizedExtVectorType. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133060 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Eliminate an unnecessary include. FIXMEs -=1 Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133056 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15When performing substitution of default template template parametersDouglas Gregor
before the template parameters have acquired a proper context (e.g., because the enclosing context has yet to be built), provide empty parameter lists for all outer template parameter scopes to inhibit any substitution for those template parameters. Fixes PR9643 / <rdar://problem/9251019>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133055 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15[analyzer] Revise CStringChecker's modelling of strcpy() and strcat():Jordy Rose
- (bounded copies) Be more conservative about how much is being copied. - (str(n)cat) If we can't compute the exact final length of an append operation, we can still lower-bound it. - (stpcpy) Fix the conjured return value at the end to actually be returned. This requires these supporting changes: - C string metadata symbols are still live even when buried in a SymExpr. - "Hypothetical" C string lengths, to represent a value that /will/ be passed to setCStringLength() if all goes well. (The idea is to allow for temporary constrainable symbols that may end up becoming permanent.) - The 'checkAdditionOverflow' helper makes sure that the two strings being appended in a strcat don't overflow size_t. This should never *actually* happen; the real effect is to keep the final string length from "wrapping around" in the constraint manager. This doesn't actually test the "bounded" operations (strncpy and strncat) because they can leave strings unterminated. Next on the list! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133046 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Don't add redundant FormatAttr, ConstAttr, or NoThrowAttr attributes,Douglas Gregor
either imlicitly (for builtins) or explicitly (due to multiple specification of the same attributes). Fixes <rdar://problem/9612060>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133045 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15[analyzer] If a C string length is UnknownVal, clear any existing length ↵Jordy Rose
binding. No tests yet because the only thing that sets string length is strcpy(), and that needs some work anyway. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133044 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15[analyzer] When performing a binary operation on symbolic operands, we ↵Jordy Rose
convert the symbol values to a common type. But in a relational operation, the result is an 'int' or 'bool', which may not be the appropriate type to convert the operands to. In these cases, use the left-hand operand's type as the conversion type. There's no associated test for this because fully-constrained symbolic values are evaluated ahead of time in normal expressions. This can only come up in checker-constructed expressions (like the ones in an upcoming patch to CStringChecker). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133041 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Properly implement C++0x [stmt.dcl]p3, which requires a scope to beDouglas Gregor
protected in the case where a variable is being initialized by a trivial default constructor but has a non-trivial destructor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133037 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Warn on "void f(int a[10]) { sizeof(a); }"Nico Weber
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133036 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-15Sema: show shift result in hexadecimalTed Kremenek
Change the output for -Wshift-overflow and -Wshift-sign-overflow to an unsigned hexadecimal. It makes more sense for looking at bits than a signed decimal does. Also, change the diagnostic's wording from "overrides" to "sets". This uses a new optional argument in APInt::toString() that adds the '0x' prefix to hexademical numbers. This fixes PR 9651. Patch by nobled@dreamwidth.org! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133033 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14Introduce a -cc1-level option to turn off related result typeDouglas Gregor
inference, to be used (only) by the Objective-C rewriter. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133025 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14[format strings] correctly suggest correct type for '%@' specifiers. Fixes ↵Ted Kremenek
<rdar://problem/9607158>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133024 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14revert r133003 and fix the bug properly: the issue was that ## in a tokenChris Lattner
lexer is not a paste operator, it is a normal token. This fixes a conformance issue shown here: http://p99.gforge.inria.fr/c99-conformance/c99-conformance-clang-2.9.html and it defines away the crash from before. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133005 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14Fix a crash on the testcase in PR9981 / rdar://9486765.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133003 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14When profiling FunctionProtoTypes, don't canonicalize the expressionDouglas Gregor
in a noexcept exception specification because it isn't part of the canonical type. This ensures that we keep the exact expression written in the noexcept exception specification, rather than accidentally "adopting" a previously-written and canonically "equivalent" function prototype. Fixes PR10087. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132998 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14Warn on memset(ptr, 0, sizeof(ptr)). Diagnostic wording by Jordy Rose.Nico Weber
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132996 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14Remove the Fix-it for missing statement in switchesDavid Majnemer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132994 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14StaticDiagNameIndex is never written to, place it into .rodata.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132990 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14when compiling in a GNU mode (e.g. gnu99) treat VLAs with a size that can be ↵Chris Lattner
folded to a constant as constant size arrays. This has slightly different semantics in some insane cases, but allows us to accept some constructs that GCC does. Continue to be pedantic in -std=c99 and other modes. This addressed rdar://8733881 - error "variable-sized object may not be initialized"; g++ accepts same code git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132983 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14fix rdar://9204520 - Accept int(0.85 * 10) as an initializer in a class memberChris Lattner
as an extension. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132980 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14Properly diagnose using abstract and incomplete types in va_argDavid Majnemer
- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there - Incomplete and abstract types are considered hard errors git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132979 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14Update the prefetch intrinsic usage. Now the last argument tells codegenBruno Cardoso Lopes
whether it's a data or instruction cache access. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132977 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14fix rdar://9546171 - -Wshorten-64-to-32 shouldn't warn on vector bitcasts.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132975 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14Move GlobalDecl to ASTPeter Collingbourne
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132973 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14[analyzer] CStringChecker checks functions in the C standard library, not ↵Jordy Rose
C++. Its external name is now unix.experimental.CString. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132958 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14The LLVM IR representation of byval arguments has a rather strange property: ↵Eli Friedman
if the alignment of an argument to a call is less than the specified byval alignment for that argument, there is no way to specify the alignment of the implied copy. Therefore, we must ensure that the alignment of the argument is at least the byval alignment. To do this, we have to mess with the alignment of relevant alloca's in some cases, and insert a copy that conceptually shouldn't be necessary in some cases. This patch tries relatively hard to avoid creating an extra copy if it can be avoided (see test3 in the included testcase), but it is not possible to avoid in some cases (like test2 in the included testcase). rdar://9483886 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132957 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14[analyzer] Change large if body to early return. No functionality change.Jordy Rose
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132956 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-14[analyzer] Fix modeling of strnlen to be more conservative. Move tests we ↵Jordy Rose
can't properly model (yet?) to string-fail.c. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132955 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Make __gnu_inline__ functions in gnu99 mode work the same way as inline ↵Eli Friedman
functions in gnu89 mode in terms of redefinitions. rdar://9559708 . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132953 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Put local variables in appropriate debug info scope.Devang Patel
This fixes radar 8757124. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132949 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Put classes into anonymous namespaces.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132924 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Eliminate the -f[no]objc-infer-related-result-type flags; there's noDouglas Gregor
reason to allow the user to control these semantics through a flag. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132919 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Document CheckObjCMethodOverridesDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132917 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Give a diagnostic when using non-POD types in a va_argDavid Majnemer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132905 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Improve the diagnostics generated for switch statements missing expressionsDavid Majnemer
- Move the diagnostic to the case statement instead of at the end of the switch - Add a fix-it hint as to how to fix the compilation error git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132903 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Fix a broken index left over from before this function was converted toChandler Carruth
handle memcpy and memmove. Spotted by Nico. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132902 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-13Correct the spelling of instantiationDavid Majnemer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132901 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-12Don't assert on initialized typedef declarations in classes:Richard Smith
struct { typedef int A = 0; }; According to the C++11 standard, this is not ill-formed, but does not have any ascribed meaning. We can't reasonably accept it, so treat it as ill-formed. Also switch C++ from an incorrect 'fields can only be initialized in constructors' diagnostic for this case to C's 'illegal initializer (only variables can be initialized)' git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132890 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Added 'atomic' for objc properties.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132879 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Implement support for C++11 in-class initialization of non-static data members.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132878 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Add code completetion code for the new 'atomic' attributeFariborz Jahanian
keyword in objc property decl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132877 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Fix order of operands for the warning about incompatible Objective-CDouglas Gregor
pointer assignment in C++. This was a longstanding problem spotted by Jordy Rose. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132873 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Implement Objective-C Related Result Type semantics.Douglas Gregor
Related result types apply Cocoa conventions to the type of message sends and property accesses to Objective-C methods that are known to always return objects whose type is the same as the type of the receiving class (or a subclass thereof), such as +alloc and -init. This tightens up static type safety for Objective-C, so that we now diagnose mistakes like this: t.m:4:10: warning: incompatible pointer types initializing 'NSSet *' with an expression of type 'NSArray *' [-Wincompatible-pointer-types] NSSet *array = [[NSArray alloc] init]; ^ ~~~~~~~~~~~~~~~~~~~~~~ /System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:72:1: note: instance method 'init' is assumed to return an instance of its receiver type ('NSArray *') - (id)init; ^ It also means that we get decent type inference when writing code in Objective-C++0x: auto array = [[NSMutableArray alloc] initWithObjects:@"one", @"two",nil]; // ^ now infers NSMutableArray* rather than id git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132868 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-11Restore 'atomic' as an attribute of objcFariborz Jahanian
properties. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132866 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-10PR10120: Make CodeGenModule::getVTableLinkage use NamedDecl::getLinkage to ↵Eli Friedman
determine whether the vtable should be externally visible, instead of a rough approximation of it which messes up with templates. While I'm here, zap the other user of isInAnonymousNamespace outside of Decl.cpp. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132861 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-10__OBJC__ is also a standard predefined macro.Nick Lewycky
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132855 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-10This change is breaking selfhost. Revert it until I have more timeSean Hunt
to study it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132843 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-10Implement caching of copy assignment operator lookup.Sean Hunt
I believe, upon, careful review, that this code causes us to incorrectly handle exception specifications of copy assignment operators in C++03 mode. However, we currently do not seem to properly implement the subtle distinction between copying of members and bases made by implicit copy constructors and assignment operators in C++03 - namely that they are limited in their overload selection - in all cases. As such, I feel that committing this code is correct pending a careful review of our implementation of these semantics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132841 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-10[analyzer] PR8962 again. Ban ParenExprs (and friends) from block-level ↵Jordy Rose
expressions (by calling IgnoreParens before adding expressions to blocks). Undo 132769 (LiveVariables' local IgnoreParens), since it's no longer necessary. Also, have Environment stop looking through NoOp casts; it didn't match the behavior of LiveVariables. And once that's gone, the whole cast block of that switch is unnecessary. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132840 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-10Implement caching for copy constructors in similar situations.Sean Hunt
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132835 91177308-0d34-0410-b5e6-96231b3b80d8