https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104177
Bug ID: 104177
Summary: [diagnostic] basic.align#9 should emit diagnostic for
unsupported alignas
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ldalessandro at gmail dot com
Target Milestone: ---
Created attachment 52264
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52264&action=edit
Downloaded CE example.
It appears that gcc doesn't currently support extended alignment for locals in
coroutine frames.
I believe this is **not** a bug, as I think that such extended alignment
support is implementation defined, however I believe that
https://timsong-cpp.github.io/cppwp/n4861/basic.align#9 says that a program
that requests unsupported extended alignment is ill-formed, and thus should get
a diagnostic.
Given the infrastructure required to demonstrate this bug, it's difficult for
me to provide a self contained example, however given the std::generator
support proposed in
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2168r3.pdf, and
implemented in https://godbolt.org/z/T58h1W, the failure is:
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <cstdio>
struct alignas(32) Foo {
};
static std::generator<const uint64_t> foo() {
Foo m{};
fprintf(stdout, "%lu\n", uintptr_t(&m) % alignof(Foo));
fflush(stdout);
assert(uintptr_t(&m) % alignof(Foo) == 0);
co_yield 1;
}
int main() {
for (auto && x : foo()) {
return x;
}
}
CE link: https://godbolt.org/z/GTKPa81W8
Originally came to my attention in a discussion with
https://github.com/bniehoff.