LTO Testing (GNU Compiler Collection (GCC) Internals)

### 6.5 Support for testing link-time optimizations ¶

Tests for link-time optimizations usually require multiple source files that are compiled separately, perhaps with different sets of options. There are several special-purpose test directives used for these tests.

`{ dg-lto-do do-what-keyword }`

  do-what-keyword specifies how the test is compiled and whether it is executed. It is one of:

  `assemble`

    Compile with `-c` to produce a relocatable object file.

  `link`

    Compile, assemble, and link to produce an executable file.

  `run`

    Produce and run an executable file, which is expected to return an exit code of 0.

  The default is `assemble`. That can be overridden for a set of tests by redefining `dg-do-what-default` within the `.exp` file for those tests.

  Unlike `dg-do`, `dg-lto-do` does not support an optional ‘`target`’ or ‘`xfail`’ list. Use `dg-skip-if`, `dg-xfail-if`, or `dg-xfail-run-if`.

`{ dg-lto-options { { options } [{ options }] } [{ target selector }]}`

  This directive provides a list of one or more sets of compiler options to override LTO_OPTIONS. Each test will be compiled and run with each of these sets of options.

`{ dg-extra-ld-options options [{ target selector }]}`

  This directive adds options to the linker options used.

`{ dg-suppress-ld-options options [{ target selector }]}`

  This directive removes options from the set of linker options used.