Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MS] Fix assert handling enum forward decls in hasVisibleDefinition
An enum may be considered to be a complete type if it was forward declared. It may be declared with a fixed underlying type, or, in MSVC compatiblity mode, with no type at all. Previously, the code was written with special handling for fixed enums. I generalized the code to check if the underlying integer type is known, which should be the case when targetting the MSVC C++ ABI. Fixes PR45409
- Loading branch information
Showing
5 changed files
with
20 additions
and
4 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
enum fwd_enum; |
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 @@ | ||
#include "A.h" |
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,2 @@ | ||
module A { header "A.h" } | ||
module B { header "B.h" } |
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,12 @@ | ||
// RUN: rm -rf %t | ||
// RUN: %clang_cc1 -triple x86_64-windows-msvc -fms-extensions -fms-compatibility -x c++ -std=c++20 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs/ms-enums %s -verify -fno-modules-error-recovery | ||
|
||
#include "B.h" | ||
// expected-note@A.h:1 {{previous declaration is here}} | ||
// expected-note@A.h:1 2 {{previous definition is here}} | ||
|
||
fwd_enum gv_enum; // expected-error {{must be imported}} | ||
|
||
struct Foo { | ||
enum fwd_enum enum_field; // expected-error 2 {{must be imported}} | ||
}; |