brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 155a2fd Raw
113 lines · c
1// RUN: %clang_cc1 -std=c11 -fsyntax-only -verify -Wunused-value -Wunused-label %s2// RUN: %clang_cc1 -std=c11 -fsyntax-only -verify -Wunused %s3// RUN: %clang_cc1 -std=c11 -fsyntax-only -verify -Wall %s4 5int i = 0;6int j = 0;7 8void foo(void);9 10// PR480611void pr4806(void) {12  1,foo();          // expected-warning {{left operand of comma operator has no effect}}13 14  // other15  foo();16  i;                // expected-warning {{expression result unused}}17 18  i,foo();          // expected-warning {{left operand of comma operator has no effect}}19  foo(),i;          // expected-warning {{expression result unused}}20 21  i,j,foo();        // expected-warning 2{{left operand of comma operator has no effect}}22  i,foo(),j;        // expected-warning {{left operand of comma operator has no effect}} expected-warning {{expression result unused}}23  foo(),i,j;        // expected-warning {{expression result unused}} expected-warning {{left operand of comma operator has no effect}}24 25  i++;26 27  i++,foo();28  foo(),i++;29 30  i++,j,foo();      // expected-warning {{left operand of comma operator has no effect}}31  i++,foo(),j;      // expected-warning {{expression result unused}}32  foo(),i++,j;      // expected-warning {{expression result unused}}33 34  i,j++,foo();      // expected-warning {{left operand of comma operator has no effect}}35  i,foo(),j++;      // expected-warning {{left operand of comma operator has no effect}}36  foo(),i,j++;      // expected-warning {{left operand of comma operator has no effect}}37 38  i++,j++,foo();39  i++,foo(),j++;40  foo(),i++,j++;41 42  {};43  ({});44  ({}),foo();45  foo(),({});46 47  (int)1U;          // expected-warning {{expression result unused}}48  (void)1U;49 50  // pointer to volatile has side effect (thus no warning)51  int* pi = &i;52  volatile int* pj = &j;53  *pi;              // expected-warning {{expression result unused}}54  *pj;55 56  foo_label:        // expected-warning {{unused label}}57  i;                // expected-warning {{expression result unused}}58}59 60// Don't warn about unused '||', '&&' expressions that contain assignments.61int test_logical_foo1(void);62int test_logical_foo2(void);63int test_logical_foo3(void);64int test_logical_bar(void) {65  int x = 0;66  (x = test_logical_foo1()) ||  // no-warning67  (x = test_logical_foo2()) ||  // no-warning68  (x = test_logical_foo3());    // no-warning69 70  x || test_logical_foo1();     // no-warning71 72  return x;73}74 75// PR828276void conditional_for_control_flow(int cond, int x, int y)77{78    cond? y++ : x; // no-warning79    cond? y : ++x; // no-warning80    cond? (x |= y) : ++x; // no-warning81    cond? y : x; // expected-warning {{expression result unused}}82}83 84struct s0 { int f0; };85 86void f0(int a);87void f1(struct s0 *a) {88  f0((int)(a->f0 + 1, 10)); // expected-warning {{left operand of comma operator has no effect}}89}90 91void blah(int a);92#define GenTest(x) _Generic(x, default : blah)(x)93 94void unevaluated_operands(void) {95  int val = 0;96 97  (void)sizeof(++val); // expected-warning {{expression with side effects has no effect in an unevaluated context}}98  (void)_Generic(val++, default : 0); // expected-warning {{expression with side effects has no effect in an unevaluated context}}99  (void)_Alignof(val++);  // expected-warning {{expression with side effects has no effect in an unevaluated context}} expected-warning {{'_Alignof' applied to an expression is a GNU extension}}100 101  // VLAs can have side effects so long as it's part of the type and not an102  // expression, except for sizeof() where it can also have a side effect if103  // the operand is of VLA type.104  (void)sizeof(int[++val]); // Ok105  (void)_Alignof(int[++val]); // Ok106 107  int GH48010[val];108  (void)sizeof(*(val = 1, &GH48010)); // Ok109 110  // Side effects as part of macro expansion are ok.111  GenTest(val++);112}113