<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/86627>86627</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [InjectTLIMappings] Assert while compiling CheckFunctionExists.cpp with llvm clang when -fveclib=SVML flag is enabled
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Balakrishna7829
      </td>
    </tr>
</table>

<pre>
    CheckFunctionExists.cpp is used by cmake to find whether the libarary function is supported or not. When CheckFunctionExists.cpp is compiled with llvm clang and with -fveclib=SVML flag. Assertion is occurring in InjectTLIMappings pass.

Preprocessed CheckFunctionExists.cpp:
// code start
char log2(void);
int main(int ac, char* av)
{
log2();
if (ac > 1000) {
return *av[0];
}
return 0;
}
// code end

The issue here is that InjectTLIMappings.cpp is trying to insert vectorized versions of the library function log2 into LLVM IR but the no vector library has vector version of char log2(void). Is it valid to redeclare a library function like this.

Clang command to reproduce the issue:-
clang -fveclib=SVML -DCHECK_FUNCTION_EXISTS=log2 -c CheckFunctionExists.cpp

CheckFunctionExists.cpp Contents:-
//Code Start
#ifdef CHECK_FUNCTION_EXISTS

#  ifdef __cplusplus
extern "C"
#  endif
  char
  CHECK_FUNCTION_EXISTS(void);
#  ifdef __CLASSIC_C__
int main()
{
  int ac;
  char* av[];
# else
int main(int ac, char* av[])
{
#  endif
 CHECK_FUNCTION_EXISTS();
  if (ac > 1000) {
    return *av[0];
 }
  return 0;
}

#else /* CHECK_FUNCTION_EXISTS */

# error "CHECK_FUNCTION_EXISTS has to specify the function"

#endif /* CHECK_FUNCTION_EXISTS */
//Code End
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVV1z6jYQ_TXiZQfGyBjMgx-ICVOmyW2npLd9Y2RpjdUIySPJ5Ka_viPbEAiQ6X0AjLUfZ3fP0TLn5E4jZiR5IMlywBpfGZs9MMVerXSVZrOUzgeFEe9ZXiF_XTWae2n04w_pvBvxugbpoHEooHgHvmevCN5AKbWAtwp9hRZ8haBkwSyz71D2AYKba-raWI8CjAVt_Aj-qlDDF4m42ddSoYA36StQ6rAHrpjeAdP9u2F5QK5kQeLl5vvzE5SK7UawcA7tMa3hvLFW6h1IDWv9D3L_8rR-ZnUt9c5BzZwbkWhJokX3_bvF2hqOLlR5BxyJe2NCV4SugBuB4DyzvnvNK2ZBmR0lND0YKQidk_ihO5Paw55JTWgaHhknNIfgQOgC2CGYdqFnvUMf5yJGCYSmjAOJH2EcRRGhczg5WPSN1UDogh1I8hCRZHnyJLPlhVF0fXJeE2px3puXCkE61yBUaMMj-Ir5664eB-jte2i8NyB1GAkckHtj5b8o4IDWSaMdmPLImUvKhLpBam_g6en7M6z_gKLxrak2faCTU8Xc8VUfN4S9MYYRrB1IDwempAjALArkilkEdgOCDASv5CVD8paD3Oz3gYdtjNoa0XBs0bUNIvFi2HOhtf5M1OEy_-Ux_3W7-vNb_rL-7dv28e_15mVD4mVb9pDfpd45kDvSyY32qL37ANHNNA8j3XzQlNBYlgJLuI3lLBOhMUBnu93yWjUufLoz_OGxpRvNCaVn9qiFLLv_0DG8f76d7loqF1nzp8Vms863-XZ7JaRr0QD04oofLhB0Gmuvv4s0qBz-P312vlcJryq-V-R5gaG6r5QMAPCVmuEk2pPdLUEfAYYioaXCHXghSzj_NHm01th2wDedgvi8AVcjl-V7q4Gjgj4IccIQWvQTID6I-6jFQGSxmMdzNsBsPBuPJ_E4jseDKktmnBZFOU3HE86mBZ1Hk2I2SVI2xpin6WwgMxrRSRTTaZTESTwe8fk4LZlIpqVIyylLyCTCPZNqFNbMyNjdoNVxlk6ndDZQrEDl2r1JaavoUFmyHNgs2A-LZufIJFKtBE8RvPSqXbZXFyRJlv2WgrdKKuxXXbgs74n68w58C8vz1v4LFy9qVigUg8aqrPK-DldB18qd9FVTjLjZE7oK4fqfYW1NAEnoqi3cEbpqa_8vAAD__1hWgns">