blob: c816d04595af398affff4fd0c567366641637eb6 [file] [edit]
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -O0 -o - %s | FileCheck %s --check-prefix=NOTBAA
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -O1 -o - %s | FileCheck %s --check-prefix=ERRNO-TBAA
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -x c++ -emit-llvm -O1 -o - %s | FileCheck %s --check-prefix=ERRNO-TBAA
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -x c++ -emit-llvm -O1 -new-struct-path-tbaa -o - %s | FileCheck %s --check-prefix=ERRNO-TBAA-NEW
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -O1 -relaxed-aliasing -o - %s | FileCheck %s --check-prefix=NOSTRICT
// Ensure !llvm.errno.tbaa metadata is emitted upon integer accesses, if TBAA is available.
int int_access(int *ptr) { return ptr ? *ptr : 0; }
// NOTBAA-NOT: !llvm.errno.tbaa
// NOSTRICT-NOT: !llvm.errno.tbaa
// ERRNO-TBAA: !llvm.errno.tbaa = !{![[TAG:[0-9]+]]}
// ERRNO-TBAA: ![[TAG]] = !{![[BASE:[0-9]+]], ![[INT:[0-9]+]], i64 0}
// ERRNO-TBAA: ![[BASE]] = !{!"__libc_errno", ![[INT]], i64 0}
// ERRNO-TBAA: ![[INT]] = !{!"int", !{{.*}}, i64 0}
// ERRNO-TBAA-NEW: !llvm.errno.tbaa = !{![[TAG:[0-9]+]]}
// ERRNO-TBAA-NEW: ![[TAG]] = !{![[BASE:[0-9]+]], ![[INT:[0-9]+]], i64 0, i64 4}
// ERRNO-TBAA-NEW: ![[BASE]] = !{!{{.*}}, i64 4, !"__libc_errno", ![[INT]], i64 0, i64 4}
// ERRNO-TBAA-NEW: ![[INT]] = !{!{{.*}}, i64 4, !"int"}