Fixes #165445. Fixes a crash when `ASTWriter::GenerateNameLookupTable` processes enum constants from C++20 header units. The special handling for enum constants, introduced in fccc6ee, doesn't account for declarations whose owning module is a C++20 header unit. It calls `isNamedModule()` on the result of `getTopLevelOwningNamedModule()`, which returns null for header units, causing a null pointer dereference.
47 lines
914 B
C++
47 lines
914 B
C++
// Fixes #165445
|
|
|
|
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: split-file %s %t
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 -x c++-user-header %t/header.h \
|
|
// RUN: -emit-header-unit -o %t/header.pcm
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 %t/A.cppm -fmodule-file=%t/header.pcm \
|
|
// RUN: -emit-module-interface -o %t/A.pcm
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 %t/B.cppm -fmodule-file=%t/header.pcm \
|
|
// RUN: -emit-module-interface -o %t/B.pcm
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 %t/use.cpp \
|
|
// RUN: -fmodule-file=A=%t/A.pcm -fmodule-file=B=%t/B.pcm \
|
|
// RUN: -fmodule-file=%t/header.pcm \
|
|
// RUN: -verify -fsyntax-only
|
|
|
|
//--- enum.h
|
|
enum E { Value };
|
|
|
|
//--- header.h
|
|
#include "enum.h"
|
|
|
|
//--- A.cppm
|
|
module;
|
|
#include "enum.h"
|
|
export module A;
|
|
|
|
auto e = Value;
|
|
|
|
//--- B.cppm
|
|
export module B;
|
|
import "header.h";
|
|
|
|
auto e = Value;
|
|
|
|
//--- use.cpp
|
|
// expected-no-diagnostics
|
|
import A;
|
|
import B;
|
|
#include "enum.h"
|
|
|
|
auto e = Value;
|