Skip to content

Override file of '-foverride-record-layout' is not read when C++ Modules are enabled #153638

@sks75220

Description

@sks75220

The lit test "clang/test/CodeGenCXX/override-layout-nameless-struct-union.cpp" fails when C++ Modules are enabled. We encountered this internally because we have set the default dialect to C++20 for PlayStation, exposing this problem.

The test case includes the following code:

// RUN: %clang_cc1 -w -fdump-record-layouts-simple -foverride-record-layout=%S/Inputs/override-layout-nameless-struct-union.layout %s | FileCheck %s
// CHECK: Type: struct S
// CHECK:   Size:64
// CHECK:   Alignment:32
// CHECK:   FieldOffsets: [0, 32, 32]
struct S {
  short _s;
//union {
    int _su0;
    char _su1;
//};
};

It is an attempt to compile this struct with a non-standard layout specified in the input file.

However, if modules are enabled (either explicitly via -fmodules or implicitly via -std=c++20, or that being the default of the compiler) that layout file is never read, leading to the test failure.

It appears to be a bug in the order of operations in clang/lib/Frontend/FrontEndAction.cpp in presence of modules.

This isn't urgent for us, because we are working around it by suppressing C++ Modules via adding the switch -fno-cxx-modules in the test's RUN line. But regardless, I thought I should report it

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:modulesC++20 modules and Clang Header Modules

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions