modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/pr27528.c (about)

     1  /* Check that constant constraints like "i", "n" and "s" can be used in
     2     cases where the operand is an initializer constant.  */
     3  /* { dg-require-effective-target nonpic } */
     4  
     5  int x[2] = { 1, 2 };
     6  
     7  #ifdef __OPTIMIZE__
     8  static inline void __attribute__((__always_inline__))
     9  insn1 (int x)
    10  {
    11    asm volatile ("" :: "n" (x), "i" (x));
    12  }
    13  
    14  static inline void __attribute__((__always_inline__))
    15  insn2 (const void *x)
    16  {
    17    asm volatile ("" :: "s" (x), "i" (x));
    18  }
    19  #endif
    20  
    21  void
    22  foo (void)
    23  {
    24  #ifdef __OPTIMIZE__
    25    insn1 (2);
    26    insn1 (2);
    27    insn1 (400);
    28    insn1 (__LINE__);
    29    insn2 (x);
    30    insn2 (x);
    31    insn2 (&x[1]);
    32    insn2 ("string");
    33  #endif
    34    asm volatile ("" :: "s" (x), "i" (x));
    35    /* At the time of writing, &x[1] is decomposed before reaching expand
    36       when compiling with -O0.  */
    37    asm volatile ("" :: "s" ("string"), "i" ("string"));
    38    asm volatile ("" :: "s" (__FILE__), "i" (__FILE__));
    39    asm volatile ("" :: "s" (__FUNCTION__), "i" (__FUNCTION__));
    40  }