From d5932a174d1504f1efea681e5ec3fd364de1ff6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Fri, 7 May 2021 20:29:33 +0200 Subject: test cases: Add test ensuring that -include in gcc won't break pch This is just forcing the usage of -include as c_args, even though this particular case can happen easily when this is provided via a dependency cflags. We also ensure that both the headers are included by using locale definitions. --- test cases/common/13 pch/meson.build | 1 + test cases/common/13 pch/withIncludeFile/meson.build | 18 ++++++++++++++++++ test cases/common/13 pch/withIncludeFile/pch/prog.h | 6 ++++++ test cases/common/13 pch/withIncludeFile/prog.c | 11 +++++++++++ 4 files changed, 36 insertions(+) create mode 100644 test cases/common/13 pch/withIncludeFile/meson.build create mode 100644 test cases/common/13 pch/withIncludeFile/pch/prog.h create mode 100644 test cases/common/13 pch/withIncludeFile/prog.c diff --git a/test cases/common/13 pch/meson.build b/test cases/common/13 pch/meson.build index 334afc5..5ca9ab1 100644 --- a/test cases/common/13 pch/meson.build +++ b/test cases/common/13 pch/meson.build @@ -13,6 +13,7 @@ subdir('cpp') subdir('generated') subdir('userDefined') subdir('withIncludeDirectories') +subdir('withIncludeFile') if meson.backend() == 'xcode' warning('Xcode backend only supports one precompiled header per target. Skipping "mixed" which has various precompiled headers.') diff --git a/test cases/common/13 pch/withIncludeFile/meson.build b/test cases/common/13 pch/withIncludeFile/meson.build new file mode 100644 index 0000000..4fd2322 --- /dev/null +++ b/test cases/common/13 pch/withIncludeFile/meson.build @@ -0,0 +1,18 @@ +cc = meson.get_compiler('c') +cc_id = cc.get_id() + +if cc_id == 'lcc' + error('MESON_SKIP_TEST: Elbrus compiler does not support PCH.') +endif + +if cc.get_argument_syntax() == 'gcc' + c_args = ['-include', 'locale.h'] +elif cc.get_argument_syntax() == 'msvc' + c_args = ['/FI' + 'locale.h'] +else + subdir_done() +endif + +exe = executable('prog', 'prog.c', +c_args: c_args, +c_pch : 'pch/prog.h') diff --git a/test cases/common/13 pch/withIncludeFile/pch/prog.h b/test cases/common/13 pch/withIncludeFile/pch/prog.h new file mode 100644 index 0000000..c89890a --- /dev/null +++ b/test cases/common/13 pch/withIncludeFile/pch/prog.h @@ -0,0 +1,6 @@ +#ifndef PROG_H +// Header guards for PCH confuse msvc in some situations. +// Using them here makes sure we handle this correctly. +#define PROG_H +#include +#endif diff --git a/test cases/common/13 pch/withIncludeFile/prog.c b/test cases/common/13 pch/withIncludeFile/prog.c new file mode 100644 index 0000000..7a9a93c --- /dev/null +++ b/test cases/common/13 pch/withIncludeFile/prog.c @@ -0,0 +1,11 @@ +// No includes here, they need to come from the PCH or explicit inclusion + +void func(void) { + fprintf(stdout, "This is a function that fails if stdio is not #included.\n"); + setlocale(LC_ALL, ""); /* This will fail if locale.h is not included */ +} + +int main(void) { + return 0; +} + -- cgit v1.1