Skip to content

[Clang][OpenMP] Implicit conversion with pragma omp taskloop #100536

@rodarima

Description

@rodarima

This small program fails to build with -Werror -Wconversion:

int main(void) { #pragma omp parallel #pragma omp single	{ #pragma omp taskloop for (int i = 0; i < 10000; i++) { #pragma omp task	{}	} #pragma omp taskloop for (long i = 0L; i < 10000L; i++) { #pragma omp task	{}	} #pragma omp taskloop for (unsigned long i = 0UL; i < 10000UL; i++) { #pragma omp task	{}	}	} return 0; }
+/usr/bin/zsh:12> clang -v clang version 18.1.8 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/14.1.1 Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1 Selected GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64 +/usr/bin/zsh:12> clang -fopenmp -Werror -Wconversion /tmp/tl.c -o /tmp/tl /tmp/tl.c:7:8: error: implicit conversion changes signedness: 'long' to 'unsigned long' [-Werror,-Wsign-conversion] 7 | for (int i = 0; i < 10000; i++) { | ~~~ ^~~ /tmp/tl.c:7:8: error: implicit conversion changes signedness: 'long' to 'unsigned long' [-Werror,-Wsign-conversion] 7 | for (int i = 0; i < 10000; i++) { | ~~~ ^~~ /tmp/tl.c:13:8: error: implicit conversion changes signedness: 'unsigned long' to 'long' [-Werror,-Wsign-conversion] 13 | for (long i = 0L; i < 10000L; i++) { | ^~~~ /tmp/tl.c:13:8: error: implicit conversion changes signedness: 'long' to 'unsigned long' [-Werror,-Wsign-conversion] 13 | for (long i = 0L; i < 10000L; i++) { | ~~~ ^~~~ /tmp/tl.c:13:8: error: implicit conversion changes signedness: 'long' to 'unsigned long' [-Werror,-Wsign-conversion] 13 | for (long i = 0L; i < 10000L; i++) { | ~~~ ^~~~ /tmp/tl.c:19:8: error: implicit conversion changes signedness: 'long' to 'unsigned long' [-Werror,-Wsign-conversion] 19 | for (unsigned long i = 0UL; i < 10000UL; i++) { | ~~~ ^~~~~~~~ /tmp/tl.c:19:8: error: implicit conversion changes signedness: 'long' to 'unsigned long' [-Werror,-Wsign-conversion] 19 | for (unsigned long i = 0UL; i < 10000UL; i++) { | ~~~ ^~~~~~~~ /tmp/tl.c:7:8: error: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Werror,-Wshorten-64-to-32] 7 | for (int i = 0; i < 10000; i++) { | ^~~ 8 errors generated. 

It seems to be failing with any clang version back to 4.0.0

Godbolt: https://godbolt.org/z/drc7s4xjM

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"clang:openmpOpenMP related changes to Clang

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions