<html>
<head>
<base href="https://llvm.org/bugs/" />
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW --- - MSVC __declspec(property) - Indexed accessor property not supported correctly (clang 4.2.1)"
href="https://llvm.org/bugs/show_bug.cgi?id=25635">25635</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>MSVC __declspec(property) - Indexed accessor property not supported correctly (clang 4.2.1)
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>unspecified
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Windows NT
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>C++
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>dsim@smallscript.com
</td>
</tr>
<tr>
<th>CC</th>
<td>dgregor@apple.com, llvm-bugs@lists.llvm.org
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr></table>
<p>
<div>
<pre>Created <span class=""><a href="attachment.cgi?id=15353" name="attach_15353" title="Example of MSVC __declspec(property) - Indexed accessor property not supported correctly (clang 4.2.1)">attachment 15353</a> <a href="attachment.cgi?id=15353&action=edit" title="Example of MSVC __declspec(property) - Indexed accessor property not supported correctly (clang 4.2.1)">[details]</a></span>
Example of MSVC __declspec(property) - Indexed accessor property not supported
correctly (clang 4.2.1)
Indexed accessor property not supported correctly
in clang "4.2.1 Compatible Clang 3.8.0 (trunk)"
-------------------------------------------------
// See: <a href="https://msdn.microsoft.com/en-us/library/yhfk0thd.aspx">https://msdn.microsoft.com/en-us/library/yhfk0thd.aspx</a>
// __declspec(property(get=GetX, put=PutX)) int x[];
// The above statement indicates that x[] can be used with one or more
// array indices. In this case, i=p->x[a][b] will be turned into
// i=p->GetX(a, b), and p->x[a][b] = i will be turned into p->PutX(a, b, i);
Output from MSVC is as follows:
1>------ Rebuild All started: Project: LlvmMsVcProperties, Configuration: Debug
Win32 ------
1> LlvmMsVcProperties.cpp
1> LlvmMsVcProperties.vcxproj -> LlvmMsVcProperties.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
< PropertyTest::PropertyTest(10)
<span class="quote">>x=10
>this->Y[1] : 1
>this->Y[2][3] : 6</span >
< set_a_y as Y[4]=5 : 20
<span class="quote">>this->Y[4]=5 : 20</span >
< set_a_b_y as Y[6][7]=8: 336
<span class="quote">>this->Y[6][7]=8 : 336</span >
=================================================
=================================================
clang/clang-cl version: ...
#define __VERSION__ "4.2.1 Compatible Clang 3.8.0 (trunk)"
-fms-compatibility
REPORTS:
lvmMsVcProperties.cpp(32,56): error : no matching member function for call to
'get_index_y'
printf(">this->Y[1] : %d\n", this->Y[1]);
~~~~~~^
LlvmMsVcProperties.cpp(13,9) : note: candidate function not viable: requires
single argument 'a', but no arguments were provided
int get_index_y(int a) { return a; }
^
LlvmMsVcProperties.cpp(14,9) : note: candidate function not viable: requires 2
arguments, but 0 were provided
int get_index_y(int a, int b) { return a*b; }
^
lvmMsVcProperties.cpp(33,56): error : no matching member function for call to
'get_index_y'
printf(">this->Y[2][3] : %d\n", this->Y[2][3]);
~~~~~~^
LlvmMsVcProperties.cpp(13,9) : note: candidate function not viable: requires
single argument 'a', but no arguments were provided
int get_index_y(int a) { return a; }
^
LlvmMsVcProperties.cpp(14,9) : note: candidate function not viable: requires 2
arguments, but 0 were provided
int get_index_y(int a, int b) { return a*b; }
^
lvmMsVcProperties.cpp(34,57): error : no matching member function for call to
'get_index_y'
printf(">this->Y[4]=5 : %d\n", (this->Y[4]=5));
~~~~~~^
LlvmMsVcProperties.cpp(13,9) : note: candidate function not viable: requires
single argument 'a', but no arguments were provided
int get_index_y(int a) { return a; }
^
LlvmMsVcProperties.cpp(14,9) : note: candidate function not viable: requires 2
arguments, but 0 were provided
int get_index_y(int a, int b) { return a*b; }
^
lvmMsVcProperties.cpp(35,57): error : no matching member function for call to
'get_index_y'
printf(">this->Y[6][7]=8 : %d\n", (this->Y[6][7]=8));
~~~~~~^
LlvmMsVcProperties.cpp(13,9) : note: candidate function not viable: requires
single argument 'a', but no arguments were provided
int get_index_y(int a) { return a; }
^
LlvmMsVcProperties.cpp(14,9) : note: candidate function not viable: requires 2
arguments, but 0 were provided
int get_index_y(int a, int b) { return a*b; }
^
4 errors generated.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>