clang 8.0.0

Functions
SemaStmtAsm.cpp File Reference
`#include "clang/AST/ExprCXX.h"`
`#include "clang/AST/RecordLayout.h"`
`#include "clang/AST/TypeLoc.h"`
`#include "clang/Basic/TargetInfo.h"`
`#include "clang/Lex/Preprocessor.h"`
`#include "clang/Sema/Initialization.h"`
`#include "clang/Sema/Lookup.h"`
`#include "clang/Sema/Scope.h"`
`#include "clang/Sema/ScopeInfo.h"`
`#include "clang/Sema/SemaInternal.h"`
`#include "llvm/ADT/ArrayRef.h"`
`#include "llvm/ADT/StringSet.h"`
`#include "llvm/MC/MCParser/MCAsmParser.h"`
Include dependency graph for SemaStmtAsm.cpp:

Go to the source code of this file.

## Functions
static void | removeLValueToRValueCast (Expr *E)
| Remove the upper-level LValueToRValue cast from an expression. More...
static void | emitAndFixInvalidAsmCastLValue (const Expr *LVal, Expr *BadArgument, Sema &S)
| Emit a warning about usage of "noop"-like casts for lvalues (GNU extension) and fix the argument with removing LValueToRValue cast from the expression. More...
static bool | CheckAsmLValue (Expr *E, Sema &S)
| CheckAsmLValue - GNU C has an extremely ugly extension whereby they silently ignore "noop" casts in places where an lvalue is required by an inline asm. More...
static bool | isOperandMentioned (unsigned OpNo, ArrayRef< GCCAsmStmt::AsmStringPiece > AsmStrPieces)
| isOperandMentioned - Return true if the specified operand # is mentioned anywhere in the decomposed asm string. More...
static bool | CheckNakedParmReference (Expr *E, Sema &S)
static bool | checkExprMemoryConstraintCompat (Sema &S, Expr *E, TargetInfo::ConstraintInfo &Info, bool is_input_expr)
| Returns true if given expression is not compatible with inline assembly's memory constraint; false otherwise. More...
static StringRef | extractRegisterName (const Expr *Expression, const TargetInfo &Target)
static SourceLocation | getClobberConflictLocation (MultiExprArg Exprs, StringLiteral **Constraints, StringLiteral **Clobbers, int NumClobbers, const TargetInfo &Target, ASTContext &Cont)

## Function Documentation

## ◆ CheckAsmLValue()

static bool CheckAsmLValue | ( | Expr * | E,
|  | Sema & | S
| ) |  |
| static

CheckAsmLValue - GNU C has an extremely ugly extension whereby they silently ignore "noop" casts in places where an lvalue is required by an inline asm.

We emulate this behavior when -fheinous-gnu-extensions is specified, but provide a strong guidance to not use it.

This method checks to see if the argument is an acceptable l-value and returns false if it is a case we can handle.

Definition at line 89 of file SemaStmtAsm.cpp.

## ◆ checkExprMemoryConstraintCompat()

static bool checkExprMemoryConstraintCompat | ( | Sema & | S,
|  | Expr * | E,
|  | TargetInfo::ConstraintInfo & | Info,
|  | bool | is_input_expr
| ) |  |
| static

Returns true if given expression is not compatible with inline assembly's memory constraint; false otherwise.

Definition at line 161 of file SemaStmtAsm.cpp.

## ◆ CheckNakedParmReference()

static bool CheckNakedParmReference | ( | Expr * | E,
|  | Sema & | S
| ) |  |
| static

Definition at line 128 of file SemaStmtAsm.cpp.

Referenced by clang::Sema::LookupInlineAsmIdentifier().

## ◆ emitAndFixInvalidAsmCastLValue()

static void emitAndFixInvalidAsmCastLValue | ( | const Expr * | LVal,
|  | Expr * | BadArgument,
|  | Sema & | S
| ) |  |
| static

Emit a warning about usage of "noop"-like casts for lvalues (GNU extension) and fix the argument with removing LValueToRValue cast from the expression.

Definition at line 70 of file SemaStmtAsm.cpp.

## ◆ extractRegisterName()

static StringRef extractRegisterName | ( | const Expr * | Expression,
|  | const TargetInfo & | Target
| ) |  |
| static

Definition at line 192 of file SemaStmtAsm.cpp.

References clang::Decl::getAttr(), clang::TargetInfo::getNormalizedGCCRegisterName(), clang::VarDecl::getStorageClass(), clang::Expr::IgnoreImpCasts(), clang::TargetInfo::isValidGCCRegisterName(), and clang::SC_Register.

Referenced by getClobberConflictLocation().

## ◆ getClobberConflictLocation()

static SourceLocation getClobberConflictLocation | ( | MultiExprArg | Exprs,
|  | StringLiteral ** | Constraints,
|  | StringLiteral ** | Clobbers,
|  | int | NumClobbers,
|  | const TargetInfo & | Target,
|  | ASTContext & | Cont
| ) |  |
| static

Definition at line 211 of file SemaStmtAsm.cpp.

References extractRegisterName(), clang::TargetInfo::getConstraintRegister(), clang::TargetInfo::getNormalizedGCCRegisterName(), and clang::StringLiteral::getString().

## ◆ isOperandMentioned()

static bool isOperandMentioned | ( | unsigned | OpNo,
|  | ArrayRef< GCCAsmStmt::AsmStringPiece > | AsmStrPieces
| ) |  |
| static

isOperandMentioned - Return true if the specified operand # is mentioned anywhere in the decomposed asm string.

Definition at line 113 of file SemaStmtAsm.cpp.

References clang::GCCAsmStmt::AsmStringPiece::getOperandNo(), and clang::GCCAsmStmt::AsmStringPiece::isOperand().

## ◆ removeLValueToRValueCast()

static void removeLValueToRValueCast | ( | Expr * | E | ) |
| static

Remove the upper-level LValueToRValue cast from an expression.

Definition at line 31 of file SemaStmtAsm.cpp.

References clang::CastExpr::getSubExpr(), clang::Expr::getValueKind(), Parent, clang::CastExpr::setSubExpr(), and clang::Expr::setValueKind().