; 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 function declarations. ; Expect double fabs(double). declare float @fabs(float) ; CHECK: declare float @fabs(float) ; Exercise 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 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 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 and 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)