[llvm-bugs] [Bug 31709] New: compiler warning padding lambda

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Jan 20 10:25:43 PST 2017


https://llvm.org/bugs/show_bug.cgi?id=31709

            Bug ID: 31709
           Summary: compiler warning padding lambda
           Product: clang
           Version: unspecified
          Hardware: Macintosh
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++11
          Assignee: unassignedclangbugs at nondot.org
          Reporter: nivek.research at gmail.com
                CC: dgregor at apple.com, llvm-bugs at lists.llvm.org
    Classification: Unclassified

The clang compiler may warn that lambda's are padded

# clang++ -std=c++11 -stdlib=libc++ -Weverything -Wno-c++98-compat main.cpp
main.cpp:22:13: warning: padding class '(lambda at main.cpp:20:45)' with 4
bytes to align anonymous bit-field [-Wpadded]
            document->prepare();
            ^
1 warning generated.

I believe one no control over how the compiler stores the state for the lambda
so I believe the warning should not be shown.

#include <cstdint>
#include <functional>

class Document {
public:
    bool unlock(void) { return true; }

    void prepare(void) {}
    void perform(void) {}
};

uint32_t GetCurrentEventKeyModifiers(void);

void UnlockDocumentAndCallFunction(Document* const inDocument,
std::function<void(void)> const inFunction);

int main() {
    Document* const document = new Document();
    uint32_t const modifiers = GetCurrentEventKeyModifiers();
    UnlockDocumentAndCallFunction(document, [=]() {
        if (modifiers & 1) {
            document->prepare();
        }
        document->perform();
    });
    delete document;
    return 0;
}

uint32_t GetCurrentEventKeyModifiers(void) {
    return 1;
}

void UnlockDocumentAndCallFunction(Document* const inDocument,
std::function<void(void)> const inFunction) {
    if (inDocument->unlock()) {
        inFunction();
    }
}

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170120/243da01c/attachment.html>


More information about the llvm-bugs mailing list