xref: /llvm-project/clang/test/Driver/attr-availability-fuchsia.c (revision 5c29ffda9056e1b4602a46051371f0184ce357b2)
1998e067aSHaowei Wu // Test that `-ffuchsia-api-level` is propagated to cc1.
2998e067aSHaowei Wu 
3998e067aSHaowei Wu // REQUIRES: x86-registered-target
4998e067aSHaowei Wu // RUN: %clang -target x86_64-unknown-fuchsia -ffuchsia-api-level=16 -c %s -### 2>&1| FileCheck %s
5998e067aSHaowei Wu 
6998e067aSHaowei Wu // It should also be exposed to non-fuchsia platforms. This is desireable when
7998e067aSHaowei Wu // using common Fuchsia headers for building host libraries that also depend on
8998e067aSHaowei Wu // the Fuchsia version (such as using a compatible host-side FIDL library that
9998e067aSHaowei Wu // talks with a Fuchsia FIDL library of the same version).
10998e067aSHaowei Wu // RUN: %clang -target x86_64-unknown-linux-gnu -ffuchsia-api-level=16 -c %s -### 2>&1 | FileCheck %s
11998e067aSHaowei Wu 
12998e067aSHaowei Wu // Check Fuchsia API level macro.
13998e067aSHaowei Wu // RUN: %clang -target x86_64-unknown-fuchsia -ffuchsia-api-level=15 -c %s -o %t
14998e067aSHaowei Wu // RUN: llvm-readobj --symbols %t | FileCheck %s --check-prefix=CHECK-F15
15*5c29ffdaSFangrui Song //
16998e067aSHaowei Wu // RUN: %clang -target x86_64-unknown-fuchsia -ffuchsia-api-level=16 -c %s -o %t
17998e067aSHaowei Wu // RUN: llvm-readobj --symbols %t | FileCheck %s --check-prefix=CHECK-F16
18998e067aSHaowei Wu 
19998e067aSHaowei Wu // Check using a non-integer Fuchsia API level.
20998e067aSHaowei Wu // RUN: not %clang -target x86_64-unknown-fuchsia -ffuchsia-api-level=16.0.0 -c %s  2>&1| FileCheck %s  --check-prefix=CHECK-ERROR
21998e067aSHaowei Wu 
22998e067aSHaowei Wu 
23998e067aSHaowei Wu // CHECK: "-ffuchsia-api-level=16"
24998e067aSHaowei Wu 
25998e067aSHaowei Wu // CHECK-F15:   Name: f15
26998e067aSHaowei Wu 
27998e067aSHaowei Wu // CHECK-F16:   Name: f16
28998e067aSHaowei Wu 
29998e067aSHaowei Wu // CHECK-ERROR: error: invalid integral value '16.0.0' in '-ffuchsia-api-level=16.0.0'
30998e067aSHaowei Wu 
31998e067aSHaowei Wu #if __Fuchsia_API_level__ >= 16
f16(void)327de71613SAaron Ballman void f16(void) {
33998e067aSHaowei Wu 
34998e067aSHaowei Wu }
35998e067aSHaowei Wu #else
f15(void)367de71613SAaron Ballman void f15(void) {
37998e067aSHaowei Wu 
38998e067aSHaowei Wu }
39998e067aSHaowei Wu #endif
40998e067aSHaowei Wu 
main(int argc,char * argv[])41998e067aSHaowei Wu int main(int argc, char* argv[]) {
42998e067aSHaowei Wu #if __Fuchsia_API_level__ >= 16
43998e067aSHaowei Wu     f16();
44998e067aSHaowei Wu #else
45998e067aSHaowei Wu     f15();
46998e067aSHaowei Wu #endif
47998e067aSHaowei Wu }
48