From: Chuanqi Xu Date: Mon, 20 Mar 2023 03:37:06 +0000 (+0800) Subject: [NFC] [C++20] [Modules] Add test for #pragma once X-Git-Tag: upstream/17.0.6~14314 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d2639ffff2673c39885400c45c317afd4e2c9f8d;p=platform%2Fupstream%2Fllvm.git [NFC] [C++20] [Modules] Add test for #pragma once Close https://github.com/llvm/llvm-project/issues/38554 Close https://github.com/llvm/llvm-project/issues/58532 It looks like we can workaround the '#pragma once' problem automatically after we force the lazily loading for named modules. Add a test to show this. --- diff --git a/clang/test/Modules/pr38554.cppm b/clang/test/Modules/pr38554.cppm new file mode 100644 index 0000000..0193e5b --- /dev/null +++ b/clang/test/Modules/pr38554.cppm @@ -0,0 +1,21 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %t/c.cppm + +//--- a.hpp +#pragma once +using a = int; + +//--- b.hpp +#pragma once +#include "a.hpp" +a b; + +//--- c.cppm +// expected-no-diagnostics +module; +#include "b.hpp" +export module c; +export using ::a; diff --git a/clang/test/Modules/pr58532.cppm b/clang/test/Modules/pr58532.cppm new file mode 100644 index 0000000..cf530b4 --- /dev/null +++ b/clang/test/Modules/pr58532.cppm @@ -0,0 +1,34 @@ +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/interface.cppm -emit-module-interface \ +// RUN: -o %t/m.pcm +// RUN: %clang_cc1 -std=c++20 %t/implementation.cpp -fmodule-file=m=%t/m.pcm \ +// RUN: -fsyntax-only -verify + +//--- invisible.h +#pragma once // This breaks things. +const int kInvisibleSymbol = 0; +struct invisible_struct +{}; +#define INVISIBLE_DEFINE + +//--- visible.h +#include "invisible.h" +const int kSadlyUndeclaredSymbol = kInvisibleSymbol; +using unfortunately_still_invisible_struct = invisible_struct; +#ifndef INVISIBLE_DEFINE +# error "Still not defined." +#endif + +//--- interface.cppm +module; +#include "visible.h" +export module m; + +//--- implementation.cpp +// expected-no-diagnostics +module; +#include "visible.h" +module m;