Quantcast
Channel: Intel® C++ Compiler
Viewing all articles
Browse latest Browse all 1616

Optimization problem with int to long int cast

$
0
0

An integer overflow may be ignored if an int value is assigned to a long int variable. The problem does not occur if optimization is turned off (compiler version 13.1) or reduced to -O1 (compiler version 11.1). Operating system Linux SLED11SP3. gcc produces the expected result with all optimization levels.

Smallest code example to reproduce:

#include <stdio.h>

 

int main( int argc, char** argv)

{

  int i,i0;

  unsigned int ui;

  long int l;

  unsigned long int ul;

  i0=1200000000;

  i=2*i0;

  ui=2*i0;

  l=i;

  ul=i;

  printf(" int=%d\n unsigned int=%u\n", i,ui);

  printf("source int\n long int=%ld\n unsigned long int=%lu\n", l,ul);

  l=ui;

  ul=ui;

  printf("source unsigned int\n long int=%ld\n unsigned long int=%lu\n", l,ul);

}

 

progs> icc --version

icc (ICC) 13.1.2 20130514

Copyright (C) 1985-2013 Intel Corporation.  All rights reserved.

 

progs> icc iccbug.c;./a.out

 int=-1894967296

 unsigned int=2400000000

source int

 long int=2400000000

 unsigned long int=2400000000

source unsigned int

 long int=2400000000

 unsigned long int=2400000000

 

progs> icc -O0 iccbug.c;./a.out

 int=-1894967296

 unsigned int=2400000000

source int

 long int=-1894967296

 unsigned long int=18446744071814584320

source unsigned int

 long int=2400000000

 unsigned long int=2400000000


Viewing all articles
Browse latest Browse all 1616

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>