12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--- LayoutOverrideSource.h --Override Record Layouts -------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_FRONTEND_LAYOUTOVERRIDESOURCE_H
- #define LLVM_CLANG_FRONTEND_LAYOUTOVERRIDESOURCE_H
- #include "clang/AST/ExternalASTSource.h"
- #include "clang/Basic/LLVM.h"
- #include "llvm/ADT/StringMap.h"
- #include "llvm/ADT/StringRef.h"
- namespace clang {
- /// An external AST source that overrides the layout of
- /// a specified set of record types.
- ///
- /// This class is used only for testing the ability of external AST sources
- /// to override the layout of record types. Its input is the output format
- /// of the command-line argument -fdump-record-layouts.
- class LayoutOverrideSource : public ExternalASTSource {
- /// The layout of a given record.
- struct Layout {
- /// The size of the record.
- uint64_t Size;
- /// The alignment of the record.
- uint64_t Align;
- /// The offsets of the fields, in source order.
- SmallVector<uint64_t, 8> FieldOffsets;
- };
- /// The set of layouts that will be overridden.
- llvm::StringMap<Layout> Layouts;
- public:
- /// Create a new AST source that overrides the layout of some
- /// set of record types.
- ///
- /// The file is the result of passing -fdump-record-layouts to a file.
- explicit LayoutOverrideSource(StringRef Filename);
- /// If this particular record type has an overridden layout,
- /// return that layout.
- bool
- layoutRecordType(const RecordDecl *Record,
- uint64_t &Size, uint64_t &Alignment,
- llvm::DenseMap<const FieldDecl *, uint64_t> &FieldOffsets,
- llvm::DenseMap<const CXXRecordDecl *, CharUnits> &BaseOffsets,
- llvm::DenseMap<const CXXRecordDecl *,
- CharUnits> &VirtualBaseOffsets) override;
- /// Dump the overridden layouts.
- void dump();
- };
- }
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|