- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
When compiling CBLAS examples on Intel64 I get a number of related warnings, which indicate a benign error present in the example code:
common_func.c(863): warning #810: conversion from "CBLAS_LAYOUT={enum <unnamed>} *" to "int" may lose significant bits if ( (int)layout == CblasRowMajor ) ^ common_func.c(865): warning #810: conversion from "CBLAS_LAYOUT={enum <unnamed>} *" to "int" may lose significant bits else if ( (int)layout == CblasColMajor ) ^ common_func.c(869): warning #810: conversion from "CBLAS_SIDE={enum <unnamed>} *" to "int" may lose significant bits if ( (int)side == CblasLeft ) ^ common_func.c(871): warning #810: conversion from "CBLAS_SIDE={enum <unnamed>} *" to "int" may lose significant bits else if ( (int)side == CblasRight ) ^ common_func.c(875): warning #810: conversion from "CBLAS_UPLO={enum <unnamed>} *" to "int" may lose significant bits if ( (int)uplo == CblasUpper ) ^ common_func.c(877): warning #810: conversion from "CBLAS_UPLO={enum <unnamed>} *" to "int" may lose significant bits else if ( (int)uplo == CblasLower ) ^ common_func.c(881): warning #810: conversion from "CBLAS_DIAG={enum <unnamed>} *" to "int" may lose significant bits if ( (int)diag == CblasUnit ) ^ common_func.c(883): warning #810: conversion from "CBLAS_DIAG={enum <unnamed>} *" to "int" may lose significant bits else if ( (int)diag == CblasNonUnit ) ^ common_func.c(889): warning #810: conversion from "CBLAS_TRANSPOSE={enum <unnamed>} *" to "int" may lose significant bits if ( (int)trans == CblasNoTrans ) ^ common_func.c(891): warning #810: conversion from "CBLAS_TRANSPOSE={enum <unnamed>} *" to "int" may lose significant bits else if ( (int)trans == CblasTrans ) ^ common_func.c(893): warning #810: conversion from "CBLAS_TRANSPOSE={enum <unnamed>} *" to "int" may lose significant bits else if ( (int)trans == CblasConjTrans )
It seems that the compiler is right to complain - the PrintParameters function errorneously declares some variables as pointers, when in fact they should be plain enums. This works, but the code is in error - variables are declared as pointers, but are used as plain enums for comparison, and those pointers are not dereferenced anywhere.
With that in mind, for next release it should probably be patched as:
--- common_func.c 2014-09-07 21:52:49.615764023 +0200 +++ common_func.c 2014-09-07 22:42:58.929931820 +0200 @@ -833,11 +833,11 @@ void PrintParameters( char *names, ... ) { - CBLAS_LAYOUT *layout; - CBLAS_SIDE *side; - CBLAS_UPLO *uplo; - CBLAS_DIAG *diag; - CBLAS_TRANSPOSE *trans; + CBLAS_LAYOUT layout; + CBLAS_SIDE side; + CBLAS_UPLO uplo; + CBLAS_DIAG diag; + CBLAS_TRANSPOSE trans; char *p, *str, str1[MAX_STRING_LEN], buf[MAX_STRING_LEN]; va_list ap; char seps[]=" ,"; @@ -859,38 +859,38 @@ p++; } if ( strcmp( str1, "layout" ) == 0 ) { - layout = va_arg( ap, CBLAS_LAYOUT* ); - if ( (int)layout == CblasRowMajor ) + layout = va_arg( ap, CBLAS_LAYOUT ); + if ( layout == CblasRowMajor ) printf("LAYOUT = CblasRowMajor "); - else if ( (int)layout == CblasColMajor ) + else if ( layout == CblasColMajor ) printf("LAYOUT = CblasColMajor "); } else if ( strcmp( str1, "side" ) == 0 ) { - side = va_arg( ap, CBLAS_SIDE * ); - if ( (int)side == CblasLeft ) + side = va_arg( ap, CBLAS_SIDE ); + if ( side == CblasLeft ) printf("SIDE = CblasLeft "); - else if ( (int)side == CblasRight ) + else if ( side == CblasRight ) printf("SIDE = CblasRight "); } else if ( strcmp( str1, "uplo" ) == 0 ) { - uplo = va_arg( ap, CBLAS_UPLO * ); - if ( (int)uplo == CblasUpper ) + uplo = va_arg( ap, CBLAS_UPLO ); + if ( uplo == CblasUpper ) printf("UPLO = CblasUpper "); - else if ( (int)uplo == CblasLower ) + else if ( uplo == CblasLower ) printf("UPLO = CblasLower "); } else if ( strcmp( str1, "diag" ) == 0 ) { - diag = va_arg( ap, CBLAS_DIAG * ); - if ( (int)diag == CblasUnit ) + diag = va_arg( ap, CBLAS_DIAG ); + if ( diag == CblasUnit ) printf("DIAG=CblasUnit "); - else if ( (int)diag == CblasNonUnit ) + else if ( diag == CblasNonUnit ) printf("DIAG = CblasNonUnit "); } else if ( ( strcmp( str1, "trans" ) == 0 ) || ( strcmp( str1, "transa" ) == 0 ) || ( strcmp( str1, "transb" ) == 0 ) ) { - trans = va_arg( ap, CBLAS_TRANSPOSE * ); - if ( (int)trans == CblasNoTrans ) + trans = va_arg( ap, CBLAS_TRANSPOSE ); + if ( trans == CblasNoTrans ) printf("%s = CblasNoTrans ", str); - else if ( (int)trans == CblasTrans ) + else if ( trans == CblasTrans ) printf("%s = CblasTrans ", str); - else if ( (int)trans == CblasConjTrans ) + else if ( trans == CblasConjTrans ) printf("%s = CblasConjTrans ", str); } } while ( (str = strtok( NULL, seps )) != NULL );
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Bartosz,
Thank you a lot for the reporting. I will ask our build team to investigate and fix them if possible.
It is true that there are the warnings. And for someone who don't want to see them, please use -w option to suppress.
Thanks
Ying
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page