Skip to content

Test failure: tests/gcc/link/positive/builtin-ctype-2.c fails with -O2 #224

@remexre

Description

@remexre

Without passing a -O flag to gcc, tests/gcc/link/positive/builtin-ctype-2.c is effectively getting no-opped:

#ifdef __OPTIMIZE__
TEST_CTYPE_CST_TRUE (isascii, 0);
TEST_CTYPE_CST_TRUE (isascii, 1);
TEST_CTYPE_CST_TRUE (isascii, 126);
TEST_CTYPE_CST_TRUE (isascii, 127);

When this is actually set, it expands to code like:

# 43 "tests/gcc/link/positive/builtin-ctype-2.c"
  extern void link_failure_isascii_cst_true(void); extern int isascii(int); if (! isascii(0)) link_failure_isascii_cst_true();
  extern void link_failure_isascii_cst_true(void); extern int isascii(int); if (! isascii(1)) link_failure_isascii_cst_true();
  extern void link_failure_isascii_cst_true(void); extern int isascii(int); if (! isascii(126)) link_failure_isascii_cst_true();
  extern void link_failure_isascii_cst_true(void); extern int isascii(int); if (! isascii(127)) link_failure_isascii_cst_true();

  extern void link_failure_isascii_cst_false(void); extern int isascii(int); if (isascii(-1)) link_failure_isascii_cst_false();
  extern void link_failure_isascii_cst_false(void); extern int isascii(int); if (isascii(128)) link_failure_isascii_cst_false();
  extern void link_failure_isascii_cst_false(void); extern int isascii(int); if (isascii(129)) link_failure_isascii_cst_false();
  extern void link_failure_isascii_cst_false(void); extern int isascii(int); if (isascii(255)) link_failure_isascii_cst_false();

This gets errors like:

tests/gcc/link/positive/builtin-ctype-2.c:44:14: error: Redeclaration of link_failure_isascii_cst_true. Original (from tests/gcc/link/positive/builtin-ctype-2.c:43:14)
tests/gcc/link/positive/builtin-ctype-2.c:44:62: error: Redeclaration of isascii. Original (from tests/gcc/link/positive/builtin-ctype-2.c:43:62)
tests/gcc/link/positive/builtin-ctype-2.c:45:14: error: Redeclaration of link_failure_isascii_cst_true. Original (from tests/gcc/link/positive/builtin-ctype-2.c:44:14)
tests/gcc/link/positive/builtin-ctype-2.c:45:62: error: Redeclaration of isascii. Original (from tests/gcc/link/positive/builtin-ctype-2.c:44:62)
tests/gcc/link/positive/builtin-ctype-2.c:46:14: error: Redeclaration of link_failure_isascii_cst_true. Original (from tests/gcc/link/positive/builtin-ctype-2.c:45:14)
tests/gcc/link/positive/builtin-ctype-2.c:46:62: error: Redeclaration of isascii. Original (from tests/gcc/link/positive/builtin-ctype-2.c:45:62)

I'm distracted right now, but I think:

might be an incorrect check; should it instead always be true of functions? Or something like that?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions