// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir // RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t-cir.ll // RUN: FileCheck --check-prefix=LLVM --input-file=%t-cir.ll %s // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll // RUN: FileCheck --check-prefix=OGCG --input-file=%t.ll %s void user_func(int *__restrict p); void test_user(int *__restrict p) { user_func(p); } // CIR: cir.func private @user_func(!cir.ptr {llvm.noalias, llvm.noundef}) // CIR: cir.func {{.*}} @test_user(%arg0: !cir.ptr {llvm.noalias, llvm.noundef} // CIR: cir.call @user_func(%{{.*}}) : (!cir.ptr {llvm.noundef}) -> () // LLVM: define dso_local void @test_user(ptr noalias noundef %{{.*}}) // LLVM: call void @user_func(ptr noundef %{{.*}}) // OGCG: define dso_local void @test_user(ptr noalias noundef %{{.*}}) // OGCG: call void @user_func(ptr noundef %{{.*}}) int printf(const char *__restrict fmt, ...); void test_builtin(const char *__restrict fmt) { printf(fmt); } // Builtins must NOT get noalias from restrict (matching OGCG behavior). // CIR: cir.func {{.*}} @test_builtin(%arg0: !cir.ptr {llvm.noalias, llvm.noundef} // CIR: cir.call @printf(%{{.*}}) : (!cir.ptr {llvm.noundef}) -> !s32i // LLVM: define dso_local void @test_builtin(ptr noalias noundef %{{.*}}) // LLVM: call i32 (ptr, ...) @printf(ptr noundef %{{.*}}) // OGCG: define dso_local void @test_builtin(ptr noalias noundef %{{.*}}) // OGCG: call i32 (ptr, ...) @printf(ptr noundef %{{.*}})