Ich versuche, eine bestimmte Funktion ohne Optimierung mit clang
zu kompilieren, um bestimmte sicherheitsrelevante Aufrufe an memset()
zu vermeiden weg optimiert werden.In Clang, wie verwenden Sie pro Funktionsoptimierung Attribute?
Gemäß the documentation that can be found here existiert ein optnone
Attribut, das dies ermöglicht. Auch an example can be found here.
Leider (zumindest auf der unten Version von clang
, auf OS X 10.9.5), ist dies Compiler-Warnungen verursacht, wie in diesem Beispiel zu sehen ist:
$ clang --version
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
$ cat optnone.c
#include <string.h>
__attribute__((optnone)) void*
always_memset(void *b, int c, size_t len)
{
return memset(b, c, len);
}
$ clang -Wall -O3 -c -o optnone.o optnone.c
optnone.c:3:16: warning: unknown attribute 'optnone' ignored [-Wattributes]
__attribute__((optnone)) void*
^
1 warning generated.
Ich habe auch versucht #pragma clang optimize off
mit , aber dies verursachte eine unknown pragma ignored
Warnung.
Weiß jemand, warum das nicht funktioniert? Habe ich eine Voraussetzung für die Verwendung dieser Funktion verpasst? (Ich habe auch versucht, verschiedene -std=
der Parameter wie c11
, gnu11
, c99
und gnu99
, aber nichts verändert das Verhalten.)
[funktioniert hier] (http://coliru.stacked-crooked.com/a/1eee116d09555879) –
@BryanChen wissen Sie, welche Version von Clang das ist? Ich habe bemerkt, dass es über 'clang ++' aufgerufen wird. Ich habe das auch versucht, aber keine Änderung meiner Ergebnisse. – mpontillo
Es sieht so aus, als ob dies nicht mit apples clang oder llvm-gcc funktioniert - [file a bug report] (http://bugreport.apple.com). –