diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -1840,13 +1840,12 @@ Variables that are identified as requiring a protector will be arranged on the stack such that they are adjacent to the stack protector guard. - If a function that has an ``ssp`` attribute is inlined into a - function that doesn't have an ``ssp`` attribute, then the resulting - function will have an ``ssp`` attribute. + A function with the ``ssp`` attribute cannot be inlined into a function + without a ``ssp/sspreq/sspstrong`` attribute. ``sspreq`` - This attribute indicates that the function should *always* emit a - stack smashing protector. This overrides the ``ssp`` function - attribute. + This attribute indicates that the function should *always* emit a stack + smashing protector. This overrides the ``ssp`` and ``sspstrong`` function + attributes. Variables that are identified as requiring a protector will be arranged on the stack such that they are adjacent to the stack protector guard. @@ -1859,10 +1858,10 @@ #. Variables that have had their address taken are 3rd closest to the protector. - If a function that has an ``sspreq`` attribute is inlined into a - function that doesn't have an ``sspreq`` attribute or which has an - ``ssp`` or ``sspstrong`` attribute, then the resulting function will have - an ``sspreq`` attribute. + A function with the ``sspreq`` attribute cannot be inlined into a function + without a ``ssp/sspreq/sspstrong`` attribute. If a function with the + ``sspreq`` attribute is inlined into a function with a ``ssp/sspstrong`` + attribute, the attribute in the caller will upgrade to ``sspreq``. ``sspstrong`` This attribute indicates that the function should emit a stack smashing protector. This attribute causes a strong heuristic to be used when @@ -1887,9 +1886,10 @@ This overrides the ``ssp`` function attribute. - If a function that has an ``sspstrong`` attribute is inlined into a - function that doesn't have an ``sspstrong`` attribute, then the - resulting function will have an ``sspstrong`` attribute. + A function with the ``sspstrong`` attribute cannot be inlined into a + function without a ``ssp/sspreq/sspstrong`` attribute. If a function with + the ``sspstrong`` attribute is inlined into a function with the ``ssp`` + attribute, the attribute in the caller will upgrade to ``sspreq``. ``strictfp`` This attribute indicates that the function was called from a scope that requires strict floating-point semantics. LLVM will not attempt any