$cat gcc-wrap.c #include <stdint.h> #include <stdio.h> int main() { uint32_t a = 1 << 17; uint16_t b = a; printf("a: %u, b: %u\n", (unsigned)a, (unsigned)b); return 0; } $gcc -Wall -Wextra -Wconversion -pedantic gcc-wrap.c no warrnings $gcc --version gcc (GCC) 4.1.1 for example: $icc --version iccbin (ICC) 9.1 20060706 $icc -Wall gcc-wrap.c gcc-wrap.c(7): remark #810: conversion from "uint32_t={unsigned int}" to "uint16_t={unsigned short}" may lose significant bits uint16_t b = a; ^
-- Summary: uint32_t -> uint16_t without warrnings Product: gcc Version: unknown Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dushistov at mail dot ru http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30695