brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · 38a974e Raw
36 lines · c
1/* RUN: %clang_cc1 -verify -pedantic -std=c99 %s2   RUN: %clang_cc1 -verify=c89 -pedantic -std=c89 %s3   expected-no-diagnostics4 */5 6/* WG14 N835: Yes7 * Conversion of array to pointer not limited to lvalues8 *9 * NB: The crux of the change was C99 changing:10 *11 * C89 3.2.2.1: Except when it is the operand of ..., an lvalue that has type12 * 'array of type' is converted to an expression that has type 'pointer to13 * type' that points to the initial element of the array object and is not an14 * lvalue.15 *16 * C99 6.3.2.1p3: Except when it is the operand of ..., an expression that has17 * type 'array of type' is converted to an expression with type 'pointer to18 * type' that points to the initial element of the array object and is not an19 * lvalue.20 */21 22struct S {23  char arr[100];24};25 26struct S f(void);27 28void func(void) {29  char c;30  /* The return from f() is an rvalue, so this code is not valid in C89, but is31   * valid in C99.32   */33  c = f().arr[10]; /* c89-warning {{ISO C90 does not allow subscripting non-lvalue array}} */34}35 36