| // RUN: %offload-tblgen -gen-api -I %S/../../../liboffload/API %s | %fcheck-generic --check-prefix=CHECK-API |
| // RUN: %offload-tblgen -gen-exports -I %S/../../../liboffload/API %s | %fcheck-generic --check-prefix=CHECK-EXPORTS |
| // RUN: %offload-tblgen -gen-func-names -I %S/../../../liboffload/API %s | %fcheck-generic --check-prefix=CHECK-FUNC-MACRO |
| |
| // Check basic support for API functions |
| |
| include "APIDefs.td" |
| |
| def OL_NODISCARD : Macro { |
| let desc = "Marks a function whose result should not be discarded"; |
| let condition = "(defined(__cplusplus) && __cplusplus >= 201703L) || " |
| "(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L)"; |
| let value = "[[nodiscard]]"; |
| let alt_value = ""; |
| } |
| |
| def FunctionA : Function { |
| let desc = "Function A description"; |
| let details = [ "Function A detailed information" ]; |
| let params = [ |
| Param<"uint32_t", "ParamA", "Parameter A description">, |
| Param<"uint32_t*", "ParamB", "Parameter B description">, |
| ]; |
| let returns = [ |
| Return<"OL_ERRC_INVALID_VALUE", ["When a value is invalid"]> |
| ]; |
| } |
| |
| // A function whose result should not be discarded. |
| def FunctionB : Function { |
| let desc = "Function B description"; |
| let nodiscard = 1; |
| let params = [ |
| Param<"uint32_t", "ParamA", "Parameter A description">, |
| ]; |
| let returns = []; |
| } |
| |
| // The OL_NODISCARD macro is emitted as a conditional #define. |
| // CHECK-API: #ifndef OL_NODISCARD |
| // CHECK-API: #define OL_NODISCARD {{\[\[}}nodiscard{{\]\]}} |
| |
| // CHECK-API: /// @brief Function A description |
| // CHECK-API: /// @details |
| // CHECK-API-NEXT: Function A detailed information |
| // CHECK-API: /// @returns |
| // CHECK-API: OL_ERRC_INVALID_VALUE |
| // CHECK-API-NEXT: When a value is invalid |
| |
| // FunctionA is not marked nodiscard, so its declaration and its WithCodeLoc |
| // variant must not carry the attribute. |
| // CHECK-API-NOT: OL_NODISCARD |
| // CHECK-API: ol_result_t |
| // CHECK-API-SAME: FunctionA |
| |
| // CHECK-API: // Parameter A description |
| // CHECK-API-NEXT: uint32_t ParamA |
| // CHECK-API: // Parameter B description |
| // CHECK-API-NEXT: uint32_t* ParamB |
| |
| // FunctionB is marked nodiscard: both the primary declaration and the |
| // WithCodeLoc variant are prefixed with OL_NODISCARD. |
| // CHECK-API: OL_NODISCARD OL_APIEXPORT ol_result_t OL_APICALL FunctionB( |
| // CHECK-API: OL_NODISCARD OL_APIEXPORT ol_result_t OL_APICALL FunctionBWithCodeLoc( |
| |
| // CHECK-EXPORTS: FunctionA |
| |
| // CHECK-FUNC-MACRO: OFFLOAD_FUNC(FunctionA) |