clang 19.0.0git
Public Member Functions | Static Public Member Functions | Friends | List of all members
clang::FunctionType::ExtParameterInfo Class Reference

Interesting information about a specific parameter that can't simply be reflected in parameter's type. More...

#include "clang/AST/Type.h"

Public Member Functions

 ExtParameterInfo ()=default
 
ParameterABI getABI () const
 Return the ABI treatment of this parameter.
 
ExtParameterInfo withABI (ParameterABI kind) const
 
bool isConsumed () const
 Is this parameter considered "consumed" by Objective-C ARC? Consumed parameters must have retainable object type.
 
ExtParameterInfo withIsConsumed (bool consumed) const
 
bool hasPassObjectSize () const
 
ExtParameterInfo withHasPassObjectSize () const
 
bool isNoEscape () const
 
ExtParameterInfo withIsNoEscape (bool NoEscape) const
 
unsigned char getOpaqueValue () const
 

Static Public Member Functions

static ExtParameterInfo getFromOpaqueValue (unsigned char data)
 

Friends

bool operator== (ExtParameterInfo lhs, ExtParameterInfo rhs)
 
bool operator!= (ExtParameterInfo lhs, ExtParameterInfo rhs)
 

Detailed Description

Interesting information about a specific parameter that can't simply be reflected in parameter's type.

This is only used by FunctionProtoType but is in FunctionType to make this class available during the specification of the bases of FunctionProtoType.

It makes sense to model language features this way when there's some sort of parameter-specific override (such as an attribute) that affects how the function is called. For example, the ARC ns_consumed attribute changes whether a parameter is passed at +0 (the default) or +1 (ns_consumed). This must be reflected in the function type, but isn't really a change to the parameter type.

One serious disadvantage of modelling language features this way is that they generally do not work with language features that attempt to destructure types. For example, template argument deduction will not be able to match a parameter declared as T (*)(U) against an argument of type void (*)(attribute((ns_consumed)) id) because the substitution of T=void, U=id into the former will not produce the latter.

Definition at line 3825 of file Type.h.

Constructor & Destructor Documentation

◆ ExtParameterInfo()

clang::FunctionType::ExtParameterInfo::ExtParameterInfo ( )
default

Member Function Documentation

◆ getABI()

ParameterABI clang::FunctionType::ExtParameterInfo::getABI ( ) const
inline

Return the ABI treatment of this parameter.

Definition at line 3838 of file Type.h.

References Data.

Referenced by checkExtParameterInfos(), and clang::CodeGen::CodeGenModule::ConstructAttributeList().

◆ getFromOpaqueValue()

static ExtParameterInfo clang::FunctionType::ExtParameterInfo::getFromOpaqueValue ( unsigned char  data)
inlinestatic

Definition at line 3875 of file Type.h.

◆ getOpaqueValue()

unsigned char clang::FunctionType::ExtParameterInfo::getOpaqueValue ( ) const
inline

◆ hasPassObjectSize()

bool clang::FunctionType::ExtParameterInfo::hasPassObjectSize ( ) const
inline

Definition at line 3857 of file Type.h.

References Data.

◆ isConsumed()

bool clang::FunctionType::ExtParameterInfo::isConsumed ( ) const
inline

Is this parameter considered "consumed" by Objective-C ARC? Consumed parameters must have retainable object type.

Definition at line 3847 of file Type.h.

References Data.

◆ isNoEscape()

bool clang::FunctionType::ExtParameterInfo::isNoEscape ( ) const
inline

◆ withABI()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withABI ( ParameterABI  kind) const
inline

Definition at line 3839 of file Type.h.

◆ withHasPassObjectSize()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withHasPassObjectSize ( ) const
inline

Definition at line 3858 of file Type.h.

References clang::Copy.

◆ withIsConsumed()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withIsConsumed ( bool  consumed) const
inline

Definition at line 3848 of file Type.h.

◆ withIsNoEscape()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withIsNoEscape ( bool  NoEscape) const
inline

Friends And Related Function Documentation

◆ operator!=

bool operator!= ( ExtParameterInfo  lhs,
ExtParameterInfo  rhs 
)
friend

Definition at line 3885 of file Type.h.

◆ operator==

bool operator== ( ExtParameterInfo  lhs,
ExtParameterInfo  rhs 
)
friend

Definition at line 3881 of file Type.h.


The documentation for this class was generated from the following file: