[llvm-bugs] [Bug 50866] New: wrong code for -O of attribute(const or pure) for overriden virtual base class method
via llvm-bugs
llvm-bugs at lists.llvm.org
Fri Jun 25 08:24:40 PDT 2021
https://bugs.llvm.org/show_bug.cgi?id=50866
Bug ID: 50866
Summary: wrong code for -O of attribute(const or pure) for
overriden virtual base class method
Product: new-bugs
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: new bugs
Assignee: unassignedbugs at nondot.org
Reporter: jan.kratochvil at redhat.com
CC: htmldeveloper at gmail.com, llvm-bugs at lists.llvm.org
#include <iostream>
struct A {
virtual int c() __attribute__ ((const));
virtual int p() __attribute__ ((pure ));
};
struct B : public A {
virtual int c() override;
virtual int p() override;
};
int A::c() { std::cout << "A::c()\n"; return 0x01; }
int A::p() { std::cout << "A::p()\n"; return 0x04; }
int B::c() { std::cout << "B::c()\n"; return 0x10; }
int B::p() { std::cout << "B::p()\n"; return 0x40; }
int main() {
B b;
A &a(b);
return a.c() + a.c() + a.p() + a.p(); // 160==0xa0==0x10+0x10+0x40+0x40
}
-------------------------------------------------------------------------
for i in g++ clang++;do $i -o virtone virtone.C -Wall -g -O;./virtone;echo
$?;done
-------------------------------------------------------------------------
PASS: gcc-11.1.1-3.fc34.x86_64
B::c()
B::c()
B::p()
B::p()
160
-------------------------------------------------------------------------
FAIL: clang-12.0.0-2.fc34.x86_64
FAIL: clang version 13.0.0 91053e327ccd27cb1ee66a7d4954d456ceeed5f6
Target: x86_64-unknown-linux-gnu
B::c()
B::p()
160
-------------------------------------------------------------------------
It is discussed here but I see no conclusion there:
https://stackoverflow.com/a/18394716/2995591
The GCC behavior looks more useful to me.
The clang behavior is dangerous. One must make any 'const' or 'pure' virtual
methods also 'final' to be safe for future. If they cannot be 'final' one must
not use 'const'/'pure' for the base class method even despite it could be
useful.
--
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/20210625/56a671fd/attachment-0001.html>
More information about the llvm-bugs
mailing list