macros.c revision de8a9050d79d66325a18168a0994fed125a7790d
17143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor// RUN: %clang_cc1 -emit-module -o %t/macros.pcm -DMODULE %s
26e975c4517958bcc11c834336d340797356058dbDouglas Gregor// RUN: %clang_cc1 -verify -fmodule-cache-path %t -fdisable-module-hash %s
3de8a9050d79d66325a18168a0994fed125a7790dDouglas Gregor// RUN: %clang_cc1 -E -fmodule-cache-path %t -fdisable-module-hash %s | FileCheck -check-prefix CHECK-PREPROCESSED %s
47143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
57143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#if defined(MODULE)
67143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#define INTEGER(X) int
77143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#define FLOAT float
87143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#define DOUBLE double
97143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
107143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#__export_macro__ INTEGER
117143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#__export_macro__ DOUBLE
127143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
13ce835df9301d5bee7fc2c70344e05541f21a5ddaDouglas Gregorint (INTEGER);
14ce835df9301d5bee7fc2c70344e05541f21a5ddaDouglas Gregor
157143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#else
167143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
177143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor__import_module__ macros;
187143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
197143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#ifndef INTEGER
207143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#  error INTEGER macro should be visible
217143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#endif
227143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
237143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#ifdef FLOAT
247143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#  error FLOAT macro should not be visible
257143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#endif
267143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
277143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#ifdef MODULE
287143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#  error MODULE macro should not be visible
297143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#endif
307143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
31de8a9050d79d66325a18168a0994fed125a7790dDouglas Gregor// CHECK-PREPROCESSED: double d
327143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregordouble d;
337143aab97c6e849a5a5005b7853b8c7d5af008edDouglas GregorDOUBLE *dp = &d;
347143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
357143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#__export_macro__ WIBBLE // expected-error{{no macro named 'WIBBLE' to export}}
367143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor
37ce835df9301d5bee7fc2c70344e05541f21a5ddaDouglas Gregorvoid f() {
38de8a9050d79d66325a18168a0994fed125a7790dDouglas Gregor  // CHECK-PREPROCESSED: int i = INTEGER;
39ce835df9301d5bee7fc2c70344e05541f21a5ddaDouglas Gregor  int i = INTEGER; // the value was exported, the macro was not.
40ce835df9301d5bee7fc2c70344e05541f21a5ddaDouglas Gregor}
417143aab97c6e849a5a5005b7853b8c7d5af008edDouglas Gregor#endif
42