| ; Verify that incompatible declarations of known library functions are |
| ; not annotated with argument attributes. This negative test complements |
| ; annotate.ll. |
| ; |
| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt < %s -passes=inferattrs -S | FileCheck %s --match-full-lines |
| |
| |
| ; Exercise <math.h> function declarations. |
| |
| ; Expect double fabs(double). |
| declare float @fabs(float) |
| ; CHECK: declare float @fabs(float) |
| |
| |
| ; Exercise <stdio.h> function declarations. |
| |
| ; Expect int fgetc(FILE*). |
| declare i32 @fgetc(ptr, i32) |
| ; CHECK: declare i32 @fgetc(ptr, i32) |
| |
| ; Expect char* fgets(char*, int, FILE*). |
| declare i32 @fgets(ptr, i32, ptr) |
| ; CHECK: declare i32 @fgets(ptr, i32, ptr) |
| |
| ; Expect int sprintf(char*, const char*, ...). |
| declare i32 @sprintf(ptr, i64, ptr, ...) |
| ; CHECK: declare i32 @sprintf(ptr, i64, ptr, ...) |
| |
| ; Expect int snprintf(char*, size_t, const char*, ...). |
| declare i32 @snprintf(ptr, i64, ptr) |
| ; CHECK: declare i32 @snprintf(ptr, i64, ptr) |
| |
| ; Expect int sscanf(const char*, const char*, ...). |
| declare i32 @sscanf(ptr, ...) |
| ; CHECK: declare i32 @sscanf(ptr, ...) |
| |
| |
| ; Exercise <stdlib.h> function declarations. |
| |
| ; Expect int atoi(const char*). |
| declare i8 @atoi(ptr) |
| ; CHECK: declare i8 @atoi(ptr) |
| |
| ; Expect long long atoll(const char*). |
| declare i1 @atoll(ptr) |
| ; CHECK: declare i1 @atoll(ptr) |
| |
| ; Expect double atof(const char*). |
| declare float @atof(ptr) |
| ; CHECK: declare float @atof(ptr) |
| |
| ; Expect double strtod(const char*, char**). |
| declare double @strtod(ptr, ptr, i32) |
| ; CHECK: declare double @strtod(ptr, ptr, i32) |
| |
| ; Expect float strtof(const char*, char**). |
| declare double @strtof(ptr, ptr) |
| ; CHECK: declare double @strtof(ptr, ptr) |
| |
| |
| ; Exercise <string.h> function declarations. |
| |
| ; Expect void* memccpy(void*, const void*, int, size_t). |
| declare ptr @memccpy(ptr, ptr, i64, i64) |
| ; CHECK: declare ptr @memccpy(ptr, ptr, i64, i64) |
| |
| ; Expect int strcasecmp(const char*, const char*). |
| declare i1 @strcasecmp(ptr, ptr) |
| ; CHECK: declare i1 @strcasecmp(ptr, ptr) |
| |
| ; Expect int strcoll(const char*, const char*). |
| declare ptr @strcoll(ptr, ptr) |
| ; CHECK: declare ptr @strcoll(ptr, ptr) |
| |
| ; Expect int strncasecmp(const char*, const char*, size_t). |
| declare i32 @strncasecmp(ptr, ptr, i64, i64) |
| ; CHECK: declare i32 @strncasecmp(ptr, ptr, i64, i64) |
| |
| ; Expect int strxfrm(const char*, const char*). |
| declare i16 @strxfrm(ptr, ptr) |
| ; CHECK: declare i16 @strxfrm(ptr, ptr) |
| |
| ; Expect char* strtok(const char*, const char*). |
| declare ptr @strtok(ptr, i8) |
| ; CHECK: declare ptr @strtok(ptr, i8) |
| |
| ; Expect char* strtok_r(const char*, const char*, char**). |
| declare ptr @strtok_r(ptr, ptr, i64) |
| ; CHECK: declare ptr @strtok_r(ptr, ptr, i64) |
| |
| ; Expect char* strdup(const char*). |
| declare ptr @strdup(ptr, i64) |
| ; CHECK: declare ptr @strdup(ptr, i64) |
| |
| ; Expect char* strndup(const char*, size_t). |
| declare ptr @strndup(ptr, i64, i64) |
| ; CHECK: declare ptr @strndup(ptr, i64, i64) |
| |
| |
| ; Exercise <sys/stat.h> and <sys/statvfs.h> function declarations. |
| |
| ; Expect int stat(const char*, struct stat*). |
| declare i32 @stat(ptr, ptr, i64) |
| ; CHECK: declare i32 @stat(ptr, ptr, i64) |
| |
| ; Expect int statvfs(const char*, struct statvfs*). |
| declare i32 @statvfs(ptr, ptr, i64) |
| ; CHECK: declare i32 @statvfs(ptr, ptr, i64) |