[clang] d2639ff - [NFC] [C++20] [Modules] Add test for #pragma once

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Sun Mar 19 20:39:58 PDT 2023


Author: Chuanqi Xu
Date: 2023-03-20T11:37:09+08:00
New Revision: d2639ffff2673c39885400c45c317afd4e2c9f8d

URL: https://github.com/llvm/llvm-project/commit/d2639ffff2673c39885400c45c317afd4e2c9f8d
DIFF: https://github.com/llvm/llvm-project/commit/d2639ffff2673c39885400c45c317afd4e2c9f8d.diff

LOG: [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.

Added: 
    clang/test/Modules/pr38554.cppm
    clang/test/Modules/pr58532.cppm

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/clang/test/Modules/pr38554.cppm b/clang/test/Modules/pr38554.cppm
new file mode 100644
index 0000000000000..0193e5b0e0611
--- /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 0000000000000..cf530b4ac2ccc
--- /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;


        


More information about the cfe-commits mailing list