Add abort() as a builtin. This has two effects: one, we warn for incorrect

declarations of abort(), and two, we mark it noreturn.  Missing the latter
shows up in one of the "embarassing" tests (from the thread on llvmdev
"detailed comparison of generated code size for LLVM and other compilers").

llvm-svn: 91515
This commit is contained in:
Eli Friedman 2009-12-16 06:28:21 +00:00
parent ce5b95c05a
commit 53b3cde60f
5 changed files with 6 additions and 0 deletions

View File

@ -475,6 +475,7 @@ BUILTIN(__sync_fetch_and_umax, "UiUi*Ui", "n")
// C99 library functions
// C99 stdlib.h
LIBBUILTIN(abort, "v", "fr", "stdlib.h")
LIBBUILTIN(calloc, "v*zz", "f", "stdlib.h")
LIBBUILTIN(exit, "vi", "fr", "stdlib.h")
LIBBUILTIN(_Exit, "vi", "fr", "stdlib.h")

View File

@ -48,6 +48,7 @@ int setuid(uid_t);
int setregid(gid_t, gid_t);
int setreuid(uid_t, uid_t);
extern void check(int);
void abort(void);
void test_setuid()
{

View File

@ -1,5 +1,7 @@
// RUN: %clang_cc1 %s -verify -fsyntax-only
void abort(void);
@interface Subclass
+ (int)magicNumber;
+ (void)setMagicNumber:(int)value;

View File

@ -44,6 +44,7 @@
- (void) setOptional_getter_attr:(int)value { ivar = value; }
@end
void abort(void);
int main ()
{
Test *x = [[Test alloc] init];

View File

@ -80,6 +80,7 @@ static int g_val;
}
@end
void abort(void);
int main (void) {
Subclass *x = [[Subclass alloc] init];