Skip to content

Clang produces incorrect code at -O0 #33729

@Vsevolod-Livinskij

Description

@Vsevolod-Livinskij
Bugzilla Link 34381
Resolution FIXED
Resolved on Sep 04, 2017 05:46
Version trunk
OS Linux
Blocks #33196
CC @dbabokin,@topperc,@dwblaikie,@zmodem,@RKSimon,@rotateright,@Vsevolod-Livinskij

Extended Description

Clang produces wrong-code with -O0.

$ cat driver.cpp
#include <stdio.h>
extern const signed char var_11;
extern const unsigned int var_21;
extern const signed char var_29;
extern signed char var_370;
extern unsigned int var_390;

const signed char var_11 = 97;
const unsigned int var_21 = 3536697529U;
const signed char var_29 = 20;
signed char var_370 = 16;
unsigned int var_390 = 1082014357U;

extern void foo ();

int main () {
foo ();
printf("%llu\n", var_390);
return 0;
}

$ cat func.cpp
extern const signed char var_11;
extern const unsigned int var_21;
extern const signed char var_29;
extern signed char var_370;
extern unsigned int var_390;

void foo() {
var_390 = !char((var_21 < -var_29) + ~0);
var_370 = short(var_11);
}

$ clang++ -O1 driver.cpp func.cpp ; ./a.out
1
$ clang++ -O0 driver.cpp func.cpp ; ./a.out
0

clang version 6.0.0 (trunk 311997)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions