brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · d062212 Raw
120 lines · c
1// RUN: %clang_cc1 -triple aarch64-linux-gnu  -fsyntax-only -verify %s2 3int __attribute__((target_version("crc"))) dup(void) { return 3; }4int __attribute__((target_version("default"))) dup(void) { return 1; }5//expected-error@+2 {{redefinition of 'dup'}}6//expected-note@-2 {{previous definition is here}}7int __attribute__((target_version("default"))) dup(void) { return 2; }8 9int __attribute__((target_version("default"))) dup1(void) { return 1; }10//expected-error@+2 {{redefinition of 'dup1'}}11//expected-note@-2 {{previous definition is here}}12int dup1(void) { return 2; }13 14int __attribute__((target_version("aes"))) foo(void) { return 1; }15//expected-note@+1 {{previous definition is here}}16int __attribute__((target_version("default"))) foo(void) { return 2; }17 18//expected-note@+1 {{previous definition is here}}19int __attribute__((target_version("sha3 + aes "))) foo(void) { return 1; }20//expected-note@-1 {{previous definition is here}}21 22//expected-error@+1 {{redefinition of 'foo'}}23int __attribute__((target("dotprod"))) foo(void) { return -1; }24//expected-warning@-1 {{attribute declaration must precede definition}}25 26//expected-error@+1 {{redefinition of 'foo'}}27int foo(void) { return 2; }28 29//expected-note@+1 {{previous definition is here}}30__attribute__ ((target("bf16,sve,sve2,dotprod"))) int func(void) { return 1; }31//expected-error@+1 {{redefinition of 'func'}}32__attribute__ ((target("default"))) int func(void) { return 0; }33 34//expected-note@+1 {{previous declaration is here}}35void __attribute__((target_version("bti+flagm2"))) one(void) {}36//expected-error@+1 {{multiversioned function redeclarations require identical target attributes}}37void __attribute__((target_version("flagm2+bti"))) one(void) {}38 39void __attribute__((target_version("ssbs+sha2"))) two(void) {}40void __attribute__((target_version("ssbs+fp16fml"))) two(void) {}41 42//expected-error@+1 {{'main' cannot be a multiversioned function}}43int __attribute__((target_version("lse"))) main(void) { return 1; }44 45// It is ok for the default version to appear first.46int default_first(void) { return 1; }47int __attribute__((target_version("dit"))) default_first(void) { return 2; }48int __attribute__((target_version("mops"))) default_first(void) { return 3; }49 50// It is ok if the default version is between other versions.51int __attribute__((target_version("simd"))) default_middle(void) {return 0; }52int __attribute__((target_version("default"))) default_middle(void) { return 1; }53int __attribute__((target_version("aes"))) default_middle(void) { return 2; }54 55// It is ok for the default version to be the last one.56int __attribute__((target_version("rdm"))) default_last(void) {return 0; }57int __attribute__((target_version("lse+aes"))) default_last(void) { return 1; }58int __attribute__((target_version("default"))) default_last(void) { return 2; }59 60// It is also ok to forward declare the default.61int __attribute__((target_version("default"))) default_fwd_declare(void);62int __attribute__((target_version("sve"))) default_fwd_declare(void) { return 0; }63int default_fwd_declare(void) { return 1; }64 65//expected-warning@+1 {{unsupported '' in the 'target_version' attribute string; 'target_version' attribute ignored}}66int __attribute__((target_version(""))) unsup1(void) { return 1; }67//expected-warning@+1 {{unsupported 'crc32' in the 'target_version' attribute string; 'target_version' attribute ignored}}68void __attribute__((target_version("crc32"))) unsup2(void) {}69 70void __attribute__((target_version("default+fp16"))) koo(void) {}71//expected-error@-1 {{function multiversioning doesn't support feature 'default'}}72void __attribute__((target_version("default+default+default"))) loo(void) {}73//expected-error@-1 {{function multiversioning doesn't support feature 'default'}}74void __attribute__((target_version("rdm+rng+crc"))) redef(void) {}75//expected-error@+2 {{redefinition of 'redef'}}76//expected-note@-2 {{previous definition is here}}77void __attribute__((target_version("rdm+rng+crc"))) redef(void) {}78 79int def(void);80void __attribute__((target_version("dit"))) nodef(void);81void __attribute__((target_version("wfxt"))) nodef(void);82void __attribute__((target_version("aes"))) ovl(void);83void __attribute__((target_version("default"))) ovl(void);84int bar() {85  // expected-error@+2 {{reference to overloaded function could not be resolved; did you mean to call it?}}86  // expected-note@-3 {{possible target for call}}87  ovl++;88  nodef();89  return def();90}91// expected-error@+2 {{function declaration cannot become a multiversioned function after first usage}}92// expected-note@-13 {{previous declaration is here}}93int __attribute__((target_version("sha2"))) def(void) { return 1; }94 95int __attribute__((target_version("sve"))) prot();96// expected-error@-1 {{multiversioned function must have a prototype}}97 98int __attribute__((target_version("aes"))) rtype(int);99// expected-error@+1 {{multiversioned function declaration has a different return type}}100float __attribute__((target_version("rdm"))) rtype(int);101 102int __attribute__((target_version("sha2"))) combine(void) { return 1; }103// expected-error@+1 {{multiversioned function declaration has a different calling convention}}104int __attribute__((aarch64_vector_pcs, target_version("sha3"))) combine(void) { return 2; }105 106// expected-error@+1 {{multiversioned function must have a prototype}}107int __attribute__((target_version("fp+aes+rcpc"))) unspec_args() { return -1; }108// expected-error@-1 {{multiversioned function must have a prototype}}109// expected-note@+1 {{function multiversioning caused by this declaration}}110int __attribute__((target_version("default"))) unspec_args() { return 0; }111int cargs() { return unspec_args(); }112 113// expected-error@+1 {{multiversioned function must have a prototype}}114int unspec_args_implicit_default_first();115// expected-error@-1 {{multiversioned function must have a prototype}}116// expected-note@+1 {{function multiversioning caused by this declaration}}117int __attribute__((target_version("aes"))) unspec_args_implicit_default_first() { return -1; }118// expected-note@+1 {{function multiversioning caused by this declaration}}119int __attribute__((target_version("default"))) unspec_args_implicit_default_first() { return 0; }120