summaryrefslogtreecommitdiffstats
path: root/clang/test
Commit message (Collapse)AuthorAgeFilesLines
* Extend builtin "attribute" syntax to include a notation forDouglas Gregor2009-02-144-4/+9
| | | | | | | | | | | | | | | | | | | | | printf-like functions, both builtin functions and those in the C library. The function-call checker now queries this attribute do determine if we have a printf-like function, rather than scanning through the list of "known functions IDs". However, there are 5 functions they are not yet "builtins", so the function-call checker handles them specifically still: - fprintf and vfprintf: the builtins mechanism cannot (yet) express FILE* arguments, so these can't be encoded. - NSLog: the builtins mechanism cannot (yet) express NSString* arguments, so this (and NSLogv) can't be encoded. - asprintf and vasprintf: these aren't part of the C99 standard library, so we really shouldn't be defining them as builtins in the general case (and we don't seem to have the machinery to make them builtins only on certain targets and depending on whether extensions are enabled). llvm-svn: 64512
* fix rdar://6586493, a bug in codegen of the GNU Chris Lattner2009-02-131-0/+6
| | | | | | missing-?:-true-value extension. llvm-svn: 64505
* Implicitly declare certain C library functions (malloc, strcpy, memmove,Douglas Gregor2009-02-133-3/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | etc.) when we perform name lookup on them. This ensures that we produce the correct signature for these functions, which has two practical impacts: 1) When we're supporting the "implicit function declaration" feature of C99, these functions will be implicitly declared with the right signature rather than as a function returning "int" with no prototype. See PR3541 for the reason why this is important (hint: GCC always predeclares these functions). 2) If users attempt to redeclare one of these library functions with an incompatible signature, we produce a hard error. This patch does a little bit of work to give reasonable error messages. For example, when we hit case #1 we complain that we're implicitly declaring this function with a specific signature, and then we give a note that asks the user to include the appropriate header (e.g., "please include <stdlib.h> or explicitly declare 'malloc'"). In case #2, we show the type of the implicit builtin that was incorrectly declared, so the user can see the problem. We could do better here: for example, when displaying this latter error message we say something like: 'strcpy' was implicitly declared here with type 'char *(char *, char const *)' but we should really print out a fake code line showing the declaration, like this: 'strcpy' was implicitly declared here as: char *strcpy(char *, char const *) This would also be good for printing built-in candidates with C++ operator overloading. The set of C library functions supported by this patch includes all functions from the C99 specification's <stdlib.h> and <string.h> that (a) are predefined by GCC and (b) have signatures that could cause codegen issues if they are treated as functions with no prototype returning and int. Future work could extend this set of functions to other C library functions that we know about. llvm-svn: 64504
* Set constant bit on static block vars as well. Patch by Anders Johnson!qDaniel Dunbar2009-02-131-1/+10
| | | | llvm-svn: 64502
* Warn about attribute used ignored on "extern int aDaniel Dunbar2009-02-131-0/+3
| | | | | | __attribute__((used))". llvm-svn: 64499
* Add test case illustrating special handling of 'SenTestCase' subclasses for ↵Ted Kremenek2009-02-131-1/+33
| | | | | | the missing -dealloc check. llvm-svn: 64494
* IRgen support for attribute used.Daniel Dunbar2009-02-131-0/+14
| | | | | | - PR3566 llvm-svn: 64492
* If x is an invalid field decl, don't construct an expression for P->x, Chris Lattner2009-02-131-0/+7
| | | | | | just silently return an error to avoid bogus diagnostics. llvm-svn: 64491
* Pull MayDeferGeneration out of EmitGlobal.Daniel Dunbar2009-02-131-1/+19
| | | | | | | | - Fix emission of static functions with constructor attribute while I was here. <rdar://problem/6140899> [codegen] "static" and attribute-constructor interact poorly llvm-svn: 64488
* Fix rdar://6562329, a static analyzer crash Ted noticed on Chris Lattner2009-02-131-0/+5
| | | | | | | | | | | | | | wine sources. This was happening because HighlightMacros was calling EnterMainFile multiple times on the same preprocessor object and getting an assert due to the new #line stuff (the file in question was bison output with #line directives). The fix for this is to not reenter the file. Instead, relex the tokens in raw mode, swizzle them a bit and repreprocess the token stream. An added bonus of this is that rewrite macros will now hilight the macro definition as well as its uses. Woo. llvm-svn: 64480
* Sema/AST support for attribute used. Patch by Anders Johnson (with small ↵Daniel Dunbar2009-02-131-0/+17
| | | | | | tweaks & test case)! llvm-svn: 64478
* Fix capitalization in a diagnosticDouglas Gregor2009-02-131-1/+1
| | | | llvm-svn: 64472
* Fixed a 64bit code gen bug of a cateogoryFariborz Jahanian2009-02-131-0/+8
| | | | | | implementation with no category declaration! llvm-svn: 64470
* Start warning about unknown attributes.Anders Carlsson2009-02-131-1/+1
| | | | llvm-svn: 64447
* Add CodeGen support for the nodebug attribute.Anders Carlsson2009-02-131-0/+12
| | | | llvm-svn: 64445
* Add sema support for the nodebug attribute.Anders Carlsson2009-02-131-0/+8
| | | | llvm-svn: 64441
* Initial implementation of arbitrary fixed-width integer types. Eli Friedman2009-02-131-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently only used for 128-bit integers. Note that we can't use the fixed-width integer types for other integer modes without other changes because glibc headers redefines (u)int*_t and friends using the mode attribute. For example, this means that uint64_t has to be compatible with unsigned __attribute((mode(DI))), and uint64_t is currently defined to long long. And I have a feeling we'll run into issues if we try to define uint64_t as something which isn't either long or long long. This doesn't get the alignment right in most cases, including the 128-bit integer case; I'll file a PR shortly. The gist of the issue is that the targets don't really expose the information necessary to figure out the alignment outside of the target description, so there's a non-trivial amount of work involved in getting it working right. That said, the alignment used is conservative, so the only issue with the current implementation is ABI compatibility. This makes it trivial to add some sort of "bitwidth" attribute to make arbitrary-width integers; I'll do that in a followup. We could also use this for stuff like the following for compatibility with gcc, but I have a feeling it would be a better idea for clang to be consistent between C and C++ modes rather than follow gcc's example for C mode. struct {unsigned long long x : 33;} x; unsigned long long a(void) {return x.x+1;} llvm-svn: 64434
* Add mangling for variadic functions and conversion functionsDouglas Gregor2009-02-131-0/+2
| | | | llvm-svn: 64425
* This test now passes.Ted Kremenek2009-02-131-3/+2
| | | | llvm-svn: 64417
* Tighten checking of the "overloadable" attribute. If any function by aDouglas Gregor2009-02-131-2/+5
| | | | | | | | | | | | | | | | | | | given name in a given scope is marked as "overloadable", every function declaration and definition with that same name and in that same scope needs to have the "overloadable" attribute. Essentially, the "overloadable" attribute is not part of attribute merging, so it must be specified even for redeclarations. This keeps users from trying to be too sneaky for their own good: double sin(double) __attribute__((overloadable)); // too sneaky #include <math.h> Previously, this would have made "sin" overloadable, and therefore given it a mangled name. Now, we get an error inside math.h when we see a (re)declaration of "sin" that doesn't have the "overloadable" attribute. llvm-svn: 64414
* Add basic support for C++ name mangling according to the Itanium C++Douglas Gregor2009-02-132-0/+33
| | | | | | | | | | | | | | | | ABI to the CodeGen library. Since C++ code-generation is so incomplete, we can't exercise much of this mangling code. However, a few smoke tests show that it's doing the same thing as GCC. When C++ codegen matures, we'll extend the ABI tester to verify name-mangling as well, and complete the implementation here. At this point, the major client of name mangling is in the uses of the new "overloadable" attribute in C, which allows overloading. Any "overloadable" function in C (or in an extern "C" block in C++) will be mangled the same way that the corresponding C++ function would be mangled. llvm-svn: 64413
* Honor attribute section on static block var decls.Daniel Dunbar2009-02-121-2/+7
| | | | llvm-svn: 64411
* Fix limits.h for linux, as glibc does a #include_next unlessMike Stump2009-02-121-0/+3
| | | | | | | | | _GCC_LIMITS_H_ is defined, when __GNUC__ is defined. Also, we need to stay away from possible conflicts with header guards. We should use CLANG_ to prefix all header guards. llvm-svn: 64408
* Add missing test for the "overloadable" attributeDouglas Gregor2009-02-121-0/+37
| | | | llvm-svn: 64396
* Fix <rdar://problem/6499801> clang does not detect objc type mismatch in ↵Steve Naroff2009-02-121-1/+18
| | | | | | conditional expr llvm-svn: 64393
* Fix a bug with designated initializers where we were stepping out of aDouglas Gregor2009-02-121-0/+14
| | | | | | | | | union subobject initialization before checking whether the next initiailizer was actually a designated initializer. This led to spurious "excess elements in union initializer" errors. Thanks to rdivacky for reporting the bug! llvm-svn: 64392
* Support __attribute__(section(<name>))Daniel Dunbar2009-02-121-1/+13
| | | | llvm-svn: 64380
* Turn warning into error. Minor incompatibility with GCC (for scalar types, ↵Steve Naroff2009-02-122-2/+6
| | | | | | GCC only produces a warning). llvm-svn: 64375
* Fix va_arg bug noticed by Eli, __builtin_va_arg is not an l-valueDaniel Dunbar2009-02-121-0/+8
| | | | | | designating an object. llvm-svn: 64371
* Test case for emitting va_arg as l-value; apparently I only *thought* I had ↵Daniel Dunbar2009-02-121-0/+1
| | | | | | committed this. llvm-svn: 64368
* Add test for overloading with _Complex in CDouglas Gregor2009-02-121-0/+50
| | | | llvm-svn: 64347
* Expand the definition of a complex promotion to include complex ->Douglas Gregor2009-02-121-1/+8
| | | | | | | | complex conversions where the conversion between the real types is an integral promotion. This is how G++ handles complex promotions for its complex integer extension. llvm-svn: 64344
* Introduce _Complex conversions into the function overloadingDouglas Gregor2009-02-121-0/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | system. Since C99 doesn't have overloading and C++ doesn't have _Complex, there is no specification for this. Here's what I think makes sense. Complex conversions come in several flavors: - Complex promotions: a complex -> complex conversion where the underlying real-type conversion is a floating-point promotion. GCC seems to call this a promotion, EDG does something else. This is given "promotion" rank for determining the best viable function. - Complex conversions: a complex -> complex conversion that is not a complex promotion. This is given "conversion" rank for determining the best viable function. - Complex-real conversions: a real -> complex or complex -> real conversion. This is given "conversion" rank for determining the best viable function. These rules are the same for C99 (when using the "overloadable" attribute) and C++. However, there is one difference in the handling of floating-point promotions: in C99, float -> long double and double -> long double are considered promotions (so we give them "promotion" rank), while C++ considers these conversions ("conversion" rank). llvm-svn: 64343
* Remove some non-ascii characters. Thanks Gabor.Steve Naroff2009-02-111-1/+1
| | | | llvm-svn: 64330
* Fix <rdar://problem/6505139> [clang on growl]: need to allow unnamed ↵Steve Naroff2009-02-111-0/+8
| | | | | | selectors as the first argument llvm-svn: 64320
* Fix <rdar://problem/6243503> [sema] @throw; accepted outside catch block.Steve Naroff2009-02-111-1/+1
| | | | llvm-svn: 64318
* Finished semantic analysis of non-type template arguments, to checkDouglas Gregor2009-02-111-4/+7
| | | | | | | | | | | for non-external names whose address becomes the template argument. This completes C++ [temp.arg.nontype]p1. Note that our interpretation of C++ [temp.arg.nontype]p1b3 differs from EDG's interpretation (we're stricter, and GCC agrees with us). They're opening a core issue about the matter. llvm-svn: 64317
* Allow the use of default template arguments when forming a classDouglas Gregor2009-02-112-1/+14
| | | | | | | | | | | | | | template specialization (e.g., std::vector<int> would now be well-formed, since it relies on a default argument for the Allocator template parameter). This is much less interesting than one might expect, since (1) we're not actually using the default arguments for anything important, such as naming an actual Decl, and (2) we'll often need to instantiate the default arguments to check their well-formedness. The real fun will come later. llvm-svn: 64310
* Fix <rdar://problem/6206858> [sema] type check @throw statements.Steve Naroff2009-02-112-1/+7
| | | | | | Added a FIXME to handle 'rethrow' check. llvm-svn: 64308
* Implement semantic checking for template arguments that correspond toDouglas Gregor2009-02-114-10/+27
| | | | | | | | pointer-to-member-data non-type template parameters. Also, get consistent about what it means to returned a bool from CheckTemplateArgument. llvm-svn: 64305
* finish off codegen support for sub of pointer to functions, Chris Lattner2009-02-111-0/+7
| | | | | | finishing off rdar://6520707 llvm-svn: 64295
* testcase for rdar://6096412 which already works.Chris Lattner2009-02-111-0/+8
| | | | llvm-svn: 64289
* Add semantic checking for template arguments that correspond toDouglas Gregor2009-02-111-0/+23
| | | | | | | | | | | | | | non-type template parameters that are references to functions or pointers to member functions. Did a little bit of refactoring so that these two cases, along with the handling of non-type template parameters that are pointers to functions, are handled by the same path. Also, tweaked FixOverloadedFunctionReference to cope with member function pointers. This is a necessary step for getting all of the fun member pointer conversions working outside of template arguments, too. llvm-svn: 64277
* Semantic checking for template arguments that correspond to non-typeDouglas Gregor2009-02-111-0/+12
| | | | | | | template parameters that have reference type. Effectively, we're doing a very limited form of reference binding here. llvm-svn: 64270
* Add partial semantic checking of template arguments that are meant forDouglas Gregor2009-02-112-0/+30
| | | | | | | | | | | | | | | | | | | non-type template parameters of pointer-to-object and pointer-to-function type. The most fun part of this is the use of overload resolution to pick a function from the set of overloaded functions that comes in as a template argument. Also, fixed two minor bugs in this area: - We were allowing non-type template parameters of type pointer to void. - We weren't patching up an expression that refers to an overloaded function set via "&f" properly. We're still not performing complete checking of the expression to be sure that it is referring to an object or function with external linkage (C++ [temp.arg.nontype]p1). llvm-svn: 64266
* Add another test case for the MissingDealloc checker.Ted Kremenek2009-02-101-0/+20
| | | | llvm-svn: 64257
* Add type-checking and implicit conversions for template parameters ofDouglas Gregor2009-02-101-4/+30
| | | | | | integral or enumeration type. llvm-svn: 64256
* Handle the case where EmitBlock might be called multiple times for the same ↵Anders Carlsson2009-02-101-0/+11
| | | | | | block. Fixes PR3536. llvm-svn: 64252
* GNU allows structs with flexible array members to be placed insideDouglas Gregor2009-02-102-7/+27
| | | | | | | arrays and other structs/unions as an extension. Downgrade our error to a warning. Fixes PR3540. llvm-svn: 64239
* Fix a problem with bogus template shadowing warningsDouglas Gregor2009-02-101-4/+4
| | | | llvm-svn: 64230
OpenPOWER on IntegriCloud