Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[clang][RISCV][test] Add coverage for __fp16 support in arguments/ret…
…urns By choice, we don't set HalfArgsAndReturns=true (which would allow __fp16 in args and returns). Add test coverage for this to ensure it isn't changed by accident.
- Loading branch information
Showing
1 changed file
with
38 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
// RUN: %clang_cc1 -fsyntax-only -triple riscv32 -Wno-strict-prototypes -verify %s | ||
// RUN: %clang_cc1 -fsyntax-only -triple riscv64 -Wno-strict-prototypes -verify %s | ||
// REQUIRES: riscv-registered-target | ||
|
||
// Functions cannot have parameters of type __fp16. | ||
extern void f (__fp16); // expected-error {{parameters cannot have __fp16 type; did you forget * ?}} | ||
extern void g (__fp16 *); | ||
|
||
extern void (*pf) (__fp16); // expected-error {{parameters cannot have __fp16 type; did you forget * ?}} | ||
extern void (*pg) (__fp16*); | ||
|
||
typedef void(*tf) (__fp16); // expected-error {{parameters cannot have __fp16 type; did you forget * ?}} | ||
typedef void(*tg) (__fp16*); | ||
|
||
void kf(a) | ||
__fp16 a; { // expected-error {{parameters cannot have __fp16 type; did you forget * ?}} | ||
} | ||
|
||
void kg(a) | ||
__fp16 *a; { | ||
} | ||
|
||
// Functions cannot return type __fp16. | ||
extern __fp16 f1 (void); // expected-error {{function return value cannot have __fp16 type; did you forget * ?}} | ||
extern __fp16 *g1 (void); | ||
|
||
extern __fp16 (*pf1) (void); // expected-error {{function return value cannot have __fp16 type; did you forget * ?}} | ||
extern __fp16 *(*gf1) (void); | ||
|
||
typedef __fp16 (*tf1) (void); // expected-error {{function return value cannot have __fp16 type; did you forget * ?}} | ||
typedef __fp16 *(*tg1) (void); | ||
|
||
void testComplex() { | ||
// FIXME: Should these be valid? | ||
_Complex __fp16 a; // expected-error {{'_Complex half' is invalid}} | ||
__fp16 b; | ||
a = __builtin_complex(b, b); // expected-error {{'_Complex half' is invalid}} | ||
} |