aboutsummaryrefslogtreecommitdiff
path: root/test/Sema/function.c
AgeCommit message (Collapse)Author
2009-09-22In C++, a variadic function does not need an ellipsis prior to the comma. ↵Douglas Gregor
Parse it in both C and C++, but diagnose it as an error in C with a fix-it hint to add the comma. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82576 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-28Simplify the scheme used for keywords, and change the classification Eli Friedman
scheme to be more useful. The new scheme introduces a set of categories that should be more readable, and also reflects what we want to consider as an extension more accurately. Specifically, it makes the "what is a keyword" determination accurately reflect whether the keyword is a GNU or Microsoft extension. I also introduced separate flags for keyword aliases; this is useful because the classification of the aliases is mostly unrelated to the classification of the original keyword. This patch treats anything that's in the implementation namespace (prefixed with "__", or "_X" where "X" is any upper-case letter) as a keyword without marking it as an extension. This is consistent with the standards in that an implementation is allowed to define arbitrary extensions in the implementation namespace without violating the standard. This gets rid of all the nasty "extension used" warnings for stuff like __attribute__ in -pedantic mode. We still warn for extensions outside of the the implementation namespace, like typeof. If someone wants to implement -Wextensions or something like that, we could add additional information to the keyword table. This also removes processing for the unused "Boolean" language option; such an extension isn't supported on any other C implementation, so I don't see any point to adding it. The changes to test/CodeGen/inline.c are required because previously, we weren't actually disabling the "inline" keyword in -std=c89 mode. I'll remove Boolean and NoExtensions from LangOptions in a follow-up commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70281 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-25Change SemaType's "GetTypeForDeclarator" and "ConvertDeclSpecToType" to Chris Lattner
always return a non-null QualType + error bit. This fixes a bunch of cases that didn't check for null result (and could thus crash) and eliminates some crappy code scattered throughout sema. This also improves the diagnostics in the recursive struct case to eliminate a bogus second error. It also cleans up the case added to function.c by forming a proper function type even though the declarator is erroneous, allowing the parameter to be added to the function. Before: t.c:2:1: error: unknown type name 'unknown_type' unknown_type f(void*P) ^ t.c:4:3: error: use of undeclared identifier 'P' P+1; ^ After: t.c:2:1: error: unknown type name 'unknown_type' unknown_type f(void*P) ^ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70023 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-25fix PR4049, a crash on invalid, by making sema install the right number of Chris Lattner
parameters in a functiondecl, even if the decl is invalid and has a confusing Declarator. On the testcase, we now emit one beautiful diagnostic: t.c:2:1: error: unknown type name 'unknown_type' unknown_type f(void*) ^ GCC 4.0 produces: t.c:2: error: syntax error before ‘f’ t.c: In function ‘f’: t.c:2: error: parameter name omitted and GCC 4.2: t.c:2: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘f’ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70016 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-25in:Chris Lattner
typedef void foo(void); We get a typedef for a functiontypeproto with no arguments, not one with one argument and type void. This means the code being removed in SemaDecl is dead. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70013 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-22Fix some mishandling of the attr(gnu_inline) mode when used withChris Lattner
extern. Previously we would warn about it and ignore the attribute. This is incorrect, it should be handled as a c89 "extern inline" function. Many thanks to Matthieu Castet for pointing this out and beating me over the head until I got it. PR3988: extern inline function are not externally visible git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69756 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-20the __gnuc_inline__ attribute is actually named __gnu_inline__,Chris Lattner
PR4023 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69618 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-17fix a crash on invalid by making ActOnDeclarator create decl withChris Lattner
a dummy *function* type when it is recovering and knows it needs a function. rdar://6802350 - clang crash on invalid input git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69374 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-14implement some sema for gnuc_inline attribute. Reject always_inline and ↵Chris Lattner
no_inline on objc methods. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69051 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-02When calling a function without a prototype for which we have aDouglas Gregor
definition, warn if there are too many/too few function call arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68318 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-24Make sure to use RequireCompleteType rather than testing forDouglas Gregor
incomplete types. RequireCompleteType is needed when the type may be completed by instantiating a template. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67643 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-24Rename clang to clang-cc.Daniel Dunbar
Tests and drivers updated, still need to shuffle dirs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67602 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-04Check that the return type for function definitions is complete.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66027 91177308-0d34-0410-b5e6-96231b3b80d8
2009-02-24Improve merging of function declarations. Specifically:Douglas Gregor
- When we are declaring a function in local scope, we can merge with a visible declaration from an outer scope if that declaration refers to an entity with linkage. This behavior now works in C++ and properly ignores entities without linkage. - Diagnose the use of "static" on a function declaration in local scope. - Diagnose the declaration of a static function after a non-static declaration of the same function. - Propagate the storage specifier to a function declaration from a prior declaration (PR3425) - Don't name-mangle "main" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65360 91177308-0d34-0410-b5e6-96231b3b80d8
2009-02-04Note the Radar number that corresponds to PR3137Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63754 91177308-0d34-0410-b5e6-96231b3b80d8
2009-02-04Test for PR3137.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63749 91177308-0d34-0410-b5e6-96231b3b80d8
2009-01-23Handle any undeclared parameters in a K&R-style function with aDouglas Gregor
special action, inside function prototype scope. This avoids confusion when we try to inject these parameters into the scope of the function body before the function itself has been added to the surrounding scope. Fixes <rdar://problem/6097326>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62849 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-18Merge function-return.c into function.cChris Lattner
Fix PR2790 by making a warning an EXTWARN instead of EXTENSION. Add a new EXTENSION warning for "return (some void expression);" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61187 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-17diagnose C99 6.9.1p5, C arguments in definitions that are lackingChris Lattner
a name. This implements PR3208. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61127 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-23Make all the 'redefinition' diagnostics more consistent, and make the Chris Lattner
"previously defined here" diagnostics all notes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59920 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-05Fix handling of implicit int, resolving PR2012 and reverting (andChris Lattner
subsuming) my patch for PR1999. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49251 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17Fix PR2042. One remaining issue: we don't currently diagnoseChris Lattner
int foobar(int); int foobar() {} which requires ifdef'ing out a testcase in predefined-function.c. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47236 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-15Get rid of outdated code that masks type errors. Fixes PR2036.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47154 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-10Fix PR1999, by emitting a hard error only if an argument declarator is ↵Chris Lattner
completely missing. Otherwise, it is an implicit int case, which is valid in c90 and invalid elsewhere, but accepted as an extension. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46938 91177308-0d34-0410-b5e6-96231b3b80d8
2008-01-31Fix a bogus testChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46602 91177308-0d34-0410-b5e6-96231b3b80d8
2008-01-29Tighten up ASTContext::typesAreCompatible()...it needs to make sure the ↵Steve Naroff
qualifiers match. The comment and C99 citation for this routine were correct...the code needed to conform to the comment/spec. This fixes the test added below. Tightening up this routine forced tweaks to Sema::CheckSubtractionOperands() and Sema::CheckCompareOperands(). For example, they both need to operate on the unqualified pointee... git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46522 91177308-0d34-0410-b5e6-96231b3b80d8
2008-01-29Fix bz1950. ASTContext::functionTypesAreCompatible() needs to operate on the ↵Steve Naroff
unqualified parameter types (per C99 6.7.5.3p15). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46472 91177308-0d34-0410-b5e6-96231b3b80d8
2008-01-14Fix ASTContext::typesAreCompatible when analyzing a function type with Chris Lattner
proto and function type without proto. It would never call 'functionTypesAreCompatible' because they have different type classes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45952 91177308-0d34-0410-b5e6-96231b3b80d8
2008-01-02When promoting array to pointer for argument, don't lose type qualifiers.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45510 91177308-0d34-0410-b5e6-96231b3b80d8