http://llvm.org/bugs/show_bug.cgi?id=19994

            Bug ID: 19994
           Summary: No error for use of local const variable in local
                    class with -std=c++03 -pedantic-errors
           Product: clang
           Version: trunk
          Hardware: Other
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected], [email protected]
    Classification: Unclassified

Clang should probably produce a diagnostic for the source code below under
C++03 modes.

C++03 subclause 9.8 [class.local] paragraph 1:
Declarations in a local class can use only type names, static variables, extern
variables and functions, and enumerators from the enclosing scope.

C++03 subclause 3.2 [basic.def.odr] paragraph 2:
An object or non-overloaded function is used if its name appears in a
potentially-evaluated expression.

The expression in the return statement in X::f() is a potentially-evaluated
expression.

### SOURCE:> cat localVarUse.cc 
int foo() {
   const int n = 42;
   struct X {
      int f() { return n; }
   } x;
   return x.f();
}
Return:  0x00:0


### COMPILER INVOCATION AND OUTPUT:> clang++ localVarUse.cc -std=c++03
-pedantic-errors -Wall -Wextra -c
Return:  0x00:0


### EXPECTED:
localVarUse.cc:4:24: error: reference to local variable 'n' declared in
enclosing function 'foo'
      int f() { return n; }
                       ^
localVarUse.cc:2:14: note: 'n' declared here
   const int n = 42;
             ^
1 error generated.
Return:  0x01:1


### VERSION INFO:> clang++ -v
clang version 3.5.0 
Target: powerpc64-unknown-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/lib/gcc/ppc64-redhat-linux/4.4.4
Found candidate GCC installation: /usr/lib/gcc/ppc64-redhat-linux/4.4.6
Selected GCC installation: /usr/lib/gcc/ppc64-redhat-linux/4.4.6
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64
Return:  0x00:0

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to