-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[C++20] [Modules] Don't skip pragma diagnostic mappings
Close #75057 Previously, I thought the diagnostic mappings is not meaningful with modules incorrectly. And this problem get revealed by another change recently. So this patch tried to rever the previous "optimization" partially.
- Loading branch information
1 parent
4a84d8e
commit ec527b2
Showing
3 changed files
with
66 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// RUN: rm -rf %t | ||
// RUN: mkdir -p %t | ||
// RUN: split-file %s %t | ||
// | ||
// Treat the behavior of using headers as baseline. | ||
// RUN: %clang_cc1 -std=c++20 %t/use-header.cc -isystem %t -fsyntax-only -verify | ||
// | ||
// RUN: %clang_cc1 -std=c++20 %t/a.cppm -isystem %t -emit-module-interface -o %t/a.pcm | ||
// RUN: %clang_cc1 -std=c++20 %t/use-module.cc -isystem %t -fmodule-file=a=%t/a.pcm -fsyntax-only -verify | ||
|
||
// Test again with reduced BMI. | ||
// RUN: %clang_cc1 -std=c++20 %t/a.cppm -isystem %t -emit-reduced-module-interface -o %t/a.pcm | ||
// RUN: %clang_cc1 -std=c++20 %t/use-module.cc -isystem %t -fmodule-file=a=%t/a.pcm -fsyntax-only -verify | ||
|
||
//--- sys.h | ||
#ifndef SYS_H | ||
#define SYS_H | ||
|
||
#pragma GCC system_header | ||
|
||
template <class C> | ||
struct [[deprecated]] iterator {}; | ||
|
||
_Pragma("GCC diagnostic push") | ||
_Pragma("GCC diagnostic ignored \"-Wdeprecated\"") | ||
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") | ||
|
||
template <class C> | ||
struct reverse_iterator | ||
: public iterator<C> {}; | ||
|
||
_Pragma("GCC diagnostic pop") | ||
|
||
template <class T> | ||
class C { | ||
public: | ||
void i() { | ||
reverse_iterator<T> i; | ||
} | ||
}; | ||
|
||
#endif | ||
|
||
//--- use-header.cc | ||
// expected-no-diagnostics | ||
// However, we see unexpected warnings | ||
#include <sys.h> | ||
|
||
void use() { | ||
C<int>().i(); | ||
} | ||
|
||
//--- a.cppm | ||
module; | ||
#include <sys.h> | ||
export module a; | ||
export using ::iterator; | ||
export using ::C; | ||
|
||
//--- use-module.cc | ||
// expected-no-diagnostics | ||
import a; | ||
|
||
void use() { | ||
C<int>().i(); | ||
} |