Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 327328 - [gnu c++] Overload resolution ignores __restrict qualifier
Summary: [gnu c++] Overload resolution ignores __restrict qualifier
Status: RESOLVED FIXED
Alias: None
Product: CDT
Classification: Tools
Component: cdt-parser (show other bugs)
Version: 7.0   Edit
Hardware: All Linux
: P3 normal (vote)
Target Milestone: 8.0   Edit
Assignee: Markus Schorn CLA
QA Contact: Markus Schorn CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-10-08 07:55 EDT by Jens Elmenthaler CLA
Modified: 2010-10-13 09:23 EDT (History)
1 user (show)

See Also:


Attachments
Pushes concept of restrict up to IASTPointer and IPointerType (76.29 KB, patch)
2010-10-13 03:47 EDT, Markus Schorn CLA
mschorn.eclipse: iplog-
Details | Diff
testcase + fix (36.13 KB, patch)
2010-10-13 08:55 EDT, Markus Schorn CLA
mschorn.eclipse: iplog-
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Jens Elmenthaler CLA 2010-10-08 07:55:05 EDT
Build Identifier: HEAD

Create a source file with the following content (possibly it requires the GNU Linux headers):

#include <sys/stat.h>

int main() {
  struct stat entryInfo;
  lstat("a", &entryInfo); // ERROR
  return 0;
}

The indexer reports the call to lstat as ambiguity.

Reproducible: Always
Comment 1 Markus Schorn CLA 2010-10-11 05:13:35 EDT
Can you share the declarations for 'lstat' that are considered? You should be able to find them using 'F3' on 'lstat'.
Comment 2 Jens Elmenthaler CLA 2010-10-11 07:12:55 EDT
(In reply to comment #1)
> Can you share the declarations for 'lstat' that are considered? You should be
> able to find them using 'F3' on 'lstat'.
Don't know whether that helps, this is the raw text from the header files, you possibly also need the macros:

extern int lstat (__const char *__restrict __file,
		  struct stat *__restrict __buf) __THROW __nonnull ((1, 2));

extern __inline__ int
__NTH (lstat (__const char *__path, struct stat *__statbuf))
{
  return __lxstat (_STAT_VER, __path, __statbuf);
}
Comment 3 Jens Elmenthaler CLA 2010-10-11 07:35:38 EDT
(In reply to comment #2)
> (In reply to comment #1)
> > Can you share the declarations for 'lstat' that are considered? You should be
> > able to find them using 'F3' on 'lstat'.
> Don't know whether that helps, this is the raw text from the header files, you
> possibly also need the macros:
> extern int lstat (__const char *__restrict __file,
>           struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
> extern __inline__ int
> __NTH (lstat (__const char *__path, struct stat *__statbuf))
> {
>   return __lxstat (_STAT_VER, __path, __statbuf);
> }
Just copied the content of sys/stat.h into the source file and tried to strip it down. When I add __restrict to the definition, or remove it from the declaration, everything is fine.
Comment 4 Jens Elmenthaler CLA 2010-10-11 07:39:41 EDT
Here is a smaller example:

void someFunction(int * __restrict a);
void someFunction(int * a)
{
}

int main()
{
  int number = 5;
  someFunction(&number);

  return 0;
}

Don't know whether this code is valid, but expanding lstat.h one my system resulted in this.
Comment 5 Markus Schorn CLA 2010-10-11 10:28:52 EDT
Thanks, I can see two issues:
* Whereever cv-qualifiers are removed the restrict-qualifier needs to be 
  removed also. (Affects function-types and template-instantiation)

* The restrict-qualifier needs to be considered during overload resolution. 
  An example for overloading would be:

void f(int * __restrict* a) {}
void f(int ** a) {}              // different function

void test()
{
  int* restrict rnumber= 0;
  int* number = 0;
  f(&
  f(&number); // calls f(int** a)

  return 0;
}
Comment 6 Markus Schorn CLA 2010-10-13 03:47:14 EDT
Created attachment 180733 [details]
Pushes concept of restrict up to IASTPointer and IPointerType
Comment 7 CDT Genie CLA 2010-10-13 04:23:03 EDT
*** cdt cvs genie on behalf of mschorn ***
Bug 327328: Push concept of restrict up to IASTPointer and IPointerType.

[*] TrailNodeEqualityChecker.java 1.10 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/TrailNodeEqualityChecker.java?root=Tools_Project&r1=1.9&r2=1.10

[*] DOMASTNodeLeaf.java 1.24 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/DOMAST/DOMASTNodeLeaf.java?root=Tools_Project&r1=1.23&r2=1.24
[*] FindIASTNameTarget.java 1.10 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/DOMAST/FindIASTNameTarget.java?root=Tools_Project&r1=1.9&r2=1.10
[*] CPopulateASTViewAction.java 1.30 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/DOMAST/CPopulateASTViewAction.java?root=Tools_Project&r1=1.29&r2=1.30

[*] DOMSearchUtil.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/DOMSearchUtil.java?root=Tools_Project&r1=1.2&r2=1.3
[*] CompleteParser2Tests.java 1.45 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CompleteParser2Tests.java?root=Tools_Project&r1=1.44&r2=1.45
[*] AST2BaseTest.java 1.79 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java?root=Tools_Project&r1=1.78&r2=1.79
[*] AST2CPPTests.java 1.369 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java?root=Tools_Project&r1=1.368&r2=1.369
[*] GCCCompleteParseExtensionsTest.java 1.15 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/GCCCompleteParseExtensionsTest.java?root=Tools_Project&r1=1.14&r2=1.15

[*] ICASTPointer.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICASTPointer.java?root=Tools_Project&r1=1.7&r2=1.8

[*] ICPPNodeFactory.java 1.14 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java?root=Tools_Project&r1=1.13&r2=1.14

[*] GCCBuiltinSymbolProvider.java 1.29 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java?root=Tools_Project&r1=1.28&r2=1.29

[*] IASTPointer.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java?root=Tools_Project&r1=1.7&r2=1.8
[*] ASTSignatureUtil.java 1.28 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java?root=Tools_Project&r1=1.27&r2=1.28
[*] IPointerType.java 1.11 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IPointerType.java?root=Tools_Project&r1=1.10&r2=1.11

[*] NodeWriter.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java?root=Tools_Project&r1=1.2&r2=1.3
[*] DeclaratorWriter.java 1.9 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java?root=Tools_Project&r1=1.8&r2=1.9

[-] GPPPointerToMemberType.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java?root=Tools_Project&view=markup
[*] CPPPointerType.java 1.22 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java?root=Tools_Project&r1=1.21&r2=1.22
[-] GPPPointerType.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java?root=Tools_Project&view=markup
[*] CPPASTUnaryExpression.java 1.38 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java?root=Tools_Project&r1=1.37&r2=1.38
[*] CPPASTTranslationUnit.java 1.79 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java?root=Tools_Project&r1=1.78&r2=1.79
[*] CPPNodeFactory.java 1.18 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java?root=Tools_Project&r1=1.17&r2=1.18
[*] CPPASTPointerToMember.java 1.12 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java?root=Tools_Project&r1=1.11&r2=1.12
[*] CPPASTPointer.java 1.11 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java?root=Tools_Project&r1=1.10&r2=1.11
[*] GPPASTPointerToMember.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java?root=Tools_Project&r1=1.7&r2=1.8
[*] GPPASTPointer.java 1.9 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointer.java?root=Tools_Project&r1=1.8&r2=1.9
[*] CPPPointerToMemberType.java 1.20 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java?root=Tools_Project&r1=1.19&r2=1.20
[*] GNUCPPSourceParser.java 1.242 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java?root=Tools_Project&r1=1.241&r2=1.242

[*] IGPPASTPointer.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointer.java?root=Tools_Project&r1=1.5&r2=1.6
[*] IGPPASTPointerToMember.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointerToMember.java?root=Tools_Project&r1=1.5&r2=1.6

[*] ASTStringUtil.java 1.20 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java?root=Tools_Project&r1=1.19&r2=1.20

[*] Conversions.java 1.69 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java?root=Tools_Project&r1=1.68&r2=1.69
[*] CPPVisitor.java 1.138 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java?root=Tools_Project&r1=1.137&r2=1.138
[*] CPPTemplates.java 1.126 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java?root=Tools_Project&r1=1.125&r2=1.126
[*] SemanticUtil.java 1.50 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java?root=Tools_Project&r1=1.49&r2=1.50

[*] CPPCompositesFactory.java 1.38 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java?root=Tools_Project&r1=1.37&r2=1.38
Comment 8 Markus Schorn CLA 2010-10-13 08:55:29 EDT
Created attachment 180761 [details]
testcase + fix
Comment 9 Markus Schorn CLA 2010-10-13 08:56:11 EDT
Fixed in 8.0 > 20101013.
Comment 10 Markus Schorn CLA 2010-10-13 08:58:00 EDT
Marking as fixed.
Comment 11 CDT Genie CLA 2010-10-13 09:23:01 EDT
*** cdt cvs genie on behalf of mschorn ***
Bug 327328: Overload resolution and restrict pointers.

[*] ASTManager.java 1.24 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/rename/ASTManager.java?root=Tools_Project&r1=1.23&r2=1.24

[*] CPPASTFieldReference.java 1.38 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java?root=Tools_Project&r1=1.37&r2=1.38
[*] CPPClosureType.java 1.4 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClosureType.java?root=Tools_Project&r1=1.3&r2=1.4
[*] CPPClassScope.java 1.84 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java?root=Tools_Project&r1=1.83&r2=1.84

[*] BuiltinOperators.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BuiltinOperators.java?root=Tools_Project&r1=1.7&r2=1.8
[*] Cost.java 1.20 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Cost.java?root=Tools_Project&r1=1.19&r2=1.20
[*] CPPTemplates.java 1.127 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java?root=Tools_Project&r1=1.126&r2=1.127
[*] CPPSemantics.java 1.193 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java?root=Tools_Project&r1=1.192&r2=1.193
[*] Conversions.java 1.70 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java?root=Tools_Project&r1=1.69&r2=1.70
[*] CVQualifier.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CVQualifier.java?root=Tools_Project&r1=1.2&r2=1.3
[*] TemplateArgumentDeduction.java 1.17 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java?root=Tools_Project&r1=1.16&r2=1.17
[*] SemanticUtil.java 1.51 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java?root=Tools_Project&r1=1.50&r2=1.51
[*] CPPVisitor.java 1.139 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java?root=Tools_Project&r1=1.138&r2=1.139

[*] ASTTypeUtil.java 1.60 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java?root=Tools_Project&r1=1.59&r2=1.60

[*] AST2CPPTests.java 1.370 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java?root=Tools_Project&r1=1.369&r2=1.370